看板 C_Sharp 關於我們 聯絡資訊
※ 引述《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
jimmy701010:以上兩點都正確 08/24 23:48
bernachom:請教一下,如果是靜態字串的話,那把字串拆開相加,還會 08/25 00:04
bernachom:比不拆開來得快嗎? 08/25 00:04
bernachom:就像是我第一個和第二個SQL寫得這個樣子~ 08/25 00:04
bernachom:第一個都不拆的話,照理說不是應該比不拆開來的快嗎? 08/25 00:05
首先,這個問題你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)
bernachom:最後四行,點出我的問題了,我正在想說,為什麼我看大家 08/25 00:35
bernachom:都拆開,原因應該是維護方便 08/25 00:36
bernachom:謝謝您的熱心幫忙 :) 08/25 00:36
Litfal:單指.net用SQL的話,不要再自己串查詢字串了..EF、Linq都好 08/26 16:25
Litfal:真要用ADO.NET的話,用Parameter也好..... 08/26 16:26
a926:組SQL字串 太容易有Injection攻擊了 可以考慮L大的方式 08/27 11:15
bernachom:謝謝指導:) 這幾個月才開始學而已,感謝幫忙(筆記) 08/27 20:32