Вопрос оптимизации запроса.

BigWindow

Новичок
Вопрос оптимизации запроса.

Здравствуйте!

Имеется форма с чекбоксами. Каждый чекбокс - фамилия в базе данных. Необходимо выбрать из базы те записи, в которых поле Family совпадает с одним из выбранных чекбоксов.

Первое, что приходит на ум, это обычный запрос:

[sql]SELECT * FROM table_a WHERE (Family = 1 or Family = 2 or Family = 3...)[/sql]
Можно еще через консрукцию IN, но это сути не меняет.

Это единственный вариант?

Используя этот вариант, не используются индексы. Видимо потому, что множественный выбор?
PHP:
r
 

zerkms

TDD infected
Команда форума
IN вполне будет юзать индексы
и чем собсна вариант с IN не устраивает?
 

BigWindow

Новичок
Автор оригинала: zerkms
IN вполне будет юзать индексы
и чем собсна вариант с IN не устраивает?
Я пробовал так

... Family in (1,2,3,4)...

Индексы не юзаются.

а вот так юзаются

... Family in (4)...
 

Gas

может по одной?
как ты определяешь что "не юзаются" и сколько всего записей в таблице ?
 

BigWindow

Новичок
Автор оригинала: Gas
как ты определяешь что "не юзаются" и сколько всего записей в таблице ?
Через EXPLAIN. Там флаг стоит "ALL" - если множественно выбирать
и "REF" - если выбирать только один вариант

В таблице 8 записей. Тестовая она.

-~{}~ 09.10.08 14:09:

Хотя если записей добавить, то TYPE меняется с ALL на Range
 

zerkms

TDD infected
Команда форума
ну, в выводе об использовании индекса свидетельствует немного не type
 

Gas

может по одной?
ну type тоже как признак можно смотреть.


BigWindow
грубо говоря, если количество результатов меньше чем примерно 30% (когда-то в мане было такое число, потом из доки убрали) от записей всей таблицы, то mysql индекс не использует, считает что sequential scan data-файла будет быстрее чем random seek в нём найденных результатов из индекса.
 
Сверху