【技能库】--mysql 索引失效 force index也失效-- 原因解决方案(256)
2017-07-10 18:20
585 查看
查看执行时走的索引:
explain SELECT count(*)
FROM tb_task
WHERE create=0 and create_time < '2017-07-10 22:00:00' ;
结果:
+----+-------------+-------------+-------+-------------------------+------------+---------+------+------+-----------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
+----+-------------+-------------+-------+-------------------------+------------+---------+------+------+-----------+
如果没有走 key=null 或者不是自己预想的索引!
此时可以强制指定走索自己建立的 force index(idx_create_time)
explain SELECT count(*)
FROM tb_task force index(idx_create_time)
WHERE create=0 and create_time < '2017-07-10 22:00:00' ;
如果key依然不是自己指定的索引!!就有问题了
原因:
堆积量太大 MySQL内部计算cost 走索引不合理(因为:正常的数据量超过20%的全表数据对于走索引反而是更不好的)
解决方案:
清洗掉索引键命中的脏数据或者无效的数据!
explain SELECT count(*)
FROM tb_task
WHERE create=0 and create_time < '2017-07-10 22:00:00' ;
结果:
+----+-------------+-------------+-------+-------------------------+------------+---------+------+------+-----------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
+----+-------------+-------------+-------+-------------------------+------------+---------+------+------+-----------+
如果没有走 key=null 或者不是自己预想的索引!
此时可以强制指定走索自己建立的 force index(idx_create_time)
explain SELECT count(*)
FROM tb_task force index(idx_create_time)
WHERE create=0 and create_time < '2017-07-10 22:00:00' ;
如果key依然不是自己指定的索引!!就有问题了
原因:
堆积量太大 MySQL内部计算cost 走索引不合理(因为:正常的数据量超过20%的全表数据对于走索引反而是更不好的)
解决方案:
清洗掉索引键命中的脏数据或者无效的数据!
相关文章推荐
- mysql唯一索引失效原因分析
- Mysql引起索引失效的原因总结
- Mysql引起索引失效的原因总结
- MYSQL索引失效的各种情形总结
- mysql出现Waiting for table metadata lock的原因及解决方案
- oracle 索引失效的原因
- oracle 索引失效原因及解决方法
- 引起索引失效的原因和解决方法
- mysql隐式转换造成索引失效的事故总结
- mysql官方关于2013和2006错误代码产生原因和解决方案
- mysql出现大量sleep进程的原因与解决方案
- 关于mysql建表中含有longtext字段时,查询缓慢的原因和解决方案
- MySQL索引分析和优化解决方案
- MySQL 因 select for update 导致的死锁问题 原因及解决方案
- 【Android】 Android NDK断点失效原因及解决方案
- mysql出现Waiting for table metadata lock的原因及解决方案
- 索引失效的一些原因
- oracle 索引失效原因及解决方法
- mysql ignore ing query to other database 的原因和解决方案
- MySQL创建索引抛出“required more than 'innodb_online_alter_log_max_size' bytes of modification log”异常的解决方案