Добрый день!
Есть таблица `table`, в ней 500'000'000 записей и весит она 40Гб.
Таблица в течении суток работает на SELECT, оооочень редко на UPDATE/DELETE и раз в сутки (ночью) на INSERT.
Вопрос 1: Является такой размер таблицы и такое кол-во записей критическим? Ведь на жестком диске таблица это файл, и не смотря на все механизмы кэширования, движку MySQL приходиться работать с 40Гб файлом.
Вопрос 2: Посчитав, что иметь такую большую таблицу плохо, я разбил таблицу на 10 таблиц по 50'000'000 записей, с именами `table_0`, ..., `table_9`. Есть ли возможность составить красивый запрос на SELECT/UPDATE/DELETE группы таблиц?
Способ который известен мне для SELECT это UNION:
(SELECT * FROM `table_0` WHERE `id` IN (1, 2, 3))
UNION ALL (SELECT * FROM `table_1` WHERE `id` IN (1, 2, 3))
...
UNION ALL (SELECT * FROM `table_9` WHERE `id` IN (1, 2, 3))
А на UPDATE/DELETE придется делать по 1 запросу к каждой таблицы.
А идеально было бы что-то вроде
SELECT * FROM `table_0`, `table_1`, ..., `table_9` WHERE `id` IN (1, 2, 3)
UPDATE `table_0`, `table_1`, ..., `table_9` SET `field` = 10 WHERE `id` IN (1, 2, 3)
Вопрос 3: Насколько эффективно разбитие таблицы на подтаблицы? Ведь фактически MySQL по прежнему приходиться сканировать 40Гб, но не в одном файле, а в 10 файлах?
Спасибо за ответы и советы!