gpt4 book ai didi

mysql - 哪个 sql 会更快,为什么?

转载 作者:行者123 更新时间:2023-11-30 23:56:10 26 4
gpt4 key购买 nike

假设我有一个 student 表,包含 idclassschool_id,有 1000 条记录。

有3个学校12个类

这两个查询中哪一个会更快(如果有区别的话)

查询 1:

SELECT * FROM student WHERE school = 2 and class = 5; 

查询 2:

SELECT * FROM student WHERE class = 5 and school = 2;

注意:我只是更改了WHERE中两个条件的位置。

那么哪个会更快,以下是正确的吗?

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

->query2 中可能的记录数是 80。

最佳答案

一点点真的没关系。 1000 条记录是一个非常小的数据库表,如果有任何差异,您需要从这样一个脑死亡的 DBMS 升级。

一个体面的 DBMS 应该已经从表中收集了统计信息(或者 DBA 会作为定期调整的一部分完成它)并且 where 子句的顺序将是无关紧要的。

执行引擎会选择减少基数(即减少候选行组)最快的那个。这意味着(假设类(class)和学校大致平均分布)class = 5 过滤器将首先发生,无论 select 语句中的顺序如何。

更深入地解释基数问题,对于这 1000 条记录的大致均匀分布,每所学校有 333 条,每个类(class)有 83 条。

DBMS 所做的是首先过滤给您最小结果集的内容。所以它倾向于使用类过滤器。这会立即将候选行列表减少到大约 83 行。然后,将那些学校不是 2 的行扔掉是一件简单的事情。

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

如果您真的想知道,您需要测量而不是猜测。这是 DBA 的主要职责之一,即调整数据库以优化执行查询。

关于mysql - 哪个 sql 会更快,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12154142/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com