我有两个sql查询,有不同的方法来得到答案。我想找到列具有相同emp_no的最大时间。以下是两个查询中每个查询的EXPLAIN。
查询一个:
SELECT MAX(计数)FROM {
SELECT count(emp_no)按计数
来自工资GROUP BY emp_no
} t t
查询二:
SELECT count(emp_no)as count
来自工资GROUP BY emp_no
ORDER BY count(emp_no)DESC
限制1 OFFSET 0
表
+ ----- + ------------ + ------------- +
| id | emp_no |工资|
+ ----- + ------------ + ------------- +
| 1 | 00001 | 10000 |
| 2 | 00002 | 20000 |
| 3 | 00003 | 10000 |
+ ----- + ------------ + ------------- +
\ temp_no具有唯一
类型b树的索引两者中的哪一个会更好?另外,请向我推荐一些很好的阅读材料来学习优化技巧。
答案 0 :(得分:0)
您的"查询2",
SELECT COUNT(*)
FROM Salaries
GROUP BY emp_no
ORDER BY 1 DESC
LIMIT 1;
写得更短,速度更快。
如果Salaries
有INDEX(emp_no)
,则可以在索引的BTree内执行查询。由于EXPLAIN
说"使用索引",情况就是这样。它被称为"覆盖索引"。该索引是可以加速查询的最佳(也可能是唯一的)。
EXPLAIN
并不完美。
LIMIT 1
的影响未在EXPLAIN
中显示。分区无济于事。