MySQL索引不生效的處理方法
發(fā)表時(shí)間:2023-07-19 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]公司服務(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í)。