mysql優化筆記

2021-09-21 17:30:03 字數 1407 閱讀 6547

首先檢視sql執行計畫,確定執行過程是否用到索引,是否全表掃瞄等 

例:explain select * from servers
1:子查詢,in 和 exists的區別: in主要先執行內查詢後與外表比較,exists先查詢外表後與內錶比較判斷是否滿足條件,具體查詢效率取決於查詢條件內錶資料與外表資料大小,以及查詢條件是否包含索引.

2:not in ,is not null等非判斷會導致索引失效,掃瞄全表

3:條件中用or,即使其中有條件帶索引,也不會使用索引查詢,除非or前後所有字段全部帶索引

4;對於多列索引,不是使用的第一部分,則不會使用索引。

5:like的模糊查詢以%開頭,索引失效

6:如果列型別是字串,那一定要在條件中將資料使用引號引用起來,否則不會使用索引

7:如果表內容較小,不使用索引反而更快..

8:不使用order by rand(),因為這樣會導致資料列被多次掃瞄

例如:select id from `table_name` order by rand() limit 1000;

可以優化為select id from `table_name` t1 join (select rand()*(select max(id) from `table_name`) as nid) t2 on t1.id>t2.nid limit 1000;

9:分頁查詢.隨著表空間資料的增加,limit分頁查詢會越來越慢,優化方案是提前獲取,前一頁最大行數,

例如:select id from `table_name` id>80000 limit 20;

10:分段查詢,在一些查詢過程中,查詢條件範圍過大,會導致查詢緩慢,主要原因是掃瞄行數過多,這個時候可以分段查詢,迴圈遍歷然後合併結果集.

11:where 判斷中避免出現null,因為null會導致查詢放棄索引進行全表掃瞄.

12:like模糊查詢出現%name%查詢時,name欄位新增索引但是不起作用,這時候需要使用全文索引,需要注意全文索引查詢sql與普通索引查詢語句的區別

select id from `table_name` where name like '%zhang%';

使用全文索引

select id from `table_name` where match(name) against('zhang' in boolean mode);

13:避免在where 子句中使用表示式操作,這會導致引擎放棄索引.

14:避免where子句**現,column欄位的型別與傳入引數型別不一致出現的型別轉換.

15:聯合索引遵守最左字首法則,常用的查詢欄位要放最前面,索引順序很重要

16:特殊情況使用force index強制選擇查詢走指定索引.

17:範圍查詢,比如between,<,>等條件會導致後邊的索引字段失效.

MySQL筆記(查詢優化)

查詢效能優化 基本原則 優化資料訪問 一些典型的錯誤包括 提取了超過需要的行 多表聯接時提取所有列或提取所有的列 select 可能會造成覆蓋索引這樣的優化手段失效 mysql中,最簡單的開銷指標包括 1.執行時間 2.檢查的行數 3.返回的行數 通過使用索引,在explain時可以減少處理的行數 ...

Mysql效能優化筆記

一,索引 1.innodb索引使用的是b 樹 2.盡量簡化where條件,比如不要出現 where id 3 5,這無法使用索引 3.索引很大時,可以冗餘一列來模擬雜湊索引 4.小的表不需要使用索引,很大的表需要用分塊技術,也不用索引 5.索引的選擇性 不重複的數量 總的數量 選擇性越高,效率越高,...

高效能Mysql筆記 優化

了解查詢的整個生命週期,清楚每個階段的時間消耗情況 參考select profiling 檢視profiling是否開啟 set profiling 1 開啟profiling show profiles 檢視每條查詢的效能 show profile for query id 檢視query id的...