Я работаю над SQL-запросом и пытаюсь его оптимизировать, потому что выполнение его занимает слишком много времени.
У меня есть несколько вариантов выбора и UNION между ними.
Каждый выбор находится в той же таблице, но с другим условием в предложении WHERE.
В основном у меня всегда что-то вроде:
select * from A
where field1 <=TO_DATE ('01/01/2010', 'DD/MM/YYYY')
AND field1 >= TO_DATE(some date)
and field2 IN (...)
UNION
select * from A
where field1 <=TO_DATE ('01/01/2010', 'DD/MM/YYYY')
AND field1 >= TO_DATE(some date2)
and field2 =(...)
UNION
....
У меня есть индекс по field1 (это поле даты, а field2 это число).
Теперь, когда я делаю выбор, и если я ставлю только
WHERE field1 <TO_DATE ('01/01/2010', 'DD/MM/YYYY')
не использует индекс.
Я использую жабу, чтобы увидеть объяснение, и он сказал:
SELECT STAITEMENT Optimiser Mode = CHOOSE
TABLE ACCESS FULL
Это огромная таблица, и индекс в этом столбце есть.
Есть идеи об этом оптимизаторе? И почему он не использует индекс?
Другой вопрос: если у меня есть предложение where для field1 и field2, я должен создать только один индекс или один индекс для каждого поля?