30種sql查詢語句優化方法:
1、應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄,如:
select id from t where num is null
可以在num上設定預設值0,確保表中num列沒有null值,然後這樣查詢:
select id from t where num=0
2、盡量避免在 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
3、下面的查詢也將導致全表掃瞄:(不能前置百分號)
select id from t where name like 『�c%』
若要提高效率,可以考慮全文檢索。
4、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
5、如果在 where 子句中使用引數,也會導致全表掃瞄。因為sql只有在執行時才會解析區域性變數,但優化程式不能將訪問計畫的選擇推遲到執行時;它必須在編譯時進行選擇。然 而,如果在編譯時建立訪問計畫,變數的值還是未知的,因而無法作為索引選擇的輸入項。如下面語句將進行全表掃瞄:
select id from t where num=@num
可以改為強制查詢使用索引:
select id from t with(index(索引名)) where num=@num
8、很多時候用 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)
9、盡可能的使用 varchar/nvarchar 代替 char/nchar ,因為首先變長字段儲存空間小,可以節省儲存空間。
10、任何地方都不要使用 select * from t ,用具體的字段列表代替「*」。
11.盡量新增限制條件,減少檢索資料的行數
12.能夠分開查詢的,盡量分開,可以提高每次響應的速度
13.盡量使用索引列為查詢的首列
14.盡量使用鏈結查詢替代子查詢
15.盡量不要修改主鍵的值
16.如果欄位的值的約束寫錯會導致索引不生效而全表掃瞄,字段型別盡量別寫錯。
17、分頁:查詢資料量比較大的時候可以考慮分頁,降低壓力。
二、.效能優化
1.分庫,
主從備份 讀寫分離
2.分表
一張表中的字段最好不要超過15個,將一張表拆分成 兩張或者多張表
允許部分字段冗餘
user
id name gennder phone emai info
拆分:user
id name phone
info
gennder phone emai info
Mysql資料庫如何優化?
1 優化分片鍵 如果有分庫分表 1 不要使用分割槽,分割槽效能很低,難以維護 2 不要使用主從資料庫,讀寫分離有了快取就再也不需要分主從了,畢竟延遲問題是無法解決的 雖然很小 3 如果使用分庫分表,那麼查詢條件務必先走分片鍵,否則就成了全表查詢,效能超低 2 優化索引 1 索引列務必重複度低 2 使...
資料庫如何優化
1.程式優化,用 prepareedstatement 進行增刪改查 2.程式優化,盡量批量處理,避免逐條處理,減小 io數 3.查詢結果不要用 來查詢所有字段,要明確指明結果字段 4.減少多表連線數,盡量少的表進行連線 5.表連線時,盡量用主鍵進行連線或用唯一索引 6.表的查詢多時,一定建立索引 ...
MySQL資料庫如何做好優化
碰到過好幾次這樣的題目,可每次都不能答的完全正確.現在大概列出如下 忘各位補充 1.資料庫的設計 盡量把資料庫 設計的更小的佔磁碟空間.1 盡可能使用更小的整數型別.mediumint就比int更合適 2 盡可能的定義欄位為not null,除非這個字段需要null.3 如果沒有用到變長字段的話比如...