首页 > 解决方案 > MySQL WHERE 参数顺序是否重要?

问题描述

假设我有一个包含 125 万只猫的数据库。

10%的猫是雄性,90%是雌性。

1% 的猫叫鲍勃。

30% 的猫喜欢蓝色。

如果我查询说

select * from cats where gender="male" and name="Bob" and favorite_color="blue";

where 语句的顺序对性能有什么影响吗?

在这种情况下,这 3 个参数都在同一张表上,但理论上您可以先按性别搜索以排除 90% 的可能结果。拆分成多个查询会有帮助吗?除了删除通配符 * 之外,优化此搜索的最佳方法是什么?谢谢!

标签: mysqldoctrinequery-performance

解决方案


where 语句的顺序对性能有什么影响吗?

,它没有。

MySQL 的查询计划器(就像几乎所有 SQL 查询计划器一样)寻找满足每个查询的最有效方法。它考虑了各种方法并选择了一种有效的方法。通常它会查看表上的索引。你有三个 where 标准提到平等。因此,三列上的复合索引(name, gender, favorite_color)将显着加快查询速度。

对于大多数程序员来说,SQL 有一些违反直觉的东西。它是声明性的。也就是说,你告诉它你想要什么,而不是如何得到它。由查询计划者决定如何获取它。

这真是一件好事。为什么?数据库表在生产中的寿命很长(有时是几十年)。随着它们的增长,以及访问它们的软件的变化,从它们那里得到你想要的东西的最佳方式也会发生变化。您不必担心这些更改,除非根据需要添加索引。

请考虑阅读以下内容: https ://use-the-index-luke.com/


推荐阅读