You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

40 lines
1.6 KiB

11 months ago
Indexes
=======
* An index is a data structure (usually a B-tree) for fast column lookups.
* You don't need to (and probably shouldn't) put an index on every column, but if for example a column is used in the WHERE clause of an SQL statement, you should consider adding an index to that column.
* If a table is not indexed, queries may go slow because the database may have to do a full table scan (i.e. linear search).
CREATE TABLE RandomData(
ID INTEGER PRIMARY KEY,
Num FLOAT NOT NULL
);
INSERT INTO RandomData(Num) VALUES (RANDOM());
INSERT INTO RandomData(Num) VALUES (RANDOM());
INSERT INTO RandomData(Num) VALUES (RANDOM());
INSERT INTO RandomData(Num) VALUES (RANDOM());
INSERT INTO RandomData(Num) VALUES (RANDOM());
INSERT INTO RandomData(Num) VALUES (RANDOM());
INSERT INTO RandomData(Num) VALUES (RANDOM());
SELECT * FROM RandomData;
INSERT INTO RandomData(Num) SELECT a.Num/b.Num AS Num FROM RandomData AS a JOIN RandomData AS b ON a.ID != b.ID;
INSERT INTO RandomData(Num) SELECT a.Num/b.Num AS Num FROM RandomData AS a JOIN RandomData AS b ON a.ID != b.ID;
INSERT INTO RandomData(Num) SELECT a.Num/b.Num AS Num FROM RandomData AS a JOIN RandomData AS b ON a.ID != b.ID;
SELECT COUNT(*) FROM RandomData;
SELECT * FROM RandomData WHERE ID=1234567; /* SQLite automatically puts an index on PRIMARY KEY and UNIQUE columns */
SELECT * FROM RandomData WHERE Num>=.998 AND Num<=.999; /* Not indexed; it takes a second. */
CREATE INDEX Idx_RandomData_Num ON RandomData(Num); /* Naming convention for an index: Idx_TableName_ColumnName; */
SELECT * FROM RandomData WHERE Num>=.998 AND Num<=.999;
DROP INDEX Idx_RandomData_Num;
SELECT * FROM RandomData LIMIT 10;