У меня есть таблица со 100 миллионами строк. Я должен использовать оператор BETWEEN, и запрос выполняется очень медленно. Необходимо получить все строки, которые находятся в диапазоне от суммы и цены, или все с этим городом и штатом.Производительность Oracle на столе
У меня есть 2 указателя один на t.name, а другой на t.city & t.state.
Выполнение этого запроса происходит очень медленно. Как я могу улучшить этот запрос.
SELECT t.trader_id, t.name, t.city, t.state
FROM trader t
WHERE t.name = 'john test' AND
is_valid = 1 AND
((t.amount BETWEEN (-2500.0000 , 2800.000) AND
t.price between (25.00000 , 58.000000)) OR
(t.city='city' AND
t.state='state'))
имеет отличные уникальные индексы, присутствующие на
- t.name
- t.city, t.state
для (имя и is_valid) существует около 78000 строк. Для (цена и количество) существует около 331809 строк. Для (города и штата) имеется около 13500 строк.
Разделен ли стол? Индексируются? Каков план выполнения запроса? Вызывается динамическая выборка (об этом говорит план выполнения). Сколько строк соответствует первым двум критериям? –
таблица индексируется. Имейте 2 индекса один на t.name и другой на t.city & t.state. Выполняя план выполнения, он показывает, что для суммы, цены, города и состояния выполняется INDEX BY ROWID. в то время как для имени t.name используется индекс. Проблема связана с t.price, t.amount, t.city и t.state. – user12121
David, это не дубликат, этот запрос рассматривает только 1 таблицу, а не несколько таблиц. – user12121