Indexes

CREATE INDEX on city.

CREATE INDEX speeds lookups. SQLite still returns the same rows.

Goal

Index city, then select Nairobi.

DROP TABLE IF EXISTS sales;
CREATE TABLE sales (
  city TEXT,
  units INTEGER,
  shillings INTEGER
);
INSERT INTO sales VALUES
  ('Nairobi', 12, 480),
  ('Mombasa', 8, 320),
  ('Kisumu', 5, 200);
CREATE INDEX IF NOT EXISTS idx_sales_city ON sales(city);
SELECT city, units FROM sales WHERE city = 'Nairobi';
DROP TABLE IF EXISTS sales;
CREATE TABLE sales (
  city TEXT,
  units INTEGER,
  shillings INTEGER
);
INSERT INTO sales VALUES
  ('Nairobi', 12, 480),
  ('Mombasa', 8, 320),
  ('Kisumu', 5, 200);
CREATE INDEX IF NOT EXISTS idx_sales_units ON sales(units);
SELECT city FROM sales WHERE units >= 8;
DROP TABLE IF EXISTS sales;
CREATE TABLE sales (
  city TEXT,
  units INTEGER,
  shillings INTEGER
);
INSERT INTO sales VALUES
  ('Nairobi', 12, 480),
  ('Mombasa', 8, 320),
  ('Kisumu', 5, 200);
EXPLAIN QUERY PLAN SELECT * FROM sales WHERE city = 'Kisumu';
DROP TABLE IF EXISTS sales;
CREATE TABLE sales (
  city TEXT,
  units INTEGER,
  shillings INTEGER
);
INSERT INTO sales VALUES
  ('Nairobi', 12, 480),
  ('Mombasa', 8, 320),
  ('Kisumu', 5, 200);
CREATE INDEX IF NOT EXISTS idx_sales_city ON sales(city);
SELECT COUNT(*) AS n FROM sales;