Немного знаний об оптимизации SQL

MySQL
Немного знаний об оптимизации SQL

Отрицательные запросы не попадают в индекс

Мисс

select account from user where id not in (1,2,3);

удар

select account from user where id in (4,5,6);

Нечеткий запрос с префиксом не попадает в индекс

Мисс

select account from user where name like '%lufei'

удар

select account from user where name like 'lu%fei%'

Рекомендуется рассмотреть возможность использования полнотекстового индексационного инструмента, такого как Lucene для замены частых нечетких запросов.

Различие данных не очевидна, и индексация не рекомендуется

Для неуникальных полей, таких как «пол» с большим количеством повторяющихся повторяющихся значений, также нет особого смысла увеличивать индекс. Можно использовать такие поля, как уникальные номера счетов.

Меньшие и более простые типы данных предлагают индексы

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

старайтесь избегать нуля

Поля индекса должны быть указаны как NOT NULL. Столбцы с нулевыми значениями сложно оптимизировать для запросов, поскольку они усложняют индексы, статистику индексов и операции сравнения, и их следует заменять 0 или специальными значениями, или нулевым символом.

Расчет индекса не может попасть на поле

索引列不能参与计算,尽量保持列“干净”。比如,FROM_UNIXTIME(create_time) = '2016-06-06' 就不能命中索引。 Мисс

select account from user where FROM_UNIXTIME(create_time) = CURDATE();

удар

select account from user where create_time = FROM_UNIXTIME(CURDATE());

таблица индекс соединения таблиц

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

Приведение типа поля не попадает в индекс

Мисс

select account from user where phone = 1341111111

удар

select account from user where phone = '1341111111'

Если вы знаете, что это рекорд, используйте лимит

select account from user where phone = '1341111111' limit 1

Может повысить эффективность, позволить базе данных остановить движение курсора.

Крайний левый матч

Принцип соответствия крайнего левого префикса. MySQL всегда будет сопоставляться справа, пока не встретит запрос диапазона (>, 3 и d = 4, каждый узел будет обращаться к a, b и c последовательно, но не может ударить д. (очень просто: индексные попадания могут быть только случаями равенства, а не совпадениями диапазона)

личный блог

Woohoo.C code.live/Бертон здесь/иди…

Добро пожаловать в паблик-аккаунт "Разработка на коде" и делитесь свежей технической информацией каждый день