2013-05-17 1 views
0

Ниже приведен запрос, который я выполняю.Индексированный запрос вместе с неиндексными условиями

select col1, col2 from table1 where col1 in (select table2.col1 from table2) and col2 = 'ABC' ; 
  • В table1, индекс доступен на col2, индекс не доступен на col1.
  • У меня есть около 4 миллионов записей для «ABC» в таблице1.
  • Общий размер таблицы1 составляет около 50 миллионов.
  • Размер таблицы2 меньше. Около 1 миллиона. (В этой таблице нет индексов)

Запрос занимает много времени, чтобы выйти. Если я удалю условие «in (select table2.col1 from table2)», запрос ведет себя так, как этого требует индексированный запрос.

Мой вопрос: Если у нас есть индексированный столбец, который используется в предложении where, и мы включаем условие для не проиндексированного столбца (в частности, условие), есть ли вероятность удара производительности? Объяснить план по запросу не дает никакого намека на отсутствие индекса.

Кроме того, имеет ли смысл порядок? i.e В случае, если я даю предложение index перед предложением non index, будет ли оракул применять предложение non index только на выбранном подмножестве?

Заранее спасибо.

+1

Выполнение плана осуществляется многими факторами. во-первых, перепишите запрос так, как он есть на самом деле - join 'select t1.col1, t2.col2 из таблицы1 t1, table2 t2, где t1.col1 = t2.col1 и col2 = 'ABC''. во-вторых, убедитесь, что вы правильно указали свою статистику в обеих таблицах «begin dbms_stats.gather_table_stats (« table1, table2 », cascade => true); end; 'затем выполнить запрос и опубликовать план выполнения. – haki

ответ

1

Порядок ваших предикатов не имеет значения. Оптимизатор определяет это. Это не так просто, как «индекс всегда лучше», поэтому оптимизатор пытается оценить «избирательность» каждого предиката, а затем определить «лучший» порядок.

Если определено, что один предикат приводит к очень небольшой части таблицы, а индекс существует, то, вероятно, будет использоваться индексированный доступ. В вашем случае я не думаю, что индекс вам поможет, если строки физически не отсортированы (на диске) на col2.

Если вы можете поделиться планами исполнения, мы могли бы вам помочь.

Смежные вопросы