MySql запрос массива или оптимизация множества WHERE





есть таблица: tab(id,name)
предположим в таблице 1000 или 10 000 или 1 000 000 записей, или даже больее.
есть массив индексов (id): mass[] = (1,15,16, ... n)
как сделать оптимизировать запрос массива mass из таблицы tab?
т.е. SELECT * FROM tab WHERE id=1 OR id=15 OR id=16 .... OR id=n LIMIT count(mass)
сделать оптимальным и быстрым, кол-во элементов mass может быть от 1 до 1000 или даже больше.

Ответы (4)

RSS
+
0
Здесь значительно уместнее использовать subselect.  Положи свой mass в таблицу и сделай SELECT * FROM tab WHERE id IN (SELECT * FROM mass)
avatar

andora

  • 23 июля 2009, 18:49
+
0
вообщет, мил человек, оно там само оптимизируется движком... мб стоит в таких случаях использовать хеш-таблицы для индексов, но не более.
IN - эт просто другая форма записи. Не советую использовать - вдруг придется на другую СУБД переезжать, а там такого нет?..
avatar

ertoletiki

  • 26 июля 2009, 16:53
+
0
о, чуть не забыл - лимит нужен для того, чтоб запрос не вернул тебе в запросе, результатом которого должна быть одна строка - целую таблицу. Вопщем - это такая продуманная предосторожность.
avatar

cam

  • 1 августа 2009, 16:50
+
0
Если таблица Tab очень большая (скажем, больше 10.000.000 записей), то лучше сделать индекс по полю id. Это будет ускорять запрос. Однако индекса лучше делать на таблицы, которые не так часто изменяются.

Далее, если кол-во значений в  mass тоже много (больше 100), лучше сделать отдельную таблицу, как рекомендовали выше, и соединить эти две таблицы subselect'ом или просто join'ом:
SELECT tab.* FROM tab join mass on tab.id=mass.id
avatar

ri-z

  • 29 июля 2009, 08:22

Только зарегистрированные и авторизованные пользователи могут отвечать.