Logotipo de Zephyrnet

Técnicas de optimización de consultas SQL

Fecha:

Técnicas de optimización de consultas SQL
Imagen del autor
 

En el nivel de principiante, solo nos enfocamos en escribir y ejecutar las consultas SQL. No nos preocupamos por cuánto tiempo lleva ejecutarse o si puede manejar millones de registros. Pero en el nivel intermedio, las personas esperan que su consulta se optimice y tome un tiempo mínimo para ejecutarse.

Es imperativo escribir una consulta optimizada en aplicaciones grandes con millones de registros, como plataformas de comercio electrónico o sistemas bancarios. Suponga que posee una empresa de comercio electrónico con más de un millón de productos y un cliente quiere buscar un producto. ¿Qué sucede si la consulta que escribió en el backend tarda más de un minuto en obtener ese producto de la base de datos? ¿Creerá que los clientes compran productos de su sitio web?

Debe comprender la importancia de la optimización de consultas SQL. En este tutorial, le mostraré algunos consejos y trucos para optimizar sus consultas SQL y hacer que se ejecuten más rápido. El requisito previo principal es que debe tener un conocimiento básico de SQL.

Para verificar si un elemento específico está presente en la tabla, use el EXIST() palabra clave en lugar de la COUNT() ejecutará la consulta de una manera más optimizada.

Usar COUNT(), la consulta debe contar todas las ocurrencias de ese elemento en particular que puede ser ineficiente cuando la base de datos es extensa. Por otro lado, EXIST() verificará solo la primera aparición de ese elemento y luego se detendrá cuando encuentre la primera aparición. Esto ahorra mucho tiempo.

Además, solo le interesa saber si un elemento en particular está presente o no. No está interesado en encontrar el número de ocurrencias. Por eso también EXIST() es mejor.

SELECT EXISTS( SELECT * FROM table WHERE myColumn = 'val' );

 

La consulta anterior devolverá 1 si al menos una fila de la tabla contiene una entrada donde una columna denominada myColumn tiene un valor igual a val. De lo contrario, volverá 0.

Ambos char y varchar los tipos de datos se utilizan para almacenar cadenas de caracteres en la tabla. Pero varchar es mucho más eficiente en memoria que char

El tipo de datos char solo puede almacenar la cadena de caracteres de longitud fija definida. Si la longitud de la cadena es menor que la longitud fija, rellenará los espacios en blanco para que su longitud sea igual a la longitud establecida. Esto desperdiciará memoria innecesariamente en el relleno. Por ejemplo,CHAR(100) tomará 100 bytes de memoria incluso si se almacena un solo carácter.

Por otro lado, el tipo de datos varchar almacena la cadena de caracteres de longitud variable que tiene una longitud inferior a la longitud máxima especificada. No rellena los espacios en blanco y solo toma la memoria igual a la longitud real de la cadena. Por ejemplo, VARCHAR(100) toma solo 1 byte de memoria cuando almacena un solo carácter.

CREATE TABLE myTable ( id INT PRIMARY KEY, charCol CHAR(10), varcharCol VARCHAR(10)
);

 

En el ejemplo anterior, una tabla myTable se crea teniendo dos columnas, charCol y varcharCol teniendo tipos de datos char y varchar respectivamente. charCol siempre ocupará 10 bytes de memoria. A diferencia de, varcharCol ocupa una memoria igual al tamaño real de la cadena de caracteres almacenada en ella.

Debemos evitar el uso de subconsultas dentro de la cláusula WHERE para optimizar una consulta SQL. Como las subconsultas pueden ser costosas y difíciles de ejecutar cuando devuelven una gran cantidad de filas.

En lugar de usar la subconsulta, puede obtener el mismo resultado usando una operación de unión o escribiendo una subconsulta correlacionada. Una subconsulta correlacionada es una subconsulta en la que la consulta interna depende de la consulta externa. Y son muy eficientes en comparación con la subconsulta no correlacionada.

A continuación se muestra un ejemplo para entender la diferencia entre los dos.

# Using a subquery
SELECT * FROM orders WHERE customer_id IN ( SELECT id FROM customers WHERE country = 'INDIA' ); # Using a join operation
SELECT orders.* FROM orders JOIN customers ON orders.customer_id = customers.id WHERE customers.country = 'INDIA';

 

