Create Indexes

This guide shows you how to create database indexes to improve query performance.

Create a Simple Index

class AddEmailIndex < CQL::Migration(5)
  def up
    schema.alter :users do
      create_index :idx_users_email, [:email]
    end
  end

  def down
    schema.alter :users do
      drop_index :idx_users_email
    end
  end
end

Create a Unique Index

class AddUniqueEmailIndex < CQL::Migration(6)
  def up
    schema.alter :users do
      create_index :idx_users_email, [:email], unique: true
    end
  end

  def down
    schema.alter :users do
      drop_index :idx_users_email
    end
  end
end

Create a Composite Index

Index multiple columns together:

Index on Foreign Keys

Always index foreign key columns:

Index for Frequently Filtered Columns

Index for Soft Deletes

Unique Composite Index

Prevent duplicate combinations:

Index Naming Convention

Use consistent naming:

When to Create Indexes

Create indexes for:

  • Primary keys (automatic)

  • Foreign keys

  • Columns used in WHERE clauses

  • Columns used in ORDER BY

  • Columns used in JOIN conditions

  • Columns with unique constraints

When NOT to Create Indexes

Avoid unnecessary indexes on:

  • Small tables (< 1000 rows)

  • Columns with low cardinality (few unique values)

  • Tables with frequent writes (indexes slow down inserts)

  • Columns rarely used in queries

Verify Index Works

Last updated

Was this helpful?