我在表格中的4列上有一个复合唯一索引,并且有一个性能问题的查询,它们分别对两列进行过滤。也许一个愚蠢的问题,但我应该索引各个专栏以改善表现吗?谢谢你的帮助!我应该索引已经是复合索引一部分的单个列吗?
回答
我在回答这个问题,因为乔的回答不正确。
Oracle 9引入了一种新型的索引扫描,称为跳跃扫描。这允许索引用于非主导列。细节在documentation中解释。
的确,在大多数数据库中,在大多数情况下,索引是从左到右使用的。但是,Oracle的跳过扫描机制是一个例外,并且对其他数据库中的索引算法进行了改进。
加一:今天我学到了一些新东西! –
答案取决于哪两列。组合索引可用于最左列的子集。如果您的索引开启(A,B,C,D),并且您正在筛选A和B,那么您很有必要。另一方面,如果你在B和C上过滤,那么这个索引不会帮助你,你需要创建一个新的索引。
感谢您的答复。为了确保我理解正确,说我筛选的列是A和C.在这种情况下,我只想向C添加索引,对吧? –
@TheGilbertArenasDagger在A和C的情况下,现有的(A,B,C,D)索引可以用于A过滤器,但对于C来说,因为它在B之后,所以对C没有任何帮助。关闭创建(A,C)索引以完全支持该查询模式。 –
您处理折衷。较小的索引速度更快。让我们在一个例子中试试两列。假设我的表X具有字符列A和B.
不让我说我创建了A + B和另一个B + A的索引。
这使我可以为A或B使用索引。但在读取索引时,sql引擎必须读取更多的A + B或B + A的总体数据量。所以这比如果你只有一个A或B只有一个要慢。那么为什么不放4个索引。那么你可以做到这一点,但现在你放慢你的插入,因为你必须保持4个不同的索引。
没有确切的正确答案。其他事情会影响差异。你使用哪个Sql引擎,哪个版本的供应商的sql引擎。了解这些行动的优势和劣势的基本动态。将它与对数据集和使用数据库的数据集的理解结合起来。例如,如果每个给定的A记录很少有三个以上的B记录。有一个综合指数可能没有多大帮助。引擎使用索引查找三条记录然后从中选择您想要返回的记录会更快。
您的结果可能会有所不同。但这非常适合工程学上的平衡。
- 1. 我应该索引一个已经是多字段索引一部分的字段吗?
- 2. 我应该使用多个单列索引还是单个多列索引?
- 3. 我应该索引我的TenantId列吗?
- 4. 复合索引和查询到单个列:我是否需要索引?
- 5. 我应该添加多个索引吗?
- 6. 我应该在这些列上创建一个索引吗?
- 7. sqlite:如果我已经有多列主键,我需要一个索引吗?
- 8. 蒙戈DB索引..我应该如何索引集合
- 9. SQL过滤索引:我应该总是在可选列的索引上放置一个过滤器吗?
- 10. 我应该在经常更新的表上使用索引吗?
- 11. oracle复合索引列位置和非复合索引
- 12. 我应该删除假设索引吗?
- 13. 我应该为此创建索引吗?
- 14. 如果我的复合索引是唯一的,我需要一个主键吗?
- 15. 我应该在搜索唯一索引时限制吗?
- 16. MySQL中的两个单列索引与一个两列索引?
- 17. 组合多列索引以及多个单列索引
- 18. 我应该在Algolia中使用一个或多个索引吗?
- 19. MySQL索引性能...我应该在这个简单的表上创建一个索引吗?
- 20. 多个或单个复合索引
- 21. 一种多索引,其中一个索引是整个集合
- 22. 我应该索引Oracle
- 23. 我应该索引哪些列?
- 24. 在其列,我应该创建索引
- 25. 我的中间表应该包含复合PK还是唯一索引
- 26. 复合唯一索引
- 27. 如果我为已经在覆盖索引中编制索引的单个字段创建单独的索引,我会观察性能增加吗?
- 28. 我应该如何索引一个简单的矩形世界?
- 29. 如果我的索引是部分索引,它在性能/索引大小方面会有明显不同吗?
- 30. MongoDB复合索引
显示您的索引架构和您的查询请 – scaisEdge