Ниже приводится запрос, который я выполняю.
select col1, col2 from table1 where col1 in (select table2.col1 from table2) and col2 = 'ABC' ;
- В table1 индекс доступен для col2, индекс недоступен для col1.
- У меня около 4 миллионов записей для ABC в table1.
- Общий размер table1 составляет около 50 миллионов.
- Размер table2 меньше. Около 1 миллиона. (В этой таблице нет индексов)
Запрос занимает много времени. Если я удалю условие «in (select table2.col1 from table2)», запрос будет вести себя так, как требуется индексированному запросу.
Мой вопрос: если у нас есть индексированный столбец, который используется в предложении where, и мы включаем условие для неиндексированного столбца (в частности, условие in), есть ли вероятность снижения производительности? План объяснения запроса не дает намеков на неиндексную выборку.
Кроме того, имеет ли значение порядок условий? Т.е. в случае, если я укажу предложение индекса перед предложением без индекса, будет ли Oracle применять предложение без индекса только к выбранному подмножеству?
Заранее спасибо.
select t1.col1, t2.col2 from table1 t1 , table2 t2 where t1.col1 = t2.col1 and col2 = 'ABC'
. во-вторых, убедитесь, что вы получили правильную статистику по обеим таблицамbegin dbms_stats.gather_table_stats('table1,table2',cascade=>true); end;
, затем выполните запрос и опубликуйте план выполнения. - person haki   schedule 17.05.2013