提高sql質量,增加查詢速度

2021-10-06 14:31:15 字數 1606 閱讀 2492

應盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃瞄。

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

應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄,如: select id from t where num is null 可以在num上設定預設值0,確保表中num列沒有null值,然後這樣查詢:

select id from t where num=0

應盡量避免在 where 子句中使用 or 來連線條件,否則將導致引擎放棄使用索引而進行全表掃瞄,如: select id from t where num=10 or num=20 可以這樣查詢: select id from t where

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

in 和 not in 也要慎用,否則會導致全表掃瞄,如: select id from t where num

in(1,2,3) 對於連續的數值,能用 between 就不要用 in 了: select id from t where

num between 1 and 3

應盡量避免在 where 子句中對字段進行表示式操作,這將導致引擎放棄使用索引而進行全表掃瞄。如: select id from t where num/2=100 應改為: select id from t where num=100*2

很多時候用 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)

並不是所有索引對查詢都有效,sql是根據表中資料來進行查詢優化的,當索引列有大量資料重複時,sql查詢可能不會去利用索引,如一表中有字段

***,male、female幾乎各一半,那麼即使在***上建了索引也對查詢效率起不了作用。

索引並不是越多越好,索引固然可以提高相應的 select 的效率,但同時也降低了 insert 及 update 的效率,因為 insert 或 update

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

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

逐個比較字串中每乙個字元,而對於數字型而言只需要比較一次就夠了。

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

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

盡量避免使用游標,因為游標的效率較差,如果游標操作的資料超過1萬行,那麼就應該考慮改寫。

SQL 優化增加查詢的範圍限制

第三掌 增加查詢的範圍限制 增加查詢的範圍限制,避免全範圍的搜尋。例3 以下查詢表record 中時間actiontime小於2001年3月1日的資料 select from record where actiontime to date 20010301 yyyymm 查詢計畫表明,上面的查詢對錶...

利用SQL索引提高查詢速度

1.合理使用索引 索引是資料庫中重要的資料結構,它的根本目的就是為了提高查詢效率。現在大多數的資料庫產品都採用ibm最先提出的isam索引結構。索引的使用要恰到好處,其使用原則如下 field3上沒有索引的情況下 對a作全表掃瞄,結果排序 對b作全表掃瞄,結果排序 結果合併。對於很小的表或巨大的表比...

Delphi 增加 查詢Win使用者

附 在delphi帶的win32 developer s references檢視user info 1 知道所用標頭檔案是lmaccess.h,但是delphi並沒有帶這個檔案,pb帶了這個檔案,裡面確實有常數user priv user 的定義,下面的內容是從網上找到的。const se cre...