Re: Ускорить запрос
От: Docker Канада  
Дата: 31.07.15 14:13
Оценка:
Здравствуйте, Didi, Вы писали:

Мда, вам не повезло... Вот к примеру народ тоже страдает.

В общем случае да, будет перелопачена часть индекса или вообще вся таблица. Проблема вот в чем. Допустим в вашей таблице миллион записей и field1 содержит все числа от 1 до 1 млн. А теперь допустим вы ищете const = 500000. Произойдет то, что в лучшем случае серверу придеться перелопатить 500000 записей в индексе, если он селективный, в худшем сделать полный table scan. И это будет самое лучшее, что можно придумать.

Но, безвыходных ситуаций нет! Подумайте какие еще условия у вас есть для field1/field2. К примеру, если вы знаете, что max(field2-field1) меньше относительно небольшой константы (назовем ее max_len), то можете добавить условие

SELECT * FROM Table WHERE field1 <= const AND field1 >= const — max_len AND const <= field2

может значительно ускорить выборку.

У меня была задача поиска по отрезкам IP адресов в многомиллионной таблице. Этот поход сработал на ура. В вашем может быть еще что-нибудь.

D>Народ, есть ли способы помочь серверу выполнить запрос:

D>SELECT * FROM Table WHERE field1 <= const AND const <= field2
D>field1, field2 — поля таблицы типа INT
D>field1 <= field2 или это всегда перебор всех записей в таблице?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.