Índice basado en la expresión sqlite

Índice basado en la expresión sqlite
En las bases de datos SQLite o SQL, los índices se utilizan para hacer referencia a algunas columnas de una tabla. Estos índices pueden estar compuestos por una o más columnas y pueden ser únicos. Junto con eso, podemos crear índices en diferentes expresiones que contienen diferentes columnas de cualquier tabla. Estas expresiones podrían definirse en la cláusula de condición Where de la instrucción seleccionada. Por lo tanto, decidimos explicar el uso de expresiones para crear índices y cómo afectan los resultados.

Comencemos con este artículo abriendo la terminal de shell de Ubuntu 20.04 rápidamente. Use la tecla de acceso directo "Ctrl+Alt+T" para hacerlo. Después del lanzamiento exitoso de la terminal de shell, debe actualizar su sistema Linux mediante el uso de los comandos de actualización y actualización con la ayuda de un paquete APT. Después de eso, abra la base de datos SQLite utilizando la instrucción "SQLITE3". En este momento, no tenemos tablas en la base de datos hasta ahora, yo.mi. utilizando el .comando de tablas.

Para crear los índices en expresiones, necesitamos una tabla en nuestra base de datos. Creamos una nueva tabla llamada "Detalle" en nuestra base de datos que contiene un total de 3 columnas de tipo entero, i.mi. Identificación, venta minorista y venta. La mesa está vacía en este momento, yo.mi. Según el comando seleccionar.

Crear detalle de la tabla (ID int primario no nulo, minorista int, venta int);
Seleccionar * de detalle;

Tenemos que agregar algunos registros en la tabla de detalles para que podamos crear los índices en las columnas después de eso. Por lo tanto, utilizamos la instrucción de inserción con la palabra clave en el nombre de la tabla "Detalle" y sus nombres de columna "ID, Venta, Venta". Los nombres de la columna son seguidos por los valores de las palabras clave y los registros que se insertarán en las columnas. Insertamos un total de 10 registros dentro de tres columnas de esta tabla; Cada uno es único como se muestra:

Insertar en detalles (ID, minorista, venta) valores (1, 340, 400);
Insertar en detalles (ID, minorista, venta) valores (2, 380, 420);
Insertar en detalles (ID, venta minorista, venta) valores (3, 205, 230);
Insertar en detalles (ID, venta minorista, venta) valores (4, 98, 110);
Insertar en detalles (ID, venta minorista, venta) valores (5, 311, 340);
Insertar en detalles (ID, minorista, venta) valores (6, 100, 120);
Insertar en detalles (ID, venta minorista, venta) valores (7, 512, 540);
Insertar en detalles (ID, venta minorista, venta) valores (8, 634, 670);
Insertar en detalles (ID, venta minorista, venta) valores (9, 54, 67);
Insertar en detalles (ID, venta minorista, venta) valores (10, 934, 990);

Después de usar la instrucción Seleccionar con el "*" para mostrar todos los registros de columna de la tabla de detalles, mostramos los 10 registros recién insertados en la tabla.

Seleccionar * de detalle;

Antes de crear un índice en las expresiones, echamos un vistazo a la consulta simple para obtener los registros con el uso de expresiones. Además, utilizamos el orden por opción dentro de la consulta para organizar los resultados de acuerdo con el orden descendente de una longitud de una columna minorista. Hasta ahora se muestran un total de 8 registros en nuestra pantalla.

Seleccione * de detalle donde longitud (minorista)> 2 pedido por longitud (minorista) DESC;

Utilizamos la misma consulta dentro de la instrucción del planificador de consultas SQLite para ver cómo funciona el SQLite para ejecutar esta consulta. Descubrimos que tiene que escanear toda la tabla "detalle" utilizando el árbol B temporal (árbol equilibrado) en el orden por cláusula.

Explique el plan de consulta seleccionar * de detalle donde longitud (minorista)> 2 pedido por longitud (minorista) descremo;

Creemos un índice en la misma expresión "longitud" de expresión en la columna minorista de un detalle de tabla. Utilizamos la instrucción Crear índice para crear el índice "index_retail".

Crear índice index_etail en detalle (longitud (minorista));

Después de crear el índice en la tabla de detalles, utilizamos el planificador de consultas para ver la estructura de trabajo de la consulta. Muestra que la consulta ha estado trabajando en el índice basado en la expresión para obtener los resultados requeridos en lugar de buscar toda la tabla.

Explique el plan de consulta seleccionar * de detalle donde longitud (minorista)> 2 pedido por longitud (minorista) descremo;

Después de usar la instrucción Seleccionar sobre la misma expresión para obtener los registros, los datos ahora se muestran en el orden descendente de la longitud de la columna minorista.

Creemos otra consulta seleccionada con una expresión. Esta vez, la expresión de la clase donde solo mostrará los registros donde la suma de la columna minorista y de venta es mayor de 700.

Seleccione * de detalles donde minorista+venta> 700;

Utilizamos la instrucción seleccionada anterior junto con las columnas individuales y la expresión "Retail+Sale> 700" que contiene, en la instrucción del planificador de consultas. El resultado del planificador de consultas muestra que la base de datos SQLite tiene que buscar en toda la tabla de detalles para obtener los resultados requeridos con esta expresión bastante ineficiente.

Explique el plan de consultas Select ID, minorista, venta, venta minorista+venta de detalles donde minorista+venta> 700;

Creemos un nuevo índice en la expresión "minorista+venta" que se utiliza en las instrucciones selectas anteriores. Por lo tanto, utilizamos la instrucción Crear índice para generar un nuevo índice "index_detail" en la expresión "minorista+venta" de una tabla de detalles. El índice recién hecho "index_detail" se puede ver dentro de la lista de índices según el ".Detalles de índices ”Instrucción.

Crear índice index_detail en detalle (minorista+venta);

Ahora, probemos la instrucción del planificador de consultas para la misma instrucción selecta que contiene las expresiones minorista+venta> 700 dentro de ella que se utiliza en la cláusula WHERE de la instrucción seleccionada. Después de usar el planificador de consultas, descubrimos que el plan SQLite solo buscará las entradas específicas de un detalle de tabla según el índice "index_detail" que contiene una expresión.

Explique el plan de consultas Select ID, minorista, venta, venta minorista+venta de detalles donde minorista+venta> 700;

Modificemos la expresión intercambiando los nombres de las columnas entre sí sin cambiar su conocimiento. Siempre que use la misma instrucción seleccionada con el pequeño cambio en su expresión, yo.mi. "Sale+Retail> 700", muestra los mismos 5 resultados ya que la lógica es correcta y lo mismo se usa en las instrucciones selectas anteriores.

Seleccione * de detalles donde venta+minorista> 700;

Después de usar la instrucción SELECT modificada previamente en la instrucción del planificador de consultas, descubrimos que la base de datos SQLite debe buscar en toda la tabla "detalle" para esta consulta basada en la expresión. Esto se debe a que no hemos creado un índice para la expresión recién modificada "Sale+Retail> 700" en la consulta selecta.

Explique el plan de consultas Select ID, minorista, venta, venta+minorista desde detalles donde venta+minorista> 700;

Conclusión

Este artículo se trata de crear un índice en diferentes expresiones. Intentamos utilizar la instrucción del planificador de consultas para explicar la diferencia entre usar una expresión simple dentro de una instrucción seleccionada sin ningún índice y el uso de una expresión dentro de una instrucción seleccionada basada en un índice.