Mysql 查詢排序優化

2021-10-25 14:57:40 字數 1037 閱讀 4923

即小的資料集驅動大的資料集

select * from a where id in(where id from b)
等價於:

select id from b

select * from a where a.id=b.id

select  * from a where exists(select 1 from b where b.id=a.id)
等價於

select * from a

select * from b where b.id=a.id

select ....from tablename where exists(subquery)

該語法可以理解為:將主查詢的資料,放到子查詢中做條件驗證,根據驗證結果(true or false) 來決定主查詢的資料是否得以保留。

order by 也要遵循索引最左匹配原則才行的,使用where子句與order by 子句條件列租戶滿足索引最左匹配

從磁碟讀取排序字段,在記憶體中進行排序,再從磁碟讀取其他字段

取一批資料,要對磁碟進行兩次掃瞄。比較消耗i\o,在mysql 4.1之後,就出現了改進演算法:單路排序

從磁碟中讀取所有需要的列,在記憶體中進行排序

單路排序總體而言要好於雙路排序,但單路也存在一些問題:由於單路排序比較佔記憶體,如果讀取的資料量很大,超高了記憶體的量,就需要每次只能讀取少於記憶體量的資料,再進行排序(建立tmp檔案,多路合併,再排序),需要多次讀取排序,這樣對產生跟多i\o操作,因此需要根據查詢資料量而定。

(1)增大sort_buffer_size引數的設定(增大記憶體大小);

(2)增大max_length_for_sort_data引數的設定;

(3)查詢語句優化:使用order by 不要使用select *

查詢優化(MySQL優化查詢)

關聯查詢太多join 設計缺陷或不得已的需求 資料庫伺服器調優及各個引數設定不適當 緩衝 執行緒數等 慢查詢日誌 找出執行速度慢的sql語句 慢查詢的開啟並捕獲 explain 慢sql分析 show profile查詢sql在mysql伺服器裡面的執行細節和生命週期情況 sql資料庫伺服器的引數調...

mysql統計查詢優化 Mysql查詢優化

效能涉及的層面很多,但是在操作層面,主要有表結構設計優化 索引優化和查詢優化 查詢的生命週期大致可以分為,從客戶端 到服務端 在伺服器上解析 生成執行計畫 執行 返回結果給客戶端 sql執行流程 具體優化技巧 1.消除外連線 2.消除子查詢 盡量用join代替子查詢,雖說mysql查詢優化器會進行優...

mysql優化之mysql查詢效能排序分析

mysql 查詢效能排序,從左至右,效能由最差到最好 all index range ref eq ref const system null 1.all 全表掃瞄 例 select from user 2.index 索引全掃瞄 例 select id from user 3.range 索引範圍...