根据条件查询某条记录的条数_「性能与架构」MySQL 8 查询优化新工具 Explain Analyze...
來源:性能與架構(gòu)公眾號
1. Explain Analyze 介紹
Explain 是我們常用的查詢分析工具,可以對查詢語句的執(zhí)行方式進(jìn)行評估,給出很多有用的線索。
但他僅僅是評估,不是實(shí)際的執(zhí)行情況,比如結(jié)果中的 rows,可能和實(shí)際結(jié)果相差甚大。
Explain Analyze 是 MySQL 8 中提供的新工具,牛X之處在于可以給出實(shí)際執(zhí)行情況。
Explain Analyze 是一個查詢性能分析工具,可以詳細(xì)的顯示出 查詢語句執(zhí)行過程中,都在哪兒花費(fèi)了多少時間。
Explain Analyze 會做出查詢計(jì)劃,并且會實(shí)際執(zhí)行,以測量出查詢計(jì)劃中各個關(guān)鍵點(diǎn)的實(shí)際指標(biāo),例如耗時、條數(shù),最后詳細(xì)的打印出來。
2. 實(shí)踐效果
例如有如下一條查詢語句:
SELECT?first_name,?last_name,?SUM(amount)?AS?totalFROM?staff?INNER?JOIN?payment??ON?staff.staff_id?=?payment.staff_id?????AND?????payment_date?LIKE?'2005-08%'GROUP?BY?first_name,?last_name;現(xiàn)在對它執(zhí)行 Explain Analyze,只需要添加在 SELECT 前邊就行了:
EXPLAIN?ANALYZESELECT?first_name,?last_name,?SUM(amount)?AS?totalFROM?staff?INNER?JOIN?payment??ON?staff.staff_id?=?payment.staff_id?????AND?????payment_date?LIKE?'2005-08%'GROUP?BY?first_name,?last_name;執(zhí)行結(jié)果:
結(jié)果中包含了各個執(zhí)行步驟的詳細(xì)情況,內(nèi)容比較多,圖片中不方便看,下面咱就拿出其中一條看一下:
Filter:?(payment.payment_date?like?'2005-08%')??(cost=117.43?rows=894)?(actual?time=0.454..194.045?rows=2844?loops=2)Filter 表示這是執(zhí)行過濾的一個步驟。
(payment.payment_date?like?'2005-08%')??這部分是過濾條件。
(cost=117.43?rows=894)這部分是估算的結(jié)果,預(yù)計(jì)需要花費(fèi)的時間,和返回的記錄條數(shù)。
這就是在真正執(zhí)行之前,查詢優(yōu)化器所做的估算。
(actual?time=0.454..194.045?rows=2844?loops=2)這部分就是實(shí)際執(zhí)行的結(jié)果數(shù)據(jù)了。
time 的結(jié)果中分為2個部分,前面的 0.454 是返回第一條記錄的耗時,后面的 194.045 是返回所有記錄的耗時。
rows 就是實(shí)際返回的準(zhǔn)確記錄條數(shù)。
loops 是當(dāng)前過濾迭代器所執(zhí)行的循環(huán)的數(shù)量。
3. 實(shí)際環(huán)境
如果你想實(shí)際試試,可以使用 MySQL 提供的測試數(shù)據(jù)庫 sakila。
下載地址:
https://dev.mysql.com/doc/index-other.html

解壓后倒入MySQL:
mysql>?SOURCE?/xxx/sakila-schema.sql;mysql>?SOURCE?/xxx/sakila-data.sql;4. 小結(jié)
感謝閱讀,希望對你有所幫助
參考資料:
https://mysqlserverteam.com/mysql-explain-analyze/
https://www.percona.com/blog/2019/10/28/using-explain-analyze-in-mysql-8/
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的根据条件查询某条记录的条数_「性能与架构」MySQL 8 查询优化新工具 Explain Analyze...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: arch检验python_Python实
- 下一篇: sql优化的方法及思路_合理的sql优化