Mysql不使用索引

问题描述 投票:3回答:1

我有复合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不使用索引并遍历所有行。但为什么?

enter image description here


EXPLAIN SELECT * FROM tag_value_copy WHERE (tag_id,created_at) in ((1,1518136666), (2,1518154836))也不使用索引。

enter image description here


UPD 1

show index from tag_value_copy

enter image description here


UPD 2

explain delete from tag_value_copy where (tag_id=1 and created_at=1518103037) or (tag_id=2 and created_at=1518103038)

enter image description here

mysql indexing sql-delete
1个回答
0
投票

Why - MySQL的优化器对优化(a, b) IN ((1,2), ...)没有任何帮助。

解决方法 - 创建一个包含要删除的对的表。然后JOIN在2列中的每一列之间使用AND

这些都没有帮助:ORFORCE INDEX

为什么你有PRIMARY KEY(tag_idcreated_at)?您是否允许多次输入相同的标签?

© www.soinside.com 2019 - 2024. All rights reserved.