Oracle 11g索引问题
题
我有900,000张记录的桌子(男人)。
在此表中我有字段 IP
和 Tdate
.
当我运行查询时:
select * from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
我需要很长时间才能得到结果。
我尝试制作这样的索引:
create index
my_in
on
MEN (IP,Tdate );
但是如何运行查询以获得快速结果呢?
我尝试这个:
select My_in from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
并获取错误: ORA-00904
解决方案
您不在选择中使用索引名称(my_in)。数据库本身将发现使用索引。因此,您应该只做与第一个示例中相同的选择。
其他提示
在您的查询中
select My_in from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
my_in是索引名称。如果您想强制索引使用量,那么您可以暗示查询
select /*+INDEX(My_in MEN) */ * from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
那不是有效的SQL。 My_in
是您的索引的名称。
再试一次:
select *
from MEN
where IP = '1.1.1.1'
and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY');
另外,如果您想知道服务器是否会使用新创建的索引使用计划,则可以检查 explain
命令:
explain plan for
select *
from MEN
where IP = '1.1.1.1'
and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY');
看看Oracle的文档 解释计划. 。它将为您和许多其他SQL优化提供帮助。
不隶属于 StackOverflow