Всем привет!
Есть структура таблицы с 20 полями, по 3 полям 3 разных индекса.
Есть 10 таблиц с описанной структурой в каждой из которых по 100М записей.
Поиск может происходить по любому из 3х полей.
Записи в таблицу добавляются в backend'е раз в сутки по утрам, выборка происходит много раз в течении дня.
Иногда записи из таблицы необходимо удалять.
Когда стоит подобная задача, но поиск может быть только по одному полю, я применяю шардирование при вставке и выборке данных. Например, `users_table_`.floor($user_id/1000000).
В принципе мне подходит решение с созданием таблицы MRG_MyISAM по 10 таблицам. Вставку производить в каждую таблицу по отдельности, а выборку по объединённой таблице. Но, в мануале
написано:
MERGE tables use more file descriptors than MyISAM tables. If 10 clients are using a MERGE table that maps to 10 tables, the server uses (10 × 10) + 10 file descriptors. (10 data file descriptors for each of the 10 clients, and 10 index file descriptors shared among the clients.)
Это замечание отпугивает меня от использования MERGE.
Поделитесь своим опытом организации хранения и выборки в подобных случаях. Может быть есть решения отличные от MySQL.
Большое спасибо!