在以下情况下如何使用复合索引

时间:2018-11-30 01:13:58

标签: sql performance indexing composite

我有一个表ABC,其中有列XYZidx1上的索引(X,Y)

如何修改以下查询,以便使用索引。

select * from ABC where Y = 'TEST';

我以这种方式尝试过。但这不起作用。

select /*+ index(ABC idx1) */ * from ABC where Y = 'TEST';

2 个答案:

答案 0 :(得分:1)

(X,Y)上的索引不能用于寻找以获取特定的Y值。

考虑电话簿目录,类似于白页。 它是按(姓,名)索引(排序)的。

您将如何使用此目录搜索所有姓氏(Bob)的人? 唯一的方法是逐行扫描整个索引。

但是,如果您需要搜索(史密斯,鲍勃),则可以轻松地找到史密斯页面,然后在其中快速按字母顺序查找所有鲍勃。

如果仅需要搜索Y值,则将需要一个以Y作为第一个键的索引。

HTH。

答案 1 :(得分:0)

您说您的索引与XY两列相关。

但是您的WHERE子句仅与Y列相关,因此即使使用提示也不会使用索引。

任何一个:

  • 更改WHERE子句以同时过滤XY

  • 或仅在列Y上创建索引

正确的解决方案取决于您的功能用例。在两种情况下,您都不需要提示。