哪个sql会更快,为什么?

Ips*_*out 0 mysql sql

假设我有一个student表中包含id,class,school_id有1000条记录.

有3所学校和12个班级.

这两个查询中的哪一个会更快(如果存在差异)

查询1:

SELECT * FROM student WHERE school = 2 and class = 5; 
Run Code Online (Sandbox Code Playgroud)

查询2:

SELECT * FROM student WHERE class = 5 and school = 2;
Run Code Online (Sandbox Code Playgroud)

注意:我刚刚更改了2个条件的位置WHERE.

然后哪个会更快,以下是真的吗?

- > query1中可能的记录数为333

- > query2中可能的记录数为80.

pax*_*blo 6

一点点都没关系.1000条记录是一个非常小的数据库表,如果存在差异,则需要从这样一个脑死亡的DBMS升级.

一个体面的DBMS已经从表中收集了统计数据(或者DBA将其作为定期调整的一部分完成),并且where条款的顺序将是无关紧要的.

执行引擎将选择最快地降低基数(即,减少候选行组)的那个.这意味着(假设课程和学校大致平均分配)class = 5过滤器将首先发生,无论select声明中的顺序如何.

更深入地解释基数问题,对于这1000个记录的大致均匀分布的传播,每个学校将有333个,每个班级有83个.

DBMS将做的是首先过滤给出最小结果集的内容.所以它倾向于使用类过滤器.那会立即将候选行列表丢弃到大约83.然后,这是一个简单的问题,抛出那些有2所以外的学校.

在这两种情况下,最终都会得到相同的最终行集,但初始过滤器通常更快,因为它可以使用索引来仅选择所需的行.另一方面,第二个过滤器很可能以较低效的方式遍历这些行,因此您可以越快地减少行数,就越好.

如果你真的想知道,你需要衡量而不是猜测.这是DBA的主要职责之一,调整数据库以实现查询的最佳执行.


Oli*_*and 5

这2个查询严格相同:)