mysql - 如何在值列表上使用索引?

标签 mysql join indexing

我有一个查询,该查询包含在 (col1,col2) 上唯一索引的 mytable 上的联接

explain
...
join mytable on col1=1 and col2=2

通过类型:eq_ref显示索引的正确使用

但是当使用列表时,不再使用索引

join mytable on col1=1 and col2 in (2,3,4)

额外:检查每条记录的范围(索引映射:0x1);

这给出了相同的结果:

join mytable on (col1,col2) in ((1,2),(1,3),(1,4))

在提供值列表时是否可以使用索引?

最佳答案

  • 通常情况下,不会JOIN x ON c = ConstantON 子句应指定该表如何与其他表相关。 WHERE 子句应提供过滤功能,例如 col1=1 和 col2=2

  • “行构造函数”早已存在,但直到最近(5.7.3)它们才得到了最少的优化。你运行什么版本?即使使用最新版本,我也希望 (2,3,4) 中的 col1=1 和 col2 至少能够像行构造函数方法一样得到优化。

  • OR 通常会阻止任何优化。也许它永远不会比某些替代方案更快。

  • 我们需要查看整个查询、EXPLAINSHOW CREATE TABLE;可能还有其他问题潜伏在阴影中。

关于mysql - 如何在值列表上使用索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56303741/

相关文章:

php - MySQL 将多行连接成一列

php - 产品不使用 php web 服务插入 mysql

sql - sql中逗号和join的区别

python - 如果 pymongo 中不存在,如何创建带索引的集合?

java - 在删除数据行之前检查其他表中是否使用了外键 hibernate

mysql - 我们可以将什么条件作为 JOIN 的 ON 的一部分?

mysql - 选择包含在另一个表的集合中的行

mysql - SQL - 内连接表上的复合索引?

MySQL - 我如何知道要使用哪些索引?

MYSQL 查询从日期开始的年份