首页 > 数据库 > mysql教程 > 如何高效使用MySQL WHERE IN 子句中的多列和索引?

如何高效使用MySQL WHERE IN 子句中的多列和索引?

Mary-Kate Olsen
发布: 2024-12-22 12:06:34
原创
142 人浏览过

How to Efficiently Use Multiple Columns in MySQL's WHERE IN Clause with Indexes?

MySQL IN 子句中的多列

问题:

您有一个数据库表四列代表地理坐标:x0、y0、x1 和 y1。这些列上有一个索引,顺序为 x0、y0、x1、y1。您希望使用 WHERE IN 子句中的坐标对列表来高效查询表。

解决方案:

要有效使用索引,请将 IN 谓词重写为一系列 OR 条件,其中每个条件将当前行的坐标与

示例:

代替:

(x0, y0, x1, y1) IN ((4, 3, 5, 6), (9, 3, 2, 1))
登录后复制

使用:

(  ( x0 = 4 AND y0 = 3 AND x1 = 5 AND y1 = 6 ) 
OR ( x0 = 9 AND y0 = 3 AND x1 = 2 AND y1 = 1 )
)
登录后复制

优化较新的 MySQL 版本:

中MySQL 的新版本中,优化器已得到改进,可以更好地利用此类查询中的索引。语法:

(a,b) IN ((7,43),(7,44),(8,1))
登录后复制

已被支持很长时间,但之前存在性能问题。新的优化器现在可以生成更高效的执行计划。

注意:

类似的优化适用于 WHERE 子句中的 OR 构造。为了提高效率,请考虑使用:

WHERE ( seq >= 7 ) 
  AND ( seq > 7 OR sub > 42 ) 
登录后复制

而不是:

WHERE ( seq > 7 ) 
  OR ( seq = 7 AND sub > 42 ) 
登录后复制

以上是如何高效使用MySQL WHERE IN 子句中的多列和索引?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板