我有一个表ABC
,其中有列X
,Y
,Z
和idx1
上的索引(X,Y)
。
如何修改以下查询,以便使用索引。
select * from ABC where Y = 'TEST';
我以这种方式尝试过。但这不起作用。
select /*+ index(ABC idx1) */ * from ABC where Y = 'TEST';
答案 0 :(得分:1)
(X,Y)上的索引不能用于寻找以获取特定的Y值。
考虑电话簿目录,类似于白页。 它是按(姓,名)索引(排序)的。
您将如何使用此目录搜索所有姓氏(Bob)的人? 唯一的方法是逐行扫描整个索引。
但是,如果您需要搜索(史密斯,鲍勃),则可以轻松地找到史密斯页面,然后在其中快速按字母顺序查找所有鲍勃。
如果仅需要搜索Y值,则将需要一个以Y作为第一个键的索引。
HTH。
答案 1 :(得分:0)
您说您的索引与X
和Y
两列相关。
但是您的WHERE
子句仅与Y
列相关,因此即使使用提示也不会使用索引。
任何一个:
更改WHERE
子句以同时过滤X
和Y
列
或仅在列Y
上创建索引
正确的解决方案取决于您的功能用例。在两种情况下,您都不需要提示。