|
|
|
| Здравствуйте.
Есть таблица 1. InnoDB. Данные разные. Объем около 150мб.
Есть таблица 2. MyISAM. Исключительно INT поля, столбцов 4 штуки. Объем около 400мб.
Во второй таблице много записей, по несколько десятков и сотен, которые привязаны к записям из первой таблицы. Т.е. на одну запись в тбл1 много записей в тбл2.
Селект построен довольно сложно:
<?
SELECT id FROM table1 WHERE .......
AND
(
EXISTS(SELECT 1 FROM table2 WHERE pid=table1.id AND column1 IN(1,2,3,4))
OR
EXISTS(SELECT 1 FROM table2 WHERE pid=table1.id AND column2 IN(5,6,7,8))
)
?>
|
разумеется 1,2,3,4,5,6,7,8 - это просто для примера. Также этих EXISTS может быть несколько больше.
В связи с увеличением объема, запросы стали потихонку замедляться (сейчас они выполняются чуть больше секунды). Хотелось бы немного ускорить их. Возможно я что-то не учел? Может быть имеет смысл таблицу2 перенести как-то, может быть заменить тип, может что-то еще? Например в каком-то формате перенести множественнены записи из таблицы2 в отдельный столбец таблицы1 и искать их там при помощи LIKE, а не этих подзапросов (хотя, как я понимаю, это гораздо хуже)?
Изменения редки, т.е. в таблицу1 добавляется запись, затем связанные с ней записи в таблицу2, а потом, как правило, внесенные записи не меняются (или очень редко). | |
|
|