代码之家  ›  专栏  ›  技术社区  ›  Gold

Oracle 11g问题索引

  •  2
  • Gold  · 技术社区  · 15 年前

    我有90万张唱片。

    在这张桌子上我有字段 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

    3 回复  |  直到 15 年前
        1
  •  5
  •   Klaus Byskov Pedersen    15 年前

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

        2
  •  1
  •   HamoriZ    15 年前

    在您的查询中

    select My_in from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
    

    “我的”是索引名。如果要强制使用索引,则可以提示查询

      select /*+INDEX(My_in MEN) */  * from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
    
        3
  •  1
  •   Pablo Santa Cruz    15 年前

    这不是有效的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优化。