关于oracle 11g问题的索引

时间:2010-11-09 14:41:23

标签: sql oracle oracle11g ora-00904

我有桌子(MEN),有900,000条记录。

在此表中,我有字段IPTdate

当我运行查询时:

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

3 个答案:

答案 0 :(得分:5)

您不在select中使用索引名称(My_in)。数据库本身将决定使用索引。因此,您应该像第一个示例中那样进行相同的选择。

答案 1 :(得分:1)

这不是有效的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');

EXPLAIN PLAN上查看Oracle的文档。它将帮助您进行此优化和许多其他SQL优化。

答案 2 :(得分:1)

查询中的

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')