2

我有 900,000 条记录的表 (MEN)。

在这张表中,我有字段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

4

3 回答 3

5

您没有在选择中使用索引名称 (My_in)。数据库本身会计算出使用索引。所以你应该做和你的第一个例子一样的选择。

于 2010-11-09T14:45:28.240 回答
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');

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

于 2010-11-09T14:44:51.233 回答
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')
于 2010-11-09T14:45:48.597 回答