В течение последних нескольких недель у меня было время увеличить производительность для нескольких простых запросов. Я предполагаю, что сначала напишу запрос, а затем опишу, что в настоящее время используется, и мои идеи.Проблема с производительностью на некотором простом запросе
Таблица: ~ 100 миллионов строк
Статистика Собранная Еженедельно
пример:
SELECT c1,c2,c3,c4,TO_NUMBER(c5)
FROM TABLE
WHERE CODE = 3 AND
NUMBER IN (115,433,54542,435930,22565,3293029,3222) AND
DATE BETWEEN TO_DATE('01-01-2010','DD-MM-YYYY') AND TO_DATE('01-01-2015','DD-MM-YYYY') AND
AMOUNT > 1000
В настоящее время существует индекс на код, номер и дату столбцов, которые используются, но запрос все еще требуется несколько минут. Также есть индекс только в столбце NUMBER, который был протестирован, и он работает немного лучше, но запрос все еще слишком медленный.
Таблица также разбивается на DATE по месяцам.
Поскольку существующие индексы не работают, я собираюсь создать свою собственную таблицу, в которой я могу свободно властвовать.
Мои идеи:
1) Создайте раздел или материализованный вид на CODE; половина таблицы имеет код = 3, поэтому я думаю, что это будет эффективно вдвое меньше размера таблицы.
2) ДАТА также сохраняется со временем; усечение всех дат и создание раздела таким образом может повысить производительность.
3) Создайте индекс на всех четырех столбцах, чтобы узнать, увеличит ли он производительность.
Это все, что у меня действительно есть. Любые другие предложения очень ценятся!
Разбивка по диапазону по DATE. – Alfabravo
Пожалуйста, объясните вывод плана плана. – OldProgrammer