Простой запрос:
SELECT * FROM table
Я хотел бы знать, что является сложность поиска таблицы. Это O (n)?
Я работаю с WordPress на нескольких сайтах. Это создает дополнительные 8 таблиц для каждого блога. В настоящее время есть ~ 40 тыс. Блогов, поэтому есть более 300к столов уже в одной БД.
Я спрашиваю об этом, потому что я хотел бы понять, как вести себя в данный момент, я хотел бы избежать будущих узких мест.
Спасибо!
Обычно наличие большого количества таблиц, таких как 100-200, не влияет на вашу базу данных, но 300 тысяч таблиц — это безумие.
Думайте о таблицах как о ваших папках, а строки как о файле. Теперь ваша операционная система проиндексировала все файлы в разных папках, что облегчает поиск файлов. Но операционная система не может просто индексировать каждый файл в вашей системе, у нее есть ограничение памяти.
Аналогично в MYSQL каждая таблица имеет индекс, и все эти индексы хранятся в оперативной памяти. Теперь, если у вас слишком много индексов, ваша память не сможет хранить все эти данные. Таким образом, чтобы избежать сбоя сервера, он сохраняет индекс на жесткий диск. Но жесткие диски намного медленнее, чем ОЗУ, и поиск индексов займет гораздо больше времени.
Честно говоря, этот тип базы данных не может быть обработан обычным сервером VPS. Чтобы получить максимальную отдачу от вашей системы, вам придется арендовать сервер с очень большим объемом оперативной памяти. Попробуйте использовать отдельную управляемую систему баз данных, такую как AWS RDS, с автоматическим вызовом, которая предоставит экспертам возможность настройки и автоматического масштабирования базы данных. Если RDS невозможен, попробуйте увеличить key_buffer_size в вашем my.cnf по максимуму вы можете иметь. Таким образом, больше данных будет храниться в вашей оперативной памяти и меньше на жестком диске.
Удачи, и поделитесь своими выводами в комментариях, так как довольно интересно посмотреть, как вы преодолели это 🙂
Других решений пока нет …