中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mysql中SQL語句不使用索引的示例分析

發布時間:2021-07-29 10:21:21 來源:億速云 閱讀:130 作者:小新 欄目:MySQL數據庫

小編給大家分享一下Mysql中SQL語句不使用索引的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

MySQL查詢不使用索引匯總

眾所周知,增加索引是提高查詢速度的有效途徑,但是很多時候,即使增加了索引,查詢仍然不使用索引,這種情況嚴重影響性能,這里就簡單總結幾條MySQL不使用索引的情況

如果MySQL估計使用索引比全表掃描更慢,則不使用索引。例如,如果列key均勻分布在1和100之間,下面的查詢使用索引就不是很好:select * from table_name where key>1 and key<90;

如果使用MEMORY/HEAP表,并且where條件中不使用“=”進行索引列,那么不會用到索引,head表只有在“=”的條件下才會使用索引

用or分隔開的條件,如果or前的條件中的列有索引,而后面的列沒有索引,那么涉及到的索引都不會被用到,例如:select * from table_name where key1='a' or key2='b';如果在key1上有索引而在key2上沒有索引,則該查詢也不會走索引

復合索引,如果索引列不是復合索引的第一部分,則不使用索引(即不符合最左前綴),例如,復合索引為(key1,key2),則查詢select * from table_name where key2='b';將不會使用索引

如果like是以‘%'開始的,則該列上的索引不會被使用。例如select * from table_name where key1 like '%a';該查詢即使key1上存在索引,也不會被使用

如果列為字符串,則where條件中必須將字符常量值加引號,否則即使該列上存在索引,也不會被使用。例如,select * from table_name where key1=1;如果key1列保存的是字符串,即使key1上有索引,也不會被使用。

從上面可以看出,即使我們建立了索引,也不一定會被使用,那么我們如何知道我們索引的使用情況呢??在MySQL中,有Handler_read_keyHandler_read_rnd_key兩個變量,如果Handler_read_key值很高而Handler_read_rnd_key的值很低,則表明索引經常不被使用,應該重新考慮建立索引。可以通過:show status like 'Handler_read%'來查看著連個參數的值。

關于如何正確創建Mysql的索引,請參考怎樣正確創建MySQL索引的方法詳解;眾所周知,數據表索引可以提高數據的檢索效率,也可以降低數據庫的IO成本,并且索引還可以降低數據庫的排序成本;但索引并不是時時都會生效的,比如以下幾種情況,將導致索引失效:

1.如果條件中有or,即使其中有條件帶索引也不會使用索引(這也是為什么SQL語句中盡量少用or的原因)

Mysql中SQL語句不使用索引的示例分析

注意:要想使用or,又想讓索引生效,只能將or條件中的每個列都加上索引。

2.對于多列索引,不是使用的第一部分,則不會使用索引。

3.like查詢是以%開頭時不會使用索引。

Mysql中SQL語句不使用索引的示例分析

4.如果列類型是字符串,那一定要在條件中將數據使用引號引用起來,否則不使用索引。

Mysql中SQL語句不使用索引的示例分析

5.如果 mysql 估計使用全表掃描要比使用索引快,則不使用索引。

此外,查看索引的使用情況

show status like 'Handler_read%';

大家可以注意:

handler_read_key:這個值越高越好,越高表示使用索引查詢到的次數。

handler_read_rnd_next:這個值越高,說明查詢越低效。

以上是“Mysql中SQL語句不使用索引的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

那坡县| 临安市| 淮北市| 富源县| 扎兰屯市| 抚远县| 麻城市| 五指山市| 舟曲县| 北辰区| 沙田区| 红桥区| 朝阳县| 洛浦县| 云龙县| 濉溪县| 大名县| 汕尾市| 密山市| 纳雍县| 龙游县| 大渡口区| 上高县| 合阳县| 宣武区| 芜湖市| 井研县| 墨江| 油尖旺区| 盘锦市| 五河县| 宜城市| 来凤县| 恩施市| 磐安县| 盘山县| 天峻县| 巴塘县| 德兴市| 达尔| 三明市|