mysql常用的優化操作
1. explain檢視SQL執行計劃
在查詢語句前加explain來檢視SQL執行計劃,其中五列比較重要:
- type列,連線型別。一個好的sql語句至少要達到range級別。
- 杜絕出現all級別key列,使用到的索引名。
- 如果沒有選擇索引,值是NULL。可以採取強制索引方式key_len列,
- 索引長度rows列,掃描行數。
- 該值是個預估值extra列,詳細說明。注意常見的不太友好的值有:Using filesort, Using temporary
2.SQL語句IN的包含值不應該過多
MySQL對於IN做了相應的優化,即將IN中的常量全部儲存在一個陣列裡面,而且這個陣列是排好序的。但是如果數值較多,產生的消耗也是比較大的。例如:
select id from t where num in(1,2,3)
對於連續的數值,能用 between 就不要用 in 了;再或者使用連線來替換。
3.SELECT語句務必指明欄位名稱
SELECT *增加很多不必要的消耗(cpu、io、記憶體、網路頻寬);增加了使用覆蓋索引的可能性;當表結構發生改變時,前斷也需要更新
4.當只需要一條資料的時候,使用limit 1
5.避免在 where 子句中對欄位進行 null 值判斷
對於null的判斷會導致引擎放棄使用索引而進行全表掃描,這條老生常談了,記得剛開始寫null判斷被同事嘲諷了,哈哈!!!而且表中數值不要出現null,用0或者其它代替,因為一個null值會導致整個欄位的索引失效
6.不建議使用%字首模糊查詢
例如LIKE “%name”或者LIKE “%name%”,這種查詢會導致索引失效而進行全表掃描。但是可以使用LIKE “name%”。
那如何查詢%name%?可以考慮全域性索引
7.對於聯合索引來說,要遵守最左字首法則
舉列來說索引含有欄位id,name,school,可以直接用id欄位,也可以id,name這樣的順序,但是name;school都無法使用這個索引。所以在建立聯合索引的時候一定要注意索引欄位順序,常用的查詢欄位放在最前面
8.儘量使用inner join,避免left join
參與聯合查詢的表至少為2張表,一般都存在大小之分。如果連線方式是inner join,在沒有其他過濾條件的情況下MySQL會自動選擇小表作為驅動表(小表驅動大表原則),但是left join在驅動表的選擇上遵循的是左邊驅動右邊的原則,即left join左邊的表名為驅動表。
9.被驅動表的索引欄位作為on的限制欄位
10.注意範圍查詢語句
對於聯合索引來說,如果存在範圍查詢,比如between,>,<等條件時,會造成後面的索引欄位失效。
11.使用合理的分頁方式以提高分頁的效率
select id,name from product limit 1000001, 10
使用上述sql語句做分頁的時候,可能有人會發現,隨著表資料量的增加,直接使用limit分頁查詢會越來越慢。優化的方法如下:可以取前一頁的最大行數的id,然後根據這個最大的id來限制下一頁的起點。比如此列中,上一頁最大的id是1000000。sql可以採用如下的寫法:select id,name from product where id> 1000000 limit 10
12.如果限制條件中其他欄位沒有索引,儘量少用or
or兩邊的欄位中,如果有一個不是索引欄位,而其他條件也不是索引欄位,會造成該查詢不走索引的情況。很多時候使用 union all (儘量使用union all代替union,union和union all的差異主要是前者需要將結果集合並後再進行唯一性過濾操作,這就會涉及到排序,增加大量的CPU運算,加大資源消耗及延遲。當然,union all的前提條件是兩個結果集沒有重複資料 )或者是union(必要的時候)的方式來代替“or”會得到更好的效果
13.如果排序欄位沒有用到索引,就儘量少排序
相關文章
- MySQL(二) MySql常用優化MySql優化
- MySQL優化(1)——–常用的優化步驟MySql優化
- MySQL 優化常用方法MySql優化
- MySQL優化基本操作MySql優化
- mysql 優化常用語句MySql優化
- 專案中常用的19條MySQL優化MySql優化
- MySQL 常用的UPDATE操作MySql
- MySQL 常用操作MySql
- mysql常用操作MySql
- 【案例】MySQL count操作優化案例一則MySql優化
- MySql 學習筆記三:常用SQL優化MySql筆記優化
- Mysql常用操作記錄MySql
- Linux操作文件——MySQL優化(5.7.26)LinuxMySql優化
- mysql的優化MySql優化
- MySQL資料庫常用操作MySql資料庫
- mysql的sql優化MySql優化
- MySql常用30種SQL查詢語句優化方法MySql優化
- 如何優化in操作優化
- mysql優化MySql優化
- Mysql 優化MySql優化
- 【NLP】常用優化方法優化
- webpack常用優化配置Web優化
- Vue常用效能優化Vue優化
- MySQL常用操作和主從配置MySql
- MySQL 的查詢優化MySql優化
- MySQL架構的優化MySql架構優化
- 關於mysql的優化MySql優化
- (mysql優化-3) 系統優化MySql優化
- MySQL 效能優化之索引優化MySql優化索引
- MySQL優化-安裝配置優化MySql優化
- MySQL 效能優化之SQL優化MySql優化
- 前端效能優化的常用手段前端優化
- 優化寫磁碟操作優化
- 淺談MySQL中優化sql語句查詢常用的30種方法MySql優化
- 【MySQL】淺談MySQL優化MySql優化
- mysql效能優化MySql優化
- MySQL優化面試MySql優化面試
- mysql優化(一)MySql優化