我有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

有帮助吗?

解决方案

您不在选择中使用索引名称(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优化提供帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top