Oracle11g 如何将低/高基数列配对为复合索引?
这个问题与Oracle DB有关,所以如果有一般性的答案,我想知道。因为我放弃了Derby/MySQL和其他数据库中关于这个主题的信息 假设我在WHERE子句上使用以下列进行了几个查询: -询问 从T中选择*其中A:=?B:=? 从T中选择*其中A:=?B:=?和C:=? 从T中选择*其中A:=?和C:=? 从T中选择*其中A:=?和C:=?和D:=? 从T中选择*其中A:=?和E:=?和F:=? 将这些列配对并将基数混合作为复合索引是否有任何好处?如果是的话,遵循什么逻辑? 我已经理解了,但这是针对SQL Server的,它的行为可能会有所不同 是否值得做覆盖指数而不是单个小型综合指数 复合索引的列顺序是否重要?i、 e: -无论创建表时的列顺序如何。 在ta,C上创建索引NDX_1; -与: 在tc,A上创建索引NDX_1; 这个索引有用吗? 在TE,F上创建索引NDX_2;-低+低忽略“A”列。Oracle11g 如何将低/高基数列配对为复合索引?,oracle11g,database-performance,Oracle11g,Database Performance,这个问题与Oracle DB有关,所以如果有一般性的答案,我想知道。因为我放弃了Derby/MySQL和其他数据库中关于这个主题的信息 假设我在WHERE子句上使用以下列进行了几个查询: -询问 从T中选择*其中A:=?B:=? 从T中选择*其中A:=?B:=?和C:=? 从T中选择*其中A:=?和C:=? 从T中选择*其中A:=?和C:=?和D:=? 从T中选择*其中A:=?和E:=?和F:=? 将这些列配对并将基数混合作为复合索引是否有任何好处?如果是的话,遵循什么逻辑? 我已经理解了,但这
有几件事要记住,这些都是一般性的 通常只能使用索引的前导部分。这么好看 看看你的例子 如果在A,B,C上有一个索引,在A和上有一个谓词 C、 然后,只能使用上的索引。现在有一些案例 可使用索引的非前导部分;你会看到 这在执行计划中是一种跳过扫描操作,但它们是 通常是次优的。所以你可能想要A,C和C,A 如果不投影索引中的列以外的列,则覆盖索引可能很有用 同样,如果列的选择性较低,通常不需要索引。但是,有可能有两个色谱柱各自具有低选择性,但组合使用时具有高选择性。事实上,这是在维度模型中进行位图索引/星形转换的前提 如果多列索引有用,您可能希望将选择性最低的列放在第一位,并启用索引压缩。索引压缩在某些情况下可以节省大量空间,并且CPU开销非常小
最后,在运行SQL语句时,SQL监视器报告将帮助您优化SQL语句。有几件事需要注意,这些是一般性的 通常只能使用索引的前导部分。这么好看 看看你的例子 如果在A,B,C上有一个索引,在A和上有一个谓词 C、 然后,只能使用上的索引。现在有一些案例 可使用索引的非前导部分;你会看到 这在执行计划中是一种跳过扫描操作,但它们是 通常是次优的。所以你可能想要A,C和C,A 如果不投影索引中的列以外的列,则覆盖索引可能很有用 同样,如果列的选择性较低,通常不需要索引。但是,有可能有两个色谱柱各自具有低选择性,但组合使用时具有高选择性。事实上,这是在维度模型中进行位图索引/星形转换的前提 如果多列索引有用,您可能希望将选择性最低的列放在第一位,并启用索引压缩。索引压缩在某些情况下可以节省大量空间,并且CPU开销非常小
最后,SQL Monitor报告将帮助您在运行SQL语句时优化SQL语句。最佳处理所有5种情况的最小索引数:
(A, B, C) -- in exactly this order
(A, C, D) -- in exactly this order
(A, E, F) -- in any order
如果添加另一个SELECT,则所有下注都将关闭
什么时候有A,C和C,A
每个都处理仅使用第一列的情况。
前者在A=1且C>5时是最佳的;后者并非如此。Etc注:=与某种范围测试相关。
为表设计索引时,首先写出所有查询。最佳处理所有5种情况的最小索引数:
(A, B, C) -- in exactly this order
(A, C, D) -- in exactly this order
(A, E, F) -- in any order
如果添加另一个SELECT,则所有下注都将关闭
什么时候有A,C和C,A
每个都处理仅使用第一列的情况。
前者在A=1且C>5时是最佳的;后者并非如此。Etc注:=与某种范围测试相关。
在为表设计索引时,首先写出所有查询。将两个单独的索引a、C和C、a一起使用是否是一种好的做法?即使两者的基数都很低?谢谢你,罗兹皮。我不太喜欢最佳实践;但我会尽量告诉你这些信息,这样你才能做出明智的决定。原因是很多答案都很简单——这要看情况而定。但是,如果A和C都是低选择性的,我可能不会同时创建两个索引。使用两个单独的索引A、C和C是一种好的做法吗,
A总共?即使两者的基数都很低?谢谢你,罗兹皮。我不太喜欢最佳实践;但我会尽量告诉你这些信息,这样你才能做出明智的决定。原因是很多答案都很简单——这要看情况而定。然而,如果A和C都是低选择性的,我可能不会同时创建这两个索引。