我正在数据库管理类(class)中做一些问题集,但我无法解决这个具体问题。
我们有以下关系:
Emp (id, name, age, sal, ...)
以及以下查询:
SELECT id
FROM Emp
WHERE age > (select max(sal) from Emp);
然后我们应该选择一个索引,它将成为一个很好的查询优化器。我的答案是只使用 Emp(age)
但问题的解决方案是
Emp(age)
&
Emp(sal)
怎么有2个索引?我似乎无法理解为什么你需要的不仅仅是年龄属性..
最佳答案
当然,您意识到该查询是无意义的,将 age
与 sal
(可能是薪水)进行比较。也就是说,两个索引适用于:
SELECT e.id
FROM Emp e
WHERE e.age > (select max(e2.sal) from Emp e2);
我添加了表别名来强调查询两次引用 Emp
表。
要从表中获取最大 sal
,您需要在 emp(sal)
上建立索引。最多就是简单的索引查找操作。
然后您想将其与年龄
进行比较。好吧,为了与 age
进行比较,您需要在 emp(age)
上建立索引。这是对 emp
的完全独立的引用,没有对 sal
的引用,因此您不能将这两列放在单个索引中。
age
的索引可能不是必需的。查询可能会返回大量行,而返回大量行的表通常不会从二级索引中受益。它可以从索引中受益的一种情况是如果age
是一个聚集索引(即通常是主键中的第一列)。但是,我不推荐这样的索引结构。
关于mysql - 为 SQL 查询选择最佳索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55207233/