我好奇地问这个问题。这可能是最愚蠢的问题或基本问题。原谅我,如果是..
假设我有一个isThatA表包含id,class,school_id有1000条记录。
有3所学校和12个班级。
这两个查询中的哪一个会更快(如果存在差异)
Query 1: SELECT * FROM isThatA WHERE school=2 and class=5;
Query 2: SELECT * FROM isThatA WHERE class=5 and school=2;
注意:我刚刚更改了WHERE
中2个条件的位置条件WHERE school = 2的记录的可能数量也是333
条件WHERE class = 5的可能记录数为80.
答案 0 :(得分:2)
那里没有区别。使用EXPLAIN SELECT ...
来发现MySQL选择优化和运行查询的方法。这将回答你的问题。
答案 1 :(得分:2)
如果是星期二,第一个会更快,而第二个会在一周的其他任何一天更快。如果一个unicron出现,性能就会逆转。
严肃地说 - 两个查询构建相同的查询表达式树,因为where-and子句是commutative所以性能上没有可能的差异
答案 2 :(得分:1)
两个查询都提供完全相同的性能,因为数据库在运行之前确定了如何最有效地执行查询。
要在查询中获得良好的性能,您应确保存在数据库可用于过滤掉记录的索引。在这种情况下,您应该创建一个包含school
和class
。
此外,不要在查询中使用select *
(除了测试之外),您应该始终指定要从查询返回的字段。这样您就不会返回不使用的数据,您知道这些字段是按照您想要的顺序返回的,并且向表中添加更多字段不会使查询返回更多未使用的数据。
如果您只需要表中的一个或多个字段,请将这些字段作为输出字段(或“包含列”)添加到索引中。这样,数据库就可以在不触及表格的情况下获得结果。