Mysql如何查看是否使用到索引
更新時(shí)間:2022年12月22日 10:44:38 作者:漫天雪_昆侖巔
這篇文章主要介紹了Mysql如何查看是否使用到索引問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
Mysql查看是否使用到索引
mysql數(shù)據(jù)庫(kù)創(chuàng)建索引優(yōu)化之后,在查詢時(shí)想看下是否使用到索引,
使用執(zhí)行計(jì)劃查看:
mysql> explain ?SELECT * FROM tb_user ?WHERE STATUS=1 limit 0,20; +----+-------------+----------------+------------+------+----------------------+----------------------+---------+-------+-------+----------+-------+ | id | select_type | table ? ? ? ? ?| partitions | type | possible_keys ? ? ? ?| key ? ? ? ? ? ? ? ? ?| key_len | ref ? | rows ?| filtered | Extra | +----+-------------+----------------+------------+------+----------------------+----------------------+---------+-------+-------+----------+-------+ | ?1 | SIMPLE ? ? ?| tb_news_online | NULL ? ? ? | ref ?| idx_tb_news_online_9 | idx_tb_news_online_9 | 5 ? ? ? | const | 99494 | ? ? ?100 | NULL ?| +----+-------------+----------------+------------+------+----------------------+----------------------+---------+-------+-------+----------+-------+ 1 row in set ? mysql>?
EXPLAIN列的解釋
table
:顯示這一行的數(shù)據(jù)是關(guān)于哪張表的type
:這是重要的列,顯示連接使用了何種類型。從最好到最差的連接類型為const、eq_reg、ref、range、index和ALL- type顯示的是訪問類型,是較為重要的一個(gè)指標(biāo),結(jié)果值從好到壞依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL ,一般來(lái)說,得保證查詢至少達(dá)到range級(jí)別,最好能達(dá)到ref。
possible_keys
:顯示可能應(yīng)用在這張表中的索引。如果為空,沒有可能的索引??梢詾橄嚓P(guān)的域從WHERE語(yǔ)句中選擇一個(gè)合適的語(yǔ)句key
:實(shí)際使用的索引。如果為NULL,則沒有使用索引。很少的情況下,MYSQL會(huì)選擇優(yōu)化不足的索引。這種情況下,可以在SELECT語(yǔ)句中使用USE INDEX(indexname)來(lái)強(qiáng)制使用一個(gè)索引或者用IGNORE INDEX(indexname)來(lái)強(qiáng)制MYSQL忽略索引key_len
:使用的索引的長(zhǎng)度。在不損失精確性的情況下,長(zhǎng)度越短越好ref
:顯示索引的哪一列被使用了,如果可能的話,是一個(gè)常數(shù)rows
:MYSQL認(rèn)為必須檢查的用來(lái)返回請(qǐng)求數(shù)據(jù)的行數(shù)Extra
:關(guān)于MYSQL如何解析查詢的額外信息。將在表4.3中討論,但這里可以看到的壞的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,結(jié)果是檢索會(huì)很慢
MySQL查看索引使用情況
show status like 'Handler_read%';?? ? ? show global status like 'Handler_read%';
Handler_read_first
:索引中第一條被讀的次數(shù)。如果較高,表示服務(wù)器正執(zhí)行大量全索引掃描(這個(gè)值越低越好)。Handler_read_key
:如果索引正在工作,這個(gè)值代表一個(gè)行被索引值讀的次數(shù),如果值越低,表示索引得到的性能改善不高,因?yàn)樗饕唤?jīng)常使用(這個(gè)值越高越好)。Handler_read_next
:按照鍵順序讀下一行的請(qǐng)求數(shù)。如果你用范圍約束或如果執(zhí)行索引掃描來(lái)查詢索引列,該值增加。Handler_read_prev
:按照鍵順序讀前一行的請(qǐng)求數(shù)。該讀方法主要用于優(yōu)化ORDER BY ... DESC。Handler_read_rnd
:根據(jù)固定位置讀一行的請(qǐng)求數(shù)。如果你正執(zhí)行大量查詢并需要對(duì)結(jié)果進(jìn)行排序該值較高。你可能使用了大量需要MySQL掃描整個(gè)表的查詢或你的連接沒有正確使用鍵。這個(gè)值較高,意味著運(yùn)行效率低,應(yīng)該建立索引來(lái)補(bǔ)救。Handler_read_rnd_next
:在數(shù)據(jù)文件中讀下一行的請(qǐng)求數(shù)。如果你正進(jìn)行大量的表掃描,該值較高。通常說明你的表索引不正確或?qū)懭氲牟樵儧]有利用索引。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
linux mysql忘記密碼的多種解決或Access denied for user ''root''@''local
linux mysql忘記密碼的多種解決方法。2009-07-07mysql5.7使用binlog 恢復(fù)數(shù)據(jù)的方法
MySQL的binlog日志是MySQL日志中非常重要的一種日志,記錄了數(shù)據(jù)庫(kù)所有的DML操作,那么怎樣通過binlog 恢復(fù)數(shù)據(jù),本文就詳細(xì)的來(lái)介紹一下2021-06-06MySQL使用MyFlash快速恢復(fù)誤刪除和修改的數(shù)據(jù)
MyFlash 是由美團(tuán)點(diǎn)評(píng)公司技術(shù)工程部開發(fā)并維護(hù)的一個(gè)開源工具,主要用于MySQL數(shù)據(jù)庫(kù)的DML操作的回滾,MyFlash的優(yōu)勢(shì)在于它提供了更多的過濾選項(xiàng),使得回滾操作變得更加容易,本文將實(shí)驗(yàn)通過 MyFlash 工具快速恢復(fù)誤刪除 或 誤修改的數(shù)據(jù),需要的朋友可以參考下2024-06-06MySQL中存儲(chǔ)的數(shù)據(jù)查詢的時(shí)候如何區(qū)分大小寫
這篇文章主要介紹了MySQL中存儲(chǔ)的數(shù)據(jù)查詢的時(shí)候如何區(qū)分大小寫問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04