gpt4 book ai didi

mysql - 哪个查询被优化

转载 作者:行者123 更新时间:2023-11-29 09:53:16 24 4
gpt4 key购买 nike

我有员工表,其中包含 3 列 ID、姓名、薪水,我有薪水列的索引

EXPLAIN SELECT * FROM employees WHERE salary IN (SELECT MAX(salary) FROM employees);

id select_type table type possible_keys key key_len ref rows Extra
------ ------------ ----------- ------ ------------- ------ ------- ------ ------ ------------------------------
1 PRIMARY <subquery2> system (NULL) (NULL) (NULL) (NULL) 1
1 PRIMARY employees ALL test (NULL) (NULL) (NULL) 5 Using where
2 MATERIALIZED (NULL) (NULL) (NULL) (NULL) (NULL) (NULL) (NULL) Select tables optimized away



EXPLAIN SELECT * FROM employees INNER JOIN (SELECT MAX(salary) AS mx FROM employees) AS tbl ON tbl.mx=employees.salary;

id select_type table type possible_keys key key_len ref rows Extra
------ ----------- ---------- ------ ------------- ------ ------- ------ ------ ------------------------------
1 PRIMARY <derived2> system (NULL) (NULL) (NULL) (NULL) 1
1 PRIMARY employees ALL test (NULL) (NULL) (NULL) 5 Using where
2 DERIVED (NULL) (NULL) (NULL) (NULL) (NULL) (NULL) (NULL) Select tables optimized away

使用 MATERIALIZED optmized 还是 DERIVED,由于 MySQL 需要子查询结果,因此会将结果具体化到临时表中。

而派生表也是临时表,那么哪一个被优化了?为什么??

提前谢谢您

最佳答案

两者的性能相同。 MySQL 将第一个查询转换为第二个查询。

选择优化掉的表意味着MySQL可以“走捷径”而不读取实际的表(SELECT MIN(indexed_field))。

在此计划中,对员工进行了全面扫描,可能是因为它只有 5 行。您应该添加更多行(和不同的工资)以查看实际发生的情况。

关于mysql - 哪个查询被优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54402730/

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