У меня есть 20-миллионная таблица записей в базе данных MySQL.SELECT работает очень быстро, потому что я настроил хорошие индексы, но операции INSERT и UPDATE становятся очень медленными.База данных является серверной частью веб-приложения под большой нагрузкой.INSERT и UPDATE очень медленные, потому что в этой таблице около 5 индексов, а размер индекса сейчас составляет около 1 ГБ - я думаю, что для вычисления потребуется много времени.
Чтобы решить эту проблему, я решил разделить таблицу,Я использую MySQL 4 и не могу выполнить обновление (нет прямого контроля над сервером), поэтому я сделаю ручное разбиение - создаю отдельную таблицу для каждого раздела.
Набор данных состоит из примерно 18000 различных логических срезов, которые можно запрашивать совершенно отдельно.Поэтому я мог бы создать 18000 именованных таблиц (maindata1, maindata2 и т. Д.).Тем не менее, я не уверен, что это оптимальный способ сделать это?Помимо очевидного факта, что мне придется просматривать 18000 элементов в инструменте администрирования всякий раз, когда я хочу что-то сделать вручную, я обеспокоен производительностью файловой системы.Файловая система - ext3.Я не уверен, насколько быстро он находит файлы в каталоге с 36000 файлами (есть файл данных и индексный файл).
Если это проблема, я могу объединить несколько кусков данных в одинТаблица.Например: maindata10, maindata20 и т. Д., Где maindata10 будет содержать фрагменты 1, 2, 3 ... 10.Если бы я пошел на «группы» из 10, у меня было бы только 1800 таблиц.Если бы я сгруппировал 20, я бы получил 900 столов.
Интересно, какой будет оптимальный размер этой группировки, т.е. количество файлов в каталоге по сравнению с размером таблицы?
Редактировать: Мне также интересно, будет ли этоХорошая идея использовать несколько отдельных баз данных для группировки файлов.Итак, даже если бы у меня было 18000 таблиц, я мог бы сгруппировать их, скажем, в 30 баз данных по 600 таблиц в каждой.Кажется, с этим было бы намного легче справиться.Я не знаю, увеличит ли несколько баз данных производительность или уменьшит производительность или объем памяти (это усложнит резервное копирование и восстановление)