我在表中有两个索引字段 - type
和userid
(单个索引,而不是复合索引)。
type
的字段值非常有限(假设它只有0或1),因此50%的表记录具有相同的type
。另一方面,userid
值来自更大的集合,因此具有相同userid
的记录数量很少。
这些查询中的任何一个查询运行速度都快于其他查询:
select * from table where type=1 and userid=5
select * from table where userid=5 and type=1
此外,如果两个字段都没有编入索引,是否会改变行为?
答案 0 :(得分:57)
答案 1 :(得分:9)
大多数查询优化器使用条件显示为提示的顺序。如果其他条件相同,他们将遵循该命令。
然而,许多事情可以覆盖:
varchar(max)
vs int
)所以(对于所有SQL优化问题都是如此)除非你观察到性能问题,否则最好是为了清晰而优化,而不是(想象)性能。
答案 2 :(得分:7)
它不应该在你的小例子中。查询优化器应该做正确的事情。您可以通过在查询的前面添加explain
来确认。 MySQL将告诉你如何将它们连接在一起以及为了进行连接需要搜索多少行。例如:
explain select * from table where type=1 and userid=5
如果他们没有编入索引,可能会改变行为。