sql 優化注意事項

2021-08-07 15:43:40 字數 1011 閱讀 5128

1.儲存過程比sql語句效率高;儲存過程經過預編譯處理 而sql查詢沒有

2.給表建立索引的字段(常見字段是where 後的條件字段)

3.查詢表時使用(nolock)查詢語句不會阻塞 

4.不要使用 select * from dbo.table ,用具體的字段列表代替「*」,不要返回用不到的任何字段。同時避免使用count(*);

5.from最後面的表為基礎表,一般要選擇記錄數最少的表作為基礎表。

6.使用truncate替代delete來刪除記錄,但truncate資料不記錄日誌,無法進行回滾

7.觀察資料的分布,然後把能最快降低資料集的where欄位放到前面;假設status=1能一下子把資料從1000萬降到1萬,那在where中,第乙個出現的條件應該是status=1

8.在新建臨時表時,如果一次性插入資料量很大,那麼可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;

如果資料量不大,為了緩和系統表的資源,應先create table,然後insert。

9.使用確定的schema

在使用表,儲存過程,函式等等時,最好加上確定的schema。這樣可以直接找到對應目標,避免去計畫快取中搜尋。

而且搜尋會導致編譯鎖定,最終影響效能。比如select * from dbo.testtable比select * from testtable要好

10.用exists替代in、用not exists替代not in:

在許多基於基礎表的查詢中,為了滿足乙個條件,往往需要對另乙個表進行聯接。在這種情況下,使用exists(或not exists)通常將提高查詢的效率。

在子查詢中,not in子句將執行乙個內部的排序和合併。

無論在哪種情況下,not in都是最低效的 (因為它對子查詢中的表執行了乙個全表遍歷)。

11.插入資料到臨時表,盡量避免order by

SQL 注意事項

選擇表名 配置ctrl 3 能夠select 桌 use nb go 物 storedprocedure dbo sp select 指令碼日期 05 28 2015 21 46 25 set ansi nulls on go set quoted identifier on go create p...

sql 注意事項

在 oracle 都是不等於號的意思。都可以使用。但是奇怪的是,我想拿出price 不是180000旳商品時 select id,name,from product where price 180000 執行這個語句是,price null 的記錄不出來,也就是拿不到price 是null的商品,必...

關於SQL效能優化及注意事項

possible keys 表示查詢時,可能使用的索引 key 表示實際使用的索引 key len 索引欄位的長度,在組合索引中判斷索引被使用的情況尤為重要 ref 列與索引的比較 rows 掃瞄出的行數 filtered 按表條件過濾的行百分比 extra 執 況的描述與說明 關於索引的劃分 雜湊...