2015-12-03 3 views
0

Простой запрос:MySQL - найти таблицу в сложности DB

SELECT * FROM table 

Я хотел бы знать, что это сложность нахождения таблицы. Это O (n)?

Я работаю с многостраничным сайтом Wordpress. Он создает дополнительные 8 таблиц для каждого блога. В настоящее время существует ~ 40 тыс. Блогов, поэтому есть более 300 тыс. Таблиц уже в одной БД.

Я спрашиваю об этом, потому что я хотел бы понять, как вести себя в этот момент, я хотел бы избежать будущих узких мест.

Спасибо!

+0

посмотреть на [INFORMATION_SCHEMA] (https://dev.mysql.com/doc/refman/ 5.0/ru/information-schema.html) – bansi

+0

В чем сложность поиска таблицы в БД? Другими словами, как MySQL выбирает соответствующую таблицу перед ее выбором? – Fento

+1

Я думаю, что вопрос имеет (sligthly) лучший шанс на serverfault.com, чтобы получить ответы «реального мира». – VolkerK

ответ

1

Обычно наличие большого количества таблиц, таких как 100-200, не влияет на вашу базу данных, но столы 300 тыс. Безумны.

Подумайте о таблицах, подобных вашим папкам, и о строках в виде файла. Теперь ваша операционная система индексировала все файлы в разных папках, что упрощает поиск файла. Но операционная система не может просто индексировать каждый файл в вашей системе, у него есть предел памяти.

Аналогично, в MYSQL каждая таблица имеет индекс, и все эти индексы хранятся в ОЗУ. Теперь, если у вас слишком много индексов, тогда ваша оперативная память не сможет хранить все эти данные. Поэтому, чтобы избежать сбоя сервера, он сохраняет индекс на жесткий диск. Но жесткие диски намного медленнее, чем RAM, и для поиска индексов потребуется намного больше времени.

Чтобы быть честным, этот вид базы данных не может быть обработан обычным сервером VPS. Чтобы получить максимальную отдачу от вашей системы, вам придется арендовать сервер с очень высокой оперативной памятью. Попробуйте использовать отдельную систему управляемых баз данных, такую ​​как AWS RDS, с автосогласованием, которая позволит специалистам поднять и автомасштабировать базу данных. Если RDS невозможно, попробуйте увеличить key_buffer_size в своем my.cnf до максимума, который у вас может быть. Таким образом, больше данных будет храниться в вашей ОЗУ и меньше на вашем жестком диске.

Удачи, и сделать поделиться своими выводами в комментариях, как его довольно интересно посмотреть, как вы преодолеть это :)