我有桌子(MEN),有900,000条记录。
在此表中,我有字段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
答案 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')