Почти все друзья могут невзначай сказать несколько слов о преимуществах и недостатках создания индекса, а также знают, когда создавать индекс для повышения производительности наших запросов, и когда индекс будет обновляться, но замечали ли вы, что даже если вы установить индекс, иногда индекс не вступает в силу! Это не только проверяет понимание индекса всеми, но также позволяет всем правильно использовать его при его использовании. Ниже описаны некоторые особые ситуации, которые могут привести к сбою индекса. Надеюсь, вы обратите на это внимание во время обычной разработки и собеседований!
1. Как определить, действует ли индекс базы данных
Прежде всего, прежде чем перейти к обсуждению, поговорим о том, как судить о том, действует ли индекс БД! Я считаю, что все должны были догадаться, то есть объяснить! Объяснение показывает, как MySQL использует индексы для обработки операторов выбора и объединения таблиц. Он может помочь выбрать лучшие индексы и написать более оптимизированные запросы.
Например, у нас есть пользователь таблицы, создайте индекс name_index для столбца name следующим образом:
Используйте объяснение, чтобы проанализировать утверждение следующим образом:Как видите, с помощью объяснения отображается много столбцов, и значение каждого ключевого слова следующее:-
таблица: как следует из названия, о какой таблице данные в этой строке;
-
тип: это важный столбец, показывающий, какой тип соединения используется. отот лучшего к худшемуТипы соединений: const, eq_reg, ref, range, indexhe и ALL;
-
возможных_ключей: отображает индексы, которые можно применить к этой таблице. Если пусто, нет возможных индексов. Соответствующий оператор может быть выбран из оператора where для соответствующего домена;
-
ключ: Фактический используемый индекс. Если NULL, индекс не используется. В редких случаях MySQL выберет недостаточно оптимизированный индекс. В этом случае вы можете использовать USE INDEX(имя_индекса) в операторе Select, чтобы принудительно использовать индекс, или IGNORE INDEX(имя_индекса), чтобы заставить MySQL игнорировать индекс;
-
key_len: длина используемого индекса. Чем короче длина, тем лучше без потери точности;
-
ref: показывает, какой столбец индекса используется, если возможно, константа;
-
rows: количество строк, которые, по мнению MySQL, должны быть проверены, чтобы вернуть запрошенные данные;
-
Дополнительно: дополнительная информация о том, как MySQL анализирует запрос.
Конкретные значения и значения, которые может представлять каждый столбец, см. в официальной документации MySQL по адресу:Dev.MySQL.com/doc/Furious/…
2. При каких сценариях индекс вступит в силу?
1. Старайтесь избегать использования оператора != или в предложении where, иначе движок откажется от использования индекса и выполнит полное сканирование таблицы;
2. Старайтесь избегать использования или в предложении where для подключения условий, иначе движок откажется от использования индекса и выполнит полное сканирование таблицы, даже если есть условный индекс, он не будет использован, поэтому используйте или как можно меньше;
3. Для многоколоночного индекса, если это не первая часть использования, индекс не будет использоваться;
4. Если тип столбца — строка, обязательно заключайте данные в условие в кавычки, иначе индекс не будет использоваться;
5. Нечеткий запрос типа начинается с %, а индекс недействителен;
6, надо попробоватьизбегатьПоля в предложении whereманипулирование выражениями, что заставит движок отказаться от использования индекса и выполнить полное сканирование таблицы;
Такие как:
select id from t where num/2 = 100
Следует изменить на:
select id from t where num = 100*2;
7, надо попробоватьизбегатьПоля в предложении whereработа функции, что заставит движок отказаться от использования индекса и выполнить полное сканирование таблицы;
Например:
select id from t where substring(name,1,3) = 'abc' – name;
Начинающиеся с abc следует изменить на:
select id from t where name like ‘abc%’
Например:
select id from t where datediff(day, createdate, '2005-11-30') = 0 – '2005-11-30';
Следует изменить на:
select id from t where createdate >= '2005-11-30' and createdate < '2005-12-1';
8. Не выполняйте функции, арифметические операции или другие операции с выражениями слева от "=" в предложении where, иначе система не сможет правильно использовать индекс;
9. Если MySQL считает, что использование полного сканирования таблицы быстрее, чем использование индекса, не используйте индекс;
10. Не подходит для столбцов с меньшим количеством ключевых значений (столбцы с большим количеством повторяющихся данных)
Если столбец индекса TYPE имеет 5 ключевых значений, если имеется 10 000 фрагментов данных, то WHERE TYPE = 1 обеспечит доступ к 2 000 блоков данных в таблице. В дополнение к доступу к индексным блокам необходимо получить доступ к более чем 200 блокам данных. Если используется полное сканирование таблицы, предполагая, что 10 фрагментов данных представляют собой один блок данных, то необходимо получить доступ только к блокам данных 1000. Поскольку полное сканирование таблицы обращается к меньшему количеству блоков данных, индекс определенно не будет использоваться.
Справочная статья:
1,blog.CSDN.net/QQ_33774822… Дотроньтесь до своего носа. Очистите и съешьте. Можете/дотронуться до своего носа_PNG/U…