SQL語句優化介紹

2021-12-29 16:27:27 字數 2236 閱讀 5236

1, 對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引

2,應盡量避免在 where 子句中對字段進行 null 值判斷,建立表時null是預設值,但大多數時候應該使用not null,或者使用乙個特殊的值,如0,-1作為默 認值。

3,應盡量避免在 where 子句中使用!=或<>操作符, mysql只有對以下操作符才使用索引:,>=,between,in,以及某些時候的like。

4,應盡量避免在 where 子句中使用 or 來連線條件, 否則將導致引擎放棄使用索引而進行全表掃瞄, 可以 使用union合併查詢:

select id from t where num=10 union all select id from t where num=20

5,in 和 not in 也要慎用,否則會導致全表掃瞄,對於連續的數值,能用 between 就不要用 in 了:select id from t where num between 1 and 3

6,下面的查詢也將導致全表掃瞄:

select id from t where name like '%abc%' 或者select id from t where name like '%abc'若要提高效率,可以考慮全文檢索。

而select id from t where name like 'abc%' 才用到索引

7, 如果在 where 子句中使用引數,也會導致全表掃瞄。

8,應盡量避免在 where 子句中對字段進行表示式操作,應盡量避免在where子句中對字段進行函式操作

9,很多時候用 exists 代替 in

是乙個好的選擇: select num from a where num in(select num from b).用下面的語句替換: select num from a where exists(select 1 from b where num=a.num)

10,索引固然可以提高相應的 select 的效率,但同時也降低了 insert

及 update 的效率,因為 insert 或 update 時有可能會重建索引,所以怎樣建索引需要慎重考慮,視具體情況而定。乙個表的索引數最好不要超過6個,若太多則應考慮一些不常使用到的列上建的索引是否有必要。

11,應盡可能的避免更新 clustered

索引資料列, 因為 clustered 索引資料列的順序就是表記錄的物理儲存順序,一旦該列值改變將導致整個表記錄的順序的調整,會耗費相當大的資源。若應用系統需要頻繁更新 clustered 索引資料列,那麼需要考慮是否應將該索引建為 clustered 索引。

12,盡量使用數字型字段,若只含數值資訊的字段盡量不要設計為字元型,這會降低查詢和連線的效能,並會增加儲存開銷。

13,盡可能的使用 varchar/nvarchar

代替 char/nchar , 因為首先變長字段儲存空間小,可以節省儲存空間,其次對於查詢來說,在乙個相對較小的字段內搜尋效率顯然要高些。

14,最好不要使用"*"返回所有: select

* from t ,用具體的字段列表代替「*」,不要返回用不到的任何字段。

15,盡量避免向客戶端返回大資料量,若資料量過大,應該考慮相應需求是否合理。

16,使用表的別名(alias):

當在sql語句中連線多個表時,

請使用表的別名並把別名字首於每個column

上.這樣一來,就可以減少解析的時間並減少那些由column歧義引起的語法錯誤.

17,使用「臨時表」暫存中間結果

簡化sql語句的重要方法就是採用臨時表暫存中間結果,但是,臨時表的好處遠遠不止這些,將臨時結果暫存在臨時表,後面的查詢就在tempdb中了,這可以避免程式中多次掃瞄主表,也大大減少了程式執行中「共享鎖」阻塞「更新鎖」,減少了阻塞,提高了併發效能。

18,一些sql查詢語句應加上nolock,讀、寫是會相互阻塞的,為了提高併發效能,對於一些查詢,可以加上nolock,這樣讀的時候可以允許寫,但缺點是可能讀到未提交的髒資料。使用 nolock有3條原則。查詢的結果用於「插、刪、改」的不能加nolock !查詢的表屬於頻繁發生頁**的,慎用nolock !使用臨時表一樣可以儲存「資料前影」,起到類似oracle的undo表空間的功能,能採用臨時表提高併發效能的,不要用nolock 。

19,常見的簡化規則如下:不要有超過5個以上的表連線(join),考慮使用臨時表或表變數存放中間結果。少用子查詢,檢視巢狀不要過深,一般檢視巢狀不要超過2個為宜。

sql語句優化五(索引的介紹)

一 索引的介紹 sql索引在資料庫優化中占有乙個非常大的比例,乙個好的索引的設計,可以讓你的效率提高幾十甚至幾百倍,在這裡將帶你一步步揭開他的神秘面紗。sql索引有兩種,聚集索引和非聚集索引,索引主要目的是提高了sql server系統的效能,加快資料的查詢速度與減少系統的響應時間 下面舉兩個簡單的...

SQL 語句優化 OR 語句優化案例

從上海來到溫州,看了前幾天監控的sql語句和資料變化,發現有一條語句的io次數很大,達到了150萬次io,而兩個表的資料也就不到20萬,為何有如此多的io次數,下面是執行語句 select ws.nodeid,wi.laststepid,wi.curstepid from workflowinfo ...

sql語句優化!

1.不要使用in操作符,這樣資料庫會進行全表掃瞄,推薦方案 在業務密集的sql當中盡量不採用in操作符 a 改為 a 4.is null 或is not null操作 判斷字段是否為空 5.及 操作符 大於或小於操作符 大於或小於操作符一般情況下是不用調整的,因為它有索引就會採用索引查詢,但有的情況...