Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql oracle11g问题索引_Sql_Oracle_Oracle11g_Ora 00904 - Fatal编程技术网

Sql oracle11g问题索引

Sql oracle11g问题索引,sql,oracle,oracle11g,ora-00904,Sql,Oracle,Oracle11g,Ora 00904,我有一张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

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

这不是有效的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优化和许多其他SQL优化。

在选择中不使用索引名(My_in)。数据库本身将决定如何使用索引。因此,您应该在查询中执行与第一个示例相同的选择。

select My_in from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
中的my_是索引名。如果要强制使用索引,则可以提示查询

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

好的,如果我还有一个索引,比如说,在男性(IP)上创建索引my_in2;甲骨文将如何知道使用什么索引?它将选择它认为最好的索引。它通过查看表的统计信息来确定这一点,这就是为什么有时必须更新表/索引的统计信息,以使其使用正确的索引。+1用于提请注意
explain plan
,但是它应该是
explain plan for select*from MEN…
,然后是
select*from table>(dbms_xplan.display())
或类似内容。+1但大多数情况下,提示不是必需的(甚至可能导致查询运行较慢),应该避免使用。