Вопрос

У меня есть таблица (мужчины) с 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

Это было полезно?

Решение

Вы не используете имя индекса (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