«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу заставить функцию MySQL FIND_IN_SET использовать индексы?

Как я могу заставить функцию MySQL FIND_IN_SET использовать индексы?

Опубликовано 12 ноября 2024 г.
Просматривать:120

How Can I Make MySQL's FIND_IN_SET Function Utilize Indices?

Можно ли заставить MySQL FIND_IN_SET использовать индексы?

Функция MySQL FIND_IN_SET печально известна тем, что не использует индексы, что приводит к неэффективным запросам. Однако существуют альтернативные подходы для достижения желаемого поведения индексации при работе со списками, разделенными запятыми.

Диапазонный подход

Техника, описанная в предоставленном ответе, предполагает использование подготовленного оператора с параметром. принятие строки в виде списка, разделенного запятыми. Использование типа диапазона с ключом, отличным от NULL, в подготовленном операторе гарантирует, что индексы будут использоваться при выполнении предложения IN.

Например, следующий запрос выполняет поиск диапазона с индексом в Столбец 'id':

explain 
select * from ratings where id in (2331425, 430364, 4557546, 2696638, 4510549, ...)

Меры предосторожности и предостережения

Хотя этот подход позволяет эффективно индексировать запросы, крайне важно соблюдайте следующие меры предосторожности:

  • Атаки с использованием SQL-инъекций: Использование предоставленных пользователем данных в хранимых процедурах может открыть возможности для атак с использованием SQL-инъекций. Правильная очистка необходима для предотвращения выполнения вредоносного кода.
  • Сканирование таблиц: Если столбец, используемый для поиска по диапазону, не проиндексирован или имеет ненулевые значения, это может привести к ужасному сканированию таблицы. , что крайне неэффективно для больших наборов данных.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3