Indexes

Index is a special table that makes use of data sortability to allow faster data access.

Indexes can be unique and not unique. The difference is the in a unique index, rows are guaranteed to be unique.

To create an index for you model, use index or uniqueIndex pragma passing the name of the index as its value:

import norm/[model, pragmas]

type
  Person* = ref object of Model
    email* {.uniqueIndex: "Person_emails"}: string
    firstName* {.index: "Person_names".}: string
    lastName* {.index: "Person_names".}: string

With this type definition, we'll have two indexes, one unique, one non-unique.

The indexes are created together with the tables:

let dbConn* = open(":memory:", "", "", "")

dbConn.createTables(Person())

echo()
CREATE TABLE IF NOT EXISTS "Person"(email TEXT NOT NULL, firstName TEXT NOT NULL, lastName TEXT NOT NULL, id INTEGER NOT NULL PRIMARY KEY)
CREATE INDEX IF NOT EXISTS Person_names ON "Person"(firstName, lastName);
CREATE UNIQUE INDEX IF NOT EXISTS Person_emails ON "Person"(email);