Оптимизация базы данных MySQL — как мы уменьшили нагрузку в 10 раз и сильно увеличили скорость сайта.
Если у вас нестандартный движок, то он может сильно нагружать БД и соответственно тормозить сайт.
Сразу пример
Сразу покажем наш пример (нажмите на изображение, чтобы увеличить):
По мере того, как растет сайт — у него увеличивается база данных и соответственно нагрузка на нее. И, если кто-то думает, что заплатив однажды за создание сайта, на этом дело закончится, то это не так) Большие порталы приходится обслуживать, порой и целой команде.
Данный сайт практически уже выгоняли с хостинга, потому что нагрузка была запредельная. Программист был занят своим делом и ему было не до оптимизации базы данных или он просто не знал как оптимизировать. Но прикол в том, что MySQL довольно шустрая штука, пришлось пару недель поразбираться, полностью вникнуть в движок и результат вы видите. В результате еще и скорость сильно повысилась и денег платить теперь придется меньше, да и о будущей нагрузке не придется беспокоиться.
Что было сделано:
- обследовалась вся логика сайта — необходимо понимание всех процессов на сайте
- оптимизировались запросы к базе данных
- проводилась работа с индексами БД (обратите внимание FULLTEXT индекс работает значительно медленнее, так как это полнотекстовый индекс)
Если вам нужна оптимизация MySQL и сайт сильно тормозит, то обращайтесь, постараемся помочь.
10 тонкостей при работе с бд MySQL, о которых мало-кто пишет
- Меньшие по размеры типа данных быстрее обрабатываются процессорами и «съедают» меньшего его мощности. В этой связи, проектирование БД очень важно, и делаться должно не после создания проекта, а до. Типы данных с меньшим размером занимаются меньше места на диске и в кэше процессора.
- Дату следует хранить в специальных встроенных типах данных, которые уже есть в MySQL. Также знаете ли вы, что лучше выбрать DATETIME или TIMESTAMP? Так вот, TIMESTAMP лучше, так помимо того, что занимает в 2 раза меньше места, так еще и позволяет работать с часовыми поясами и обладает спец средствами для автоматического обновления.
- Для IP адресов нужно использовать целочисленные типы данных.
- Значение NULL очень сложно для обработки, поэтому не стоит хранить их в значениях.
- TINYINT, SMALLINT, MEDIUMINT, INT и BIGINT требуют для хранения 8, 16, 24, 32 и 64 бита соответственно.
- Тип FLOAT использует 4 байта, а DECIMAL — 8 байт, так как используется для хранения чисел с плавающей точкой, но с больше точностью. Если большая точность не нужна, то выбор FLOAT.
- CHAR — хранить строки точной длины, а VARCHAR — переменной + 1-2 доп байта. Например, VARCHAR(10) — хранить 10 байт +1 дополнительный, а VARCHAR(1000) — 1002 байта. Все эти цифры, вроде малы, но в больших количествах информация имеет тенденцию накапливаться и тратить при обработке большое количество процессорного времени. И CHAR — удаляет пробелы по краям строки — так что будьте внимательны.
- Типы данных BLOB и TEXT обрабатываются как отдельный объект. Занимают в базе от 1 до 4 байт и остальное место на диске потребуется.
- Значение VARCHAR(10) и VARCHAR(200) могут хранить одинаковое количество информации, но вот обрабатываются они будут по разному, так как под них отводится разное количество памяти. Если вы задумываетесь о производительности, то тут есть простор для оптимизации.
- Сортировка ORDER BY — сложный процесс, который затрачивает большое количество «процессора» и происходит во временных пространства. Поэтому, например, таблицы, которые содержат VARCHAR(1000) и с большим количеством строк (млн например) будут очень затратны, с точки зрения производительности.
Смотрите также: