我們目前正在調查對我們的SQL服務器的負荷,並尋找方法來減輕它。在我的專上教育期間,我總是被告知,從性能的角度來看,讓SQL Server做這項工作更便宜。但這是真的嗎?性能的SQL函數與代碼的功能
下面是一個例子:
SELECT ord_no FROM oelinhst_sql
這在14秒之返回783119條記錄。該場是一個char(8)
,但所有的訂單號碼是六位數所以每個有兩個空白字符領先。我們通常修剪這個領域,所以我跑瞭如下測試:
SELECT LTRIM(ord_no) FROM oelinhst_sql
這13秒鐘內返回的783119條記錄。我也嘗試了第二次檢查:
SELECT LTRIM(RTRIM(ord_no)) FROM oelinhst_sql
沒有什麼修剪就沒事了,但我想看看是否有在調用該函數的僅僅是行爲的任何開銷,但它仍然13秒鐘內返回。
我的經理在談論移動之類的字符串修剪出來的SQL,進入源代碼,但測試結果並非如此。我的經理也說,他聽說使用SQL函數意味着索引不會被使用。這是否有任何事實?
哪個服務器您使用的是? SQL Server,Oracle,MySQL ...... – Tony
使用SQL Server的系統最慢的部分將是您的磁盤訪問。任何會減少從磁盤讀取的數據都會(通常)加快查詢速度。因此,從SQL讀取*一切*然後在代碼中處理它不會有太大的幫助。 – Tony
在你的例子中,由於沒有任何'WHERE'子句,因此不會使用任何索引。您的經理可能會說,如果您有一個像「SELECT ... WHERE LTRIM(ordno)= 17'這樣的子句,那麼仍然不會使用索引。這可能是真的_unless_你也有一個計算列的功能索引或索引[不同的RDBMS有不同的做法]。 –