我的目錄是SQL Server特定(我敢肯定,很多更多):
使用優化搜索where子句 - 這意味着沒有特別的功能標UDF在where子句中
WHERE NOT EXISTS往往是比左連接更快的選擇,其中id是null結構,當您查找與第二個表不匹配的行時。
相關的子查詢往往逐行運行,速度非常慢。
調用其他視圖的視圖不能被編入索引,並且變得非常慢,特別是如果您在大型表上獲得多個級別。
由於至少有一列發送兩次,這是浪費服務器和數據庫及網絡資源,所以選擇*時應特別避免。
光標通常可以用速度更快的基於集合的邏輯來代替 當您以正確的方式存儲數據時,可以避免很多即時轉換。
更新時,請確保添加了where子句,以便不更新新值和舊值相同的行。這可能是更新10,000,000行和更新15樣品之間的differnce(TSQL更新結構,如果使用其他數據庫,你可能要查找正確的語法,但它應該給你的想法。):
Update t
set field1 = t2.field2
from table1 t
join table2 t2 on t.tid = t2.tid
Where t.field1 <> t2.field2
或者
Update t
set field1 = @variable
from table1 t
Where t.field1 <> @variable
如果你經常使用的一個字段的功能,你可能無法正確保存它(或你應該有一個持久計算領域,並做改造每次選擇列的時間只有一次沒有。)
你最好b et是爲你的數據庫選擇一個好的性能調優書(最適合數據庫的最好的),並閱讀有關編寫查詢的章節。
我會與'select * from'的情況爭論。取決於特定的SQL編譯器(每個數據庫引擎如何編譯它接收的某種字節碼的SQL)的工作方式,它可能需要或可能不需要額外的工作。你沒有指定任何特定的數據庫。 – 2011-05-02 13:38:27
'between'是否比'<' and '>'更好取決於特定的SQL優化器。有了它,它總能看到它是一個範圍,但它可能會或可能不會被使用,而'<' and '>'它可能會錯過它的範圍。 – 2011-05-02 13:40:12
優秀的問題 – HLGEM 2011-05-02 14:00:08