多列索引效率 为了提高这个查询的性能,我应该创建索引(b,c)和索引(c,b),还是第一个索引就足够了 据我所知,索引(b,c,a)可能会进一步提高性能,但前提是(b,c,a)比(b,c)更独特。对吗 SQL问题是否属于dba.stackexchange站点
两列上只需要一个索引。两者中哪一个更好取决于表的结构和将使用它的查询,但通常与组合索引的顺序没有显著差异多列索引效率 为了提高这个查询的性能,我应该创建索引(b,c)和索引(c,b),还是第一个索引就足够了 据我所知,索引(b,c,a)可能会进一步提高性能,但前提是(b,c,a)比(b,c)更独特。对吗 SQL问题是否属于dba.stackexchange站点,sql,performance,oracle,indexing,Sql,Performance,Oracle,Indexing,两列上只需要一个索引。两者中哪一个更好取决于表的结构和将使用它的查询,但通常与组合索引的顺序没有显著差异 覆盖查询中使用的所有列的索引称为覆盖索引。它可以提高性能,但除非表有很多列或非常大,否则通常不会产生显著差异。它可以更快的原因是,它不必在找到索引中的条目后再去数据,只需使用索引,而不需要查看数据,因为它需要的一切都在索引中 有些问题更适合dba,但这个问题在这里很好。这甚至可能已经迁移到这里,因为它不是很专业 对于前两部分,总体思路是“视情况而定”。在您的情况下,由于您可能没有处理大量数据
条件,其中b=1和c=2
条件)。是否使用它以及是否提高性能取决于索引的选择性
2.据我所知,索引(b,c,a)可能会进一步提高性能,但前提是(b,c,a)比(b,c)更独特。对吗
对。在(b,c,a)
上的索引(或在(c,b,a)
上的索引同样好)将提高性能。与选择性无关。读取索引(以及所有索引中的同一位置)不可能比读取(b,c)索引,然后从一个(可能更宽)表中的一行和另一行获取a
列数据更糟糕
(b,c)
的选择性,例如查询返回的行数,将影响效率的提高程度,(b,c,a)
索引将为您提供帮助。如果查询返回几十行,差异将很小。如果查询返回数百万个表中的数千行,改进将很高,因为所有数据都将从(覆盖)索引中读取
3.SQL问题是否属于dba.stackexchange站点
这是元站点的一个问题,无论是主站点还是DBA.SE元站点。您使用的是哪种RDBMS?如果您是这样问的,我使用的是Oracle。
select a
from t
where b = 1 and c = 2