明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

MySQL索引不生效的處理方法

[摘要]公司服務(wù)用的mysql,最近在查詢時(shí)時(shí)間很慢,經(jīng)常會(huì)上10多秒,查看了一下查詢的執(zhí)行計(jì)劃,發(fā)現(xiàn)索引沒(méi)有生效。存儲(chǔ)引擎使用InnoDB。 一開始在主庫(kù)查詢,一直很好奇為什么索引不生效,切換到備庫(kù)之后,...
公司服務(wù)用的mysql,最近在查詢時(shí)時(shí)間很慢,經(jīng)常會(huì)上10多秒,查看了一下查詢的執(zhí)行計(jì)劃,發(fā)現(xiàn)索引沒(méi)有生效。

存儲(chǔ)引擎使用InnoDB。

一開始在主庫(kù)查詢,一直很好奇為什么索引不生效,切換到備庫(kù)之后,發(fā)現(xiàn)備庫(kù)是有效的。

開始考慮是不是因?yàn)樗饕鰡?wèn)題,后對(duì)索引重建,發(fā)現(xiàn)效率高了不少。

簡(jiǎn)單記錄一下對(duì)比。

mysql> explain select * from runinfo where status in (0, 2, 1, 3, 4, 7, 9, 10);
+----+-------------+---------+-------+---------------+------+---------+------+----------+-------------+
  id   select_type   table     type    possible_keys   key    key_len   ref    rows       Extra        
+----+-------------+---------+-------+---------------+------+---------+------+----------+-------------+
   1   SIMPLE        runinfo   All     status_2        NULL   NULL      NULL    2378055   Using where  
+----+-------------+---------+-------+---------------+------+---------+------+----------+-------------+
row in set (0.00 sec)

上面是主庫(kù)的執(zhí)行計(jì)劃。

對(duì)比一下備庫(kù)的執(zhí)行計(jì)劃。

mysql> explain select * from runinfo where status in (0, 2, 1, 3, 4, 7, 9, 10);
+----+-------------+---------+-------+---------------+----------+---------+------+------+-------------+
  id   select_type   table     type    possible_keys   key        key_len   ref    rows   Extra        
+----+-------------+---------+-------+---------------+----------+---------+------+------+-------------+
   1   SIMPLE        runinfo   range   status_2        status_2   4         NULL    116   Using where  
+----+-------------+---------+-------+---------------+----------+---------+------+------+-------------+
row in set (0.00 sec)

可以看出,備庫(kù)在查詢時(shí)適應(yīng)到索引 status_2。

執(zhí)行如下的命令之后,問(wèn)題解決。

mysql> OPTIMIZE TABLE runinfo;
+------------------+----------+----------+-------------------------------------------------------------------+
  Table              Op         Msg_type   Msg_text                                                           
+------------------+----------+----------+-------------------------------------------------------------------+
  schedule.runinfo   optimize   note       Table does not support optimize, doing recreate + analyze instead  
  schedule.runinfo   optimize   status     OK                                                                 
+------------------+----------+----------+-------------------------------------------------------------------+
rows in set (47.13 sec)

以上就是MySQL索引不生效的解決辦法的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!


學(xué)習(xí)教程快速掌握從入門到精通的SQL知識(shí)。