index - como eliminar una columna en sqlite
SQLite3 ¿cómo uso índices? (2)
Los índices nunca cambian el significado de sus consultas. Lo que pueden hacer es acelerar algunas de sus consultas; cuando eso es posible, se usan automáticamente.
Un índice es útil para
buscar registros con comparaciones en la columna indexada:
SELECT * FROM Company WHERE Salary = 20000.0; SELECT * FROM Company WHERE Salary BETWEEN 40000 AND 80000;
que también incluye uniones en la columna indexada; y
clasificación de registros:
SELECT * FROM Company ORDER BY Salary
que también incluye GROUP BY y DISTINCT.
Ver la documentación para más detalles:
Planificación de consultas
El planificador de consultas SQLite
Estoy trabajando en índices SQLite3.
Aquí hay una mesa COMAPNY:
CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, ''Paul'', 32, ''California'', 20000.00 );
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, ''Allen'', 25, ''Texas'', 15000.00 );
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, ''Teddy'', 23, ''Norway'', 20000.00 );
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, ''Mark'', 25, ''Rich-Mond '', 65000.00 );
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, ''David'', 27, ''Texas'', 85000.00 );
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, ''Kim'', 22, ''South-Hall'', 45000.00 );
INSERT INTO COMPANY VALUES (7, ''James'', 24, ''Houston'', 10000.00 );
=============================================== =====
SELECT * FROM COMPANY;
Resultados:
1|Paul|32|California|20000.0
2|Allen|25|Texas|15000.0
3|Teddy|23|Norway|20000.0
4|Mark|25|Rich-Mond |65000.0
5|David|27|Texas|85000.0
6|Kim|22|South-Hall|45000.0
7|James|24|Houston|10000.0
Vamos a crear un índice salarial_index,
CREATE INDEX IF NOT EXISTS salary_index on COMPANY (SALARY);
¿Qué hace y cómo lo uso?
Esta vez hago un índice como este después de descartar el anterior:
CREATE INDEX IF NOT EXISTS salary_index on COMPANY (SALARY)
WHERE SALARY > 50000;
Después de agregar el índice, lo hice:
SELECT * FROM COMPANY;
esperando ver solo a aquellos con un salario más alto que 50000, pero vi personas más bajas que eso.
Y también traté de hacer esto:
SELECT * FROM COMPANY INDEXED BY salary_index;
Entonces obtengo un error: no hay una solución de consulta Aparentemente tengo que hacer lo siguiente: SELECCIONAR * DE LA COMPAÑÍA INDEXADA POR salario_index DONDE SALARIO> 50000; Donde la condición debe ser la misma que en el índice.
Entonces ... ¿cómo uso los índices?
Esta es la conversación que tuve con uno de mis maestros de códigos (Thanks SP):
Un índice suele ser una herramienta para el rendimiento. Si no tiene un índice para un campo, las consultas en ese campo necesitarán hacer un escaneo secuencial completo de la tabla. Esto no es un problema si la tabla es pequeña, pero si tiene decenas de miles, o filas superiores, entonces una exploración secuencial completa es simplemente demasiado lenta.
Entonces, si quiere obtener las filas cuyo salario es <50000, simplemente cree un índice en la tabla y luego emita
SELECT * FROM COMPANY WHERE SALARY < 50000
Automáticamente usará el índice correcto siempre que el campo SALARIO esté indexado
Entonces, si tenemos dos índices como
CREATE INDEX salary_index WHERE salary < 50000;
CREATE INDEX age_index WHERE age < 40;
y luego ejecutamos una consulta como
SELECT * FROM COMPANY WHERE salary < 50000 AND age < 40;
tt usa automáticamente los 2 índices anteriores para la consulta.
En la mayoría de los RDBMS, es posible usar más de un índice en una sola consulta y sí, se usan automáticamente si se aplican. Pero puede haber restricciones sobre esto y son específicos de RBDMS. Pero una mejor idea es crear un índice que contenga múltiples campos.
En una situación óptima, tendría todos los campos necesarios para la consulta en un solo índice. Por lo tanto, si desea empleados que ganan más de 50 000 $ y tienen menos de 40 años, debe definir un índice como este:
CREATE INDEX company_salary_age ON company (salary, age);
El orden de los campos importa. Este índice se puede usar en una consulta que tiene una cláusula WHERE sobre salario, o salario y edad, pero no edad sin salario . Es decir, se puede usar cualquier cantidad de campos del índice siempre que estén contiguos en el frente del índice. Es decir, en la consulta puede omitir campos del final, pero no al principio o al medio .