在这种情况下查询优化

时间:2011-02-19 08:54:08

标签: sql mysql

我好奇地问这个问题。这可能是最愚蠢的问题或基本问题。原谅我,如果是..

假设我有一个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.

3 个答案:

答案 0 :(得分:2)

那里没有区别。使用EXPLAIN SELECT ...来发现MySQL选择优化和运行查询的方法。这将回答你的问题。

答案 1 :(得分:2)

如果是星期二,第一个会更快,而第二个会在一周的其他任何一天更快。如果一个unicron出现,性能就会逆转。


严肃地说 - 两个查询构建相同的查询表达式树,因为where-and子句是commutative所以性能上没有可能的差异

答案 2 :(得分:1)

两个查询都提供完全相同的性能,因为数据库在运行之前确定了如何最有效地执行查询。

要在查询中获得良好的性能,您应确保存在数据库可用于过滤掉记录的索引。在这种情况下,您应该创建一个包含schoolclass

的索引

此外,不要在查询中使用select *(除了测试之外),您应该始终指定要从查询返回的字段。这样您就不会返回不使用的数据,您知道这些字段是按照您想要的顺序返回的,并且向表中添加更多字段不会使查询返回更多未使用的数据。

如果您只需要表中的一个或多个字段,请将这些字段作为输出字段(或“包含列”)添加到索引中。这样,数据库就可以在不触及表格的情况下获得结果。