1.晝量避免使用*通配符;
2.晝量使用數字型字段(不要用字符型代替數字型);
3.合理使用 EXISTS子句
SELECT SUM(T1.C1)
FROM T1
WHERE ( (SELECT COUNT(*) FROM T2 WHERE T2.C2=T1.C2)>0)
SELECT SUM(T1.C1)
FROM T1
WHERE EXISTS (SELECT COUNT(*) FROM T2 WHERE T2.C2=T1.C2)
後者效率高,因為後者不會產生大量鎖定的表掃描或是索引掃描;
4.避免在WHERE 子句中使用 is null或is not null。因為包含null值的列將不會被包含在索引中,引擎將被迫使用表掃描;
5.晝量避免在WHERE 子句中對字段進行函數或表達式操作,這樣引擎將被迫使用表掃描,如:
SELECT * FROM T1 WHERE F1*2=100
SELECT * FROM T1 WHERE F1=100/2
後者效率高,因此應盡量將操作移至等號右側。
6.避免在索引過的字符數據中,使用非找頭字母搜索,這也使得引擎無法使用索引,如:
SELECT * FROM T1 WHERE NAME LIKE '%L% ' --表掃描
SELECT * FROM T1 WHERE SUBSTRING(NAME,2,1)= 'L ' --表掃描
SELECT * FROM T1 WHERE NAME LIKE 'L% ' --索引
7.充分利用連接條件。在某些情況下,兩個表之間可能有不止一個連接條件,這時在WHERE子句中將連接條件完整的寫上,有可能會大大提高查詢速度。
8.如果條件許可,可以適當增加冗余字段,雖違背了第三范式,但可提高查詢性能。