"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo hacer que la función FIND_IN_SET de MySQL utilice índices?

¿Cómo puedo hacer que la función FIND_IN_SET de MySQL utilice índices?

Publicado el 2024-11-12
Navegar:645

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

¿Se puede hacer que MySQL FIND_IN_SET utilice índices?

La función FIND_IN_SET de MySQL es conocida por no utilizar índices, lo que resulta en consultas ineficientes. Sin embargo, existen enfoques alternativos para lograr el comportamiento de indexación deseado cuando se trata de listas separadas por comas.

El enfoque de rango

La técnica descrita en la respuesta proporcionada sugiere usar una declaración preparada con un parámetro aceptando una cadena en forma de lista separada por comas. Al utilizar el tipo de rango con una clave que no sea NULL en la declaración preparada, se garantiza que se emplearán índices al ejecutar la cláusula IN.

Por ejemplo, la siguiente consulta realiza una búsqueda de rango con un índice en el columna 'id':

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

Precauciones y advertencias

Si bien este enfoque permite consultas indexadas eficientes, es crucial considere las siguientes precauciones:

  • Ataques de inyección SQL: El uso de datos proporcionados por el usuario en procedimientos almacenados puede abrir vías para ataques de inyección SQL. Una desinfección adecuada es esencial para evitar la ejecución de código malicioso.
  • Tablescans: Si la columna utilizada para la búsqueda de rango no está indexada o tiene valores no nulos, puede resultar en un temido escaneo de tabla , lo cual es muy ineficiente para grandes conjuntos de datos.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3