Re: [問題] SQL怎麼寫才會快呢?

看板C_Sharp作者 (Gary)時間10年前 (2013/08/24 23:41), 編輯推噓1(1011)
留言12則, 4人參與, 最新討論串1/1
※ 引述《bernachom (Terry)》之銘言: : 最近和朋友聊到這個問題 : 討論的不是SQL的語法,是說,在C#裡,怎麼去讀這個字串會比較快呢? : 例如說: : 這樣子寫 : string dbconnection = "SELECT A FROM B WHERE C ='0'"; : 然後也可以這樣子寫 : : string AA="SELECT A ", BB="FROM B ",CC="WHERE C='0' "; : string dbconnection =AA+BB+CC; : 這樣子寫法之類的 : 但是好像用類似第二種方式,拆開再合併執行會快一些? : (我們合併是用這個AppendFormat) : 雖然不太懂原因,但是好像快一些 : 想詢問的是,SQL都是拆開再合併,這樣子的寫法會比較快嗎? : 有沒有在執行上比較有效率的方式呢,因為希望能讓SQL再快一些 : 謝謝教導了 就我所理解來討論這個問題: 1. 字串的操作最好以stringbuilder來作處理,你可能要先去google一下,stringbilder 的用處及優點在哪?以及字串的操作如果不用stringbuilder會有哪些壞處及好處? 2. SQL的執行快慢並不在於程式裡執行字串的操作,你應該要加強的是sql語法的優化, 如果你目前正在tunning sql查詢,給你個建議 再去google 『sql 執行計畫』,你可 以得知你的SQL查詢的執行成本,來去作語法優化的動作 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.246.72.136

08/24 23:48, , 1F
以上兩點都正確
08/24 23:48, 1F

08/25 00:04, , 2F
請教一下,如果是靜態字串的話,那把字串拆開相加,還會
08/25 00:04, 2F

08/25 00:04, , 3F
比不拆開來得快嗎?
08/25 00:04, 3F

08/25 00:04, , 4F
就像是我第一個和第二個SQL寫得這個樣子~
08/25 00:04, 4F

08/25 00:05, , 5F
第一個都不拆的話,照理說不是應該比不拆開來的快嗎?
08/25 00:05, 5F
首先,這個問題你google stringbuilder就會有答案。 再來,我想程式執行的快慢,在SQL Statement並不會因為你將字串怎麼拆怎麼接會有 明顯差異,因為一切都跟『記憶體』有關。 以前受饋於版上眾位熱心人士.... 我將解答PO在下面好了 動態字串操作時,會產生很多不必要的記憶體,如下: string a = "SELECT *" a = a + " FROM TEST" 記憶體實際上 為了這個操作 NEW了2~3個參考 所以才會推薦你動態字串都用string builder 再來你這邊屬於靜態字串操作,但是字串如何操作,與SQL的運作無關,畢竟字串組 一組後會送到SERVER作編譯動作,重點是在SQL語法方面。 如果您指的是系統的效率的話,我想字串會這樣拆主要是為了維護方便,至於效能.. 我想人體是不會查覺得出來。 ※ 編輯: MacPerson 來自: 111.246.72.136 (08/25 00:13) ※ 編輯: MacPerson 來自: 111.246.72.136 (08/25 00:29) ※ 編輯: MacPerson 來自: 111.246.72.136 (08/25 00:30)

08/25 00:35, , 6F
最後四行,點出我的問題了,我正在想說,為什麼我看大家
08/25 00:35, 6F

08/25 00:36, , 7F
都拆開,原因應該是維護方便
08/25 00:36, 7F

08/25 00:36, , 8F
謝謝您的熱心幫忙 :)
08/25 00:36, 8F

08/26 16:25, , 9F
單指.net用SQL的話,不要再自己串查詢字串了..EF、Linq都好
08/26 16:25, 9F

08/26 16:26, , 10F
真要用ADO.NET的話,用Parameter也好.....
08/26 16:26, 10F

08/27 11:15, , 11F
組SQL字串 太容易有Injection攻擊了 可以考慮L大的方式
08/27 11:15, 11F

08/27 20:32, , 12F
謝謝指導:) 這幾個月才開始學而已,感謝幫忙(筆記)
08/27 20:32, 12F
文章代碼(AID): #1I6DGx7j (C_Sharp)