bigton
@bigton
Web-программист

Как сделать SELECT из нескольких однотипных таблиц одним запросом?

Добрый день!

Есть таблица `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 файлах?

Спасибо за ответы и советы!
  • Вопрос задан
  • 2515 просмотров
Пригласить эксперта
Ответы на вопрос 3
gbg
@gbg
Любые ответы на любые вопросы
Разделение таблицы на части в пределах одного сервера совершенно бессмысленно и даже вредно.
Если СУБД настроена верно (назначены индексы), при исполнении запросов она смотрит в индекс, а не перелопачивает весь файл.
Ответ написан
Kwisatz
@Kwisatz
Больше web-приложений, хороших и разных
Используйте партиции, тогда у вас не будет таких проблем. Однако учтите что у MySQL на больших секционных таблицах есть проблемы с каскадными констрейнами.

dev.mysql.com/doc/refman/5.1/en/partitioning.html
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы