我有一张表,其中包括两列
SPONSOR_ID number
NR_CERTIFICATE char(11)
这两列的索引
NR_CERTIFICATE + SPONSOR_ID
这个表有几十万行,问题是,当我们按特定证书过滤时,select按预期需要纳秒:
SELECT * FROM TBL_XXX WHERE NR_CERTIFICATE = '33300123456'
问题是当我们使用LIKE过滤时:
SELECT * FROM TBL_XXX WHERE NR_CERTIFICATE LIKE '%123456'
然后选择大约需要15秒。
我知道在这种情况下,索引将被丢弃并进行表扫描。在这种情况下,有没有办法强制ORACLE使用索引?或者有没有办法加快这个选择?
答案 0 :(得分:0)
您可以使用optimizer hints“强制”使用索引:
SELECT /*+INDEX(TBL_XXX,YOUR_INDEX_NAME)*/ *
FROM TBL_XXX
WHERE NR_CERTIFICATE LIKE '%123456'
这回答了问题,但不确定这是否能解决您的问题。您应该显示表结构并解释计划以获得进一步的帮助
答案 1 :(得分:0)
如果强制使用带有提示的索引,Oracle将执行完整的索引扫描。 它对您来说不会有意思。如果您的查询有意义,可能您的数据模型不合适。也许一个好方法是将列nr_certificate分成两列。如果可能的话,您可以很容易地获得良好而快速的查询。