En el primer ejemplo, la subconsulta primero recopila todos los ID de clientes que pertenecen a INDIA, y luego la consulta externa obtendrá todos los pedidos de los ID de clientes seleccionados. Y en el segundo ejemplo, hemos logrado el mismo resultado uniendo el customers y orders tablas y luego seleccionando solo pedidos donde los clientes pertenecen a INDIA.

De esta forma, podemos optimizar la consulta evitando el uso de subconsultas dentro de la cláusula WHERE y haciéndolas más fáciles de leer y comprender. 

Aplicando el JOIN La operación de una tabla más grande a una tabla más pequeña es una técnica común de optimización de SQL. Porque unirse de una tabla más grande a una tabla más pequeña hará que su consulta se ejecute más rápido. Si aplicamos un JOIN operación de una tabla más pequeña a una tabla más grande, nuestro motor SQL tiene que buscar filas coincidentes en una tabla más grande. Esto requiere más recursos y consume más tiempo. Pero por otro lado, si el JOIN se aplica de una tabla más grande a una tabla más pequeña, entonces el motor SQL tiene que buscar en una tabla más pequeña las filas coincidentes.

Aquí hay un ejemplo para su mejor comprensión.

# Order table is larger than the Customer table # Join from a larger table to a smaller table
SELECT * FROM Order JOIN Customer ON Customer.id = Order.id # Join from a smaller table to a larger table
SELECT * FROM Customer JOIN Order ON Customer.id = Order.id

A diferencia de la LIKE cláusula, regexp_like también se utiliza para la búsqueda de patrones. El LIKE La cláusula es un operador básico de coincidencia de patrones que solo puede realizar operaciones básicas como _ or %, que se utilizan para hacer coincidir un solo carácter o cualquier número de caracteres, respectivamente. El LIKE La cláusula debe escanear la base de datos completa para encontrar el patrón particular, que es lento para tablas grandes.

Por otra parte, regexp_like es una técnica de búsqueda de patrones más eficiente, optimizada y poderosa. Utiliza expresiones regulares más complejas para encontrar patrones específicos en una cadena de caracteres. Estas expresiones regulares son más específicas que la simple coincidencia de comodines porque le permiten buscar el patrón exacto que estamos encontrando. Debido a esto, se reduce la cantidad de datos que se deben buscar y la consulta se ejecuta más rápido.

Ten en cuenta que regexp_like puede no estar presente en todos los sistemas de gestión de bases de datos. Su sintaxis y funcionalidad pueden variar en otros sistemas.

Aquí hay un ejemplo para su mejor comprensión.

# Query using the LIKE clause
SELECT * FROM mytable WHERE ( name LIKE 'A%' OR name LIKE 'B%' ); # Query using regexp_like clause
SELECT * FROM mytable WHERE regexp_like(name, '^[AB].*');

 

Las consultas anteriores se utilizan para encontrar los elementos cuyo nombre comienza con A o B. En el primer ejemplo, LIKE se utiliza para buscar todos los nombres que comienzan con A o B. A% significa que el primer carácter es A; después de eso, cualquier número de caracteres puede estar presente. En el segundo ejemplo, regexp_like se usa Adentro ^[AB], ^ representa que el símbolo coincidirá al principio de la cadena, [AB] representa que el carácter inicial puede ser A o B, y .* representa todos los caracteres después de eso.

Usar regexp_like, la base de datos puede filtrar rápidamente las filas que no coinciden con el patrón, lo que mejora el rendimiento y reduce el uso de recursos.

En este artículo, hemos discutido varios métodos y consejos para optimizar la consulta SQL. Este artículo le brinda una comprensión clara de cómo escribir consultas SQL eficientes y la importancia de optimizarlas. Hay muchas más formas de optimizar las consultas, como preferir el uso de valores enteros en lugar de caracteres o usar Union All en lugar de Union cuando su tabla no contiene duplicados, etc.
 
 
Garg ario es un B.Tech. Estudiante de Ingeniería Eléctrica, actualmente en el último año de la carrera. Su interés radica en el campo del Desarrollo Web y el Aprendizaje Automático. Ha perseguido este interés y estoy ansioso por trabajar más en estas direcciones.
 

punto_img

Información más reciente

punto_img