Mysql不使用索引
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql不使用索引相关的知识,希望对你有一定的参考价值。
我有复合PK的表。
CREATE TABLE `tag_value_copy` (
`tag_id` INT(11) NOT NULL,
`created_at` INT(11) NOT NULL,
`value` FLOAT NULL DEFAULT NULL,
PRIMARY KEY (`tag_id`, `created_at`)
)
COLLATE='utf8_unicode_ci'
ENGINE=InnoDB
ROW_FORMAT=COMPACT;
当我执行以下查询时
DELETE FROM tag_value_copy WHERE (tag_id, created_at) IN ((1,2), (2,3), ..., (5,6))
mysql不使用索引并遍历所有行。但为什么?
EXPLAIN SELECT * FROM tag_value_copy WHERE (tag_id,created_at) in ((1,1518136666), (2,1518154836))
也不使用索引。
UPD 1
show index from tag_value_copy
UPD 2
explain delete from tag_value_copy where (tag_id=1 and created_at=1518103037) or (tag_id=2 and created_at=1518103038)
答案
Why - MySQL的优化器对优化(a, b) IN ((1,2), ...)
没有任何帮助。
解决方法 - 创建一个包含要删除的对的表。然后JOIN
在2列中的每一列之间使用AND
。
这些都没有帮助:OR
,FORCE INDEX
。
为什么你有PRIMARY KEY(tag_id
,created_at
)?您是否允许多次输入相同的标签?
以上是关于Mysql不使用索引的主要内容,如果未能解决你的问题,请参考以下文章
java.lang.IllegalStateException:键 f0 的片段不再存在:索引 1
c_cpp UV Index Indicator订阅PubNub并使用颜色显示UV索引值。博文的代码片段。在这里查看项目:https:/