gpt4 book ai didi

sql - 在查询中为 'OR' 运算符创建索引

转载 作者:可可西里 更新时间:2023-11-01 07:57:35 27 4
gpt4 key购买 nike

我有一些条件如下的 MySQL 查询

where field1=val1 or field2=val2

还有一些喜欢

where fieldx=valx and fieldy=valy and (field1=val1 or field2=val2)

如何通过创建索引来优化这些查询?我的直觉是为第一个查询为 field1 和 field2 创建单独的索引,因为它是一个 OR,所以复合索引可能不会有多大用处。

对于第二个查询,出于上述原因,我打算再次创建 2 个索引:fieldx、fieldy、field1 和 fieldx、fieldy、field2。

这个解决方案是否正确?这是一个非常大的表,所以我不能只是通过应用索引和解释查询来进行试验。

最佳答案

与所有 DBMS 优化问题一样,这取决于您的执行引擎。

我将从最简单的场景开始,每个列上有四个单独的索引。

这将确保以您没有预料到的方式使用这些列的任何查询仍然可以正常运行(fieldx/fieldy/field1 索引对于仅使用 fieldy).

任何体面的执行引擎都会首先有效地选择基数最低的索引,以减少结果集,然后在此基础上执行其他过滤器。

然后,如果您遇到性能问题,您可以考虑使用不同的索引来改进它。您应该测试生产类型数据的性能,而不是您自己构建的任何测试数据库(除非它们反射(reflect)了生产的属性)。

请记住,数据库调优很少是一劳永逸的操作。您应该定期重新调整,因为性能取决于架构您持有的数据。

即使模式永远不会改变,数据也可能变化很大。关于您的评论“我只是不能通过应用索引和解释查询来进行试验”,这正是您应该做的。

如果您担心在生产环境中玩游戏(您应该担心),您应该设置另一个具有类似规范的环境,将生产数据复制到其中,然后在那里摆弄索引。

关于sql - 在查询中为 'OR' 运算符创建索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3598558/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com