MySQL
Советы по производительности Mysql
Поиск…
Оптимизация выписок
Ниже приведены некоторые советы, которые следует помнить, когда мы пишем запрос выбора в MySQL, который может помочь нам и сократить время запроса:
Всякий раз, когда мы используем, где в большой таблице, мы должны убедиться, что столбец в где предложение индексируется или нет. Пример: - выберите * у сотрудника, где user_id> 2000. user_id, если проиндексирован, то ускорит оценку запроса atlot. Индексы также очень важны во время соединений и внешних ключей.
Когда вам понадобится меньший раздел контента, а затем извлечение целых данных из таблицы, попробуйте использовать лимит. Вместо этого пишут Ex: - Выберите * у сотрудника. Если вам нужно только первое 20 сотрудников из lakhs, тогда просто используйте лимит Ex: - Выберите * у сотрудника LIMIT 20.
Вы также можете оптимизировать свой запрос, указав имя столбца, которое вы хотите в наборе результатов. Вместо этого пишут Ex: - Выберите * у сотрудника. Просто укажите имя столбца, из которого вам нужны данные, если в таблице много столбцов, и вы хотите иметь данные для нескольких из них. Пример: - Выберите идентификатор, имя сотрудника.
Индексный столбец, если вы используете для проверки значения NULL в разделе where. Если у вас есть оператор SELECT * FROM tbl_name WHERE key_col IS NULL; то, если key_col проиндексирован, запрос будет оцениваться быстрее.
Оптимизация структуры хранилища для таблиц InnoDB
- В InnoDB, имеющий длинный PRIMARY KEY (либо один столбец с длинным значением, либо несколько столбцов, которые образуют длинное составное значение), тратит много дискового пространства. Значение первичного ключа для строки дублируется во всех вторичных индексных записях, указывающих на одну и ту же строку. Создайте столбец AUTO_INCREMENT в качестве первичного ключа, если ваш первичный ключ длинный.
- Используйте тип данных VARCHAR вместо CHAR для хранения строк переменной длины или для столбцов со многими значениями NULL. Столбец CHAR (N) всегда принимает N символов для хранения данных, даже если строка короче или ее значение равно NULL. Меньшие таблицы лучше подходят для пула буферов и уменьшают дисковый ввод-вывод.
При использовании формата строки COMPACT (формат InnoDB по умолчанию) и наборов символов переменной длины, таких как utf8 или sjis, столбцы CHAR (N) занимают переменную площадь, но по меньшей мере N байтов.
- Для больших таблиц или содержащих много повторяющихся текстовых или числовых данных, используйте формат строки COMPRESSED. Меньше дискового ввода-вывода требуется для переноса данных в буферный пул или для полного сканирования таблиц. Прежде чем принимать постоянное решение, измерьте объем сжатия, который вы можете достичь, используя формат COMPRESSED или COMPACT. Предостережение: тесты редко показывают лучше сжатия 2: 1, и в buffer_pool для COMPRESSED много накладных расходов.
- Как только ваши данные достигнут стабильного размера, или растущая таблица увеличится на десятки или несколько сотен мегабайт, подумайте об использовании инструкции OPTIMIZE TABLE для реорганизации таблицы и сжатия любого потерянного пространства. Для реорганизованных таблиц требуется меньше операций ввода-вывода диска для полного сканирования таблиц. Это простой способ, который может повысить производительность, когда другие методы, такие как улучшение использования индекса или кода приложения настройки, нецелесообразны. Предостережение . Независимо от размера таблицы, OPTIMIZE TABLE следует выполнять только редко. Это потому, что это дорого, и редко улучшает таблицу настолько, что стоит того. InnoDB неплохо держит свои B + деревья свободными от много потерянного пространства.
OPTIMIZE TABLE копирует часть данных таблицы и перестраивает индексы. Выгоды связаны с улучшенной упаковкой данных внутри индексов и уменьшением фрагментации в табличных пространствах и на диске. Преимущества варьируются в зависимости от данных в каждой таблице. Вы можете обнаружить, что есть значительная прибыль для некоторых, а не для других, или что прибыль уменьшается со временем, пока вы не оптимизируете таблицу. Эта операция может быть медленной, если таблица большая, или если перестроенные индексы не вписываются в буферный пул. Первый запуск после добавления большого количества данных в таблицу часто намного медленнее, чем более поздние.
Построение составного индекса
Во многих ситуациях составной индекс работает лучше, чем индекс с одним столбцом. Чтобы построить оптимальный составной индекс, заполните его столбцами в этом порядке.
-
=
столбцы (столбцы) изWHERE
. (например,INDEX(a,b,...)
дляWHERE a=12 AND b='xyz' ...
) -
IN
column (s); оптимизатор может проскочить через индекс. - Один «диапазон» (например,
x BETWEEN 3 AND 9
,name LIKE 'J%'
). Он не будет использовать ничего в первом столбце диапазона. - Все столбцы в
GROUP BY
, чтобы - Все столбцы в
ORDER BY
по порядку. Работает только в том случае, если всеASC
или всеDESC
или вы используете 8.0.
Примечания и исключения:
- Не дублируйте столбцы.
- Пропускайте все случаи, которые не применяются.
- Если вы не используете все столбцы
WHERE
, нет необходимости переходить кGROUP BY
и т. Д. - Бывают случаи, когда полезно индексировать только столбцы
ORDER BY
, игнорируяWHERE
. - Не «спрячь» столбец в функции (например,
DATE(x) = ...
не может использоватьx
в индексе.) -
text_col(99)
«Префикс» (например,text_col(99)
) вряд ли будет полезно; может повредить.