У меня есть база данных с более чем 60 миллионами записей. Текущая настройка состоит из 1 таблицы с 30+ миллионами и парой небольших таблиц с 5 миллионами в каждой. Структура данных одинакова для каждой таблицы. Человек, который создал наш поиск в первый раз (3-4 года назад, до того, как я был здесь), использовал несколько маленьких таблиц. Мы используем match against
для каждого соединения. Мой босс и он были под впечатлением, что использование нескольких таблиц позволяет MySQL искать каждую таблицу одновременно. Во всем, что я читал, все говорят, что одна большая таблица была бы лучше, но по мере того, как таблица с 30+ миллионами увеличивается, кажется, что она значительно замедляется, иногда занимая 40+ секунд. Это медленнее, чем должно быть?
Статус выбора
SELECT $stuff FROM table1 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table2 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table3 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table4 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table5 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table6 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table7 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table8 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table9 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE) UNION ALL
SELECT $stuff FROM table10 WHERE MATCH (Name) AGAINST ('+john +smith' IN BOOLEAN MODE)
Таблицы MyISAM, а в столбце Name
есть полнотекстовый индекс. Table3
содержит более 30 миллионов записей (около 10 ГБ). Будет ли размещение его в одной таблице или разделение значительно увеличить производительность? Я пропустил что-то еще? Или 60+ миллионов записей слишком много, чтобы получить быстрый ответ при полнотекстовом поиске?