Я работаю над LearnBiz Simulations , самофинансируемым стартапом, который делает моделирование для области управления образованием.
(а) Наш сайт в настоящее время обслуживает около 16 тыс. человек. В настоящее время размер базы данных составляет 30 мб, в общей сложности около 90 таблиц, и каждая таблица может содержать от 5 до 50 столбцов. Все наши таблицы в базе данных неоднократно имеют новые строки вложений, удалений или обновлений. Но столбцы никогда не добавляются. Создает ли он какие-либо проблемы с использованием методов индексирования? Были еще несколько форумов и видеороликов, которые предполагают, что даже вставка или удаление строки сделает индексирование бесполезным!
(б) Максимальная работа на нашем веб-сайте – это запросы mysql с некоторой обработкой строк кода в диапазоне от 200-800 строк. Почти 95% + наших запросов имеют множественное равенство where where, чтобы выровнять требуемую строку. Если я правильно понимаю, то использование индексации поможет нам ускорить процесс в несколько раз быстрее?
(c) Существуют некоторые модели, которые обрабатывают данные многих участников каждую минуту. Для такого моделирования в настоящее время мы не можем обслуживать даже 50 участников одновременно. Будет ли использование индексации помогать таким симуляторам иметь гораздо больше пользователей?
(d) Сервер, на котором мы сейчас находимся, является VDS с GoDaddy (стоит около 400 долларов США в год). Чтобы ускорить работу нашего сайта, было бы целесообразно перейти на DDS (стоимостью около 3000 долларов в год) или получить что-то вроде TokuDB? Есть ли способ судить о емкости пользователя текущей системы, то есть сервер + база данных + кодирование?
(a) Эти форумы и видео бесполезны, бездумно повторяют полуправды (да, при использовании индексов есть накладные расходы, просто выигрыш в производительности обычно превышает его много раз)
(б) В большинстве случаев, хотя будьте осторожны, чтобы создавать индексы, которые действительно полезны. Документация MySQL содержит целую главу о том, как это сделать (в общем, вы захотите также взглянуть на всю главу « Оптимизация»
(c) Убедитесь, что ваш тест не моделирует слишком большой трафик. Например, 50 реальных пользователей одновременно не будут генерировать 50 подключений в секунду. Опять же, вы должны увеличить производительность после внедрения индексов и оптимизации ваших запросов
(d) Никаких дополнительных ресурсов не поможет, если ваш сервер базы данных не настроен должным образом (вы используете кеш запросов? Вы разрешаете MySQL использовать достаточное количество памяти для хранения таблиц в памяти? и т. д.).
Подводя итог: прочитайте о базовой конфигурации вашего сервера MySQL, чтобы он мог эффективно использовать ваши ресурсы (по умолчанию обычно недостаточно), а также посмотрите главу «Оптимизация» в руководстве.
Что касается вопросов с индексами, индекс не только желателен, но и необходим для «ускорения» вещей. Насколько я понимаю (в терминах «непрофессионала»), функция индекса заключается в ускорении поиска и восстановления данных внутри таблицы.
double
(или любых других чисел с числовыми числами с плавающей запятой) для индексирования, поскольку они обычно используются для хранения значений, не предназначенных для поиска. char
или varchar
на котором мне нужно выполнять поиск, должно быть проиндексировано. Старайтесь избегать индексов в text
полях, поскольку они могут содержать в себе очень большие значения. blob
) полей … это не имеет смысла