sql查詢優化

2022-04-22 19:44:33 字數 2601 閱讀 4949

where 及 order by 涉及的列上建立索引。

where子句中使用!=或<>操作符時,會導致引擎放棄使用索引而進行全表掃瞄。

like 『%...%』(全模糊)這樣的條件,是無法使用索引的,也會導致全表掃瞄。

where 子句中對字段進行 null 值判斷時,會導致引擎放棄使用索引而進行全表掃瞄(可以在列上設定預設值0,確保表中的列沒有null值)。

select id from

table

where phone is

null

改為select id from

table

where phone =

0

where 子句中使用 or 來連線條件,將導致引擎放棄使用索引而進行全表掃瞄(union all)。
select id from

table

where score=

99or score=

100改為

select id from

table

where score=

99union

allselect id from

table

where score=

100

in 和 not in 也要慎用,會導致全表掃瞄(連續的值可以用between代替)。
select id from

table

where score in(98,99,100

)

改為

select id from

table

where score between

98and

100

where 子句中對字段進行表示式操作(「=」左邊進行函式、算術運算或其他表示式運算),這將導致引擎放棄使用索引而進行全表掃瞄(不動字段,動固定值)。
select id from

table

where soccer/2=

50改為:

select id from

table

where soccer=50*

2

where子句中對字段進行函式操作,這將導致引擎放棄使用索引而進行全表掃瞄。
select id from

table

where

substring(name,1,3)=

'abc

'改為

select id from

table

where name like

'abc%

'

exists 代替 in
select num from a where num in(select num from

b)

改為

select num from a where

exists(select

1from b where num=a.num)

索引並不是越多越好,索引固然可以提高 select 的效率,但同時降低了 insert 及 update 的效率,因為 insert 或 update 時有可能會重建索引。乙個表的索引數最好不要超過6個。
盡量使用數字型字段,若只含數值資訊的字段盡量不要設計為字元型,這會降低查詢和連線的效能,並會增加儲存開銷。這是因為引擎在處理查詢和連線時會逐個比較字串中每乙個字元,而對於數字型而言只需要比較一次就夠了(型別盡量用數值標識,如男:1,女:0)。
盡可能的使用 varchar 代替 char ,因為首先變長字段儲存空間小,可以節省儲存空間,其次對於查詢來說,在乙個相對較小的字段內搜尋效率顯然要高些。
用具體的字段列表代替「*」,不要返回用不到的任何字段。
避免頻繁建立和刪除臨時表,以減少系統表資源的消耗。
如果一次性插入資料量很大,那麼可以使用 select into 代替 create table。如果資料量不大,為了緩和系統表的資源,應先create table,然後insert。
如果使用到了臨時表,在儲存過程的最後務必將所有的臨時表顯式刪除,先 truncate table ,然後 drop table。
盡量避免使用游標,如果游標操作的資料超過1萬行,那麼就應該考慮改寫。
盡量避免大事務操作,提高系統併發能力。
盡量避免向客戶端返回大資料量,若資料量過大,應該考慮相應需求是否合理。
選擇正確的儲存引擎,在 mysql 中有兩個儲存引擎 myisam 和 innodb,每個引擎都有利有弊。

myisam 適合於一些需要大量查詢的應用,但其對於有大量寫操作並不是很好。甚至你只是需要 update 乙個字段,整個表都會被鎖起來,而別的程序,就算是讀程序都無法操作直到讀操作  完成。另外,myisam 對於 select count(*) 這類的計算是超快無比的。

innodb 的趨勢會是乙個非常複雜的儲存引擎,對於一些小的應用,它會比 myisam 還慢。他是它支援「行鎖」 ,於是在寫操作比較多的時候,會更優秀。並且,他還支援更多的高階應用,比  如:事務。

查詢優化 SQL優化

查詢優化注意點 代表查詢速度比較 1 所有查詢必須注意 的使用必要性 cout 1 cout 2 字段 主鍵索引 字段 普通索引 字段 沒有索引 3 乙個字段 多個字段 欄位多越慢 4 大於10000和大於10001的區別 後者大於前者 5 列沒別名 列 有別名6 兩個條件,where時應該將符合資...

查詢優化 sql

查詢1 declare d datetime set d getdate select top 1000 from product where contains name,男上裝 or contains text,男上裝 select datediff ms,d,getdate set d getd...

優化sql查詢

如何寫出高效能的sql語句 執行計畫是資料庫根據sql語句和相關表的統計資訊坐出的乙個查詢方案,這個方案是由查詢優化器自動分析產生的,比如一條sql語句如果用來從乙個n條記錄中查詢其中一條,那查詢優化器會選擇 索引掃瞄 方式。該錶如果使用了歸檔,那查詢優化器就會改變方案,採用 全表掃瞄 方式。執行計...