跳到主要内容

使用索引

索引是数据结构,允许数据库在不扫描整个表的情况下定位行。没有索引,查询必须检查每一行才能找到匹配项。有了索引,数据库可以直接跳转到相关行——显著减少检查的行数。

索引会加速读取操作,但会增加写入(插入、更新、删除)的开销,因为索引需要保持同步,因此应谨慎创建,仅在必要时使用。

索引的良好候选列是那些在 WHERE 子句、连接和排序中频繁使用的列。当多列用作过滤条件时,可以考虑创建复合索引,但请记住列顺序很重要——应将选择性最高(唯一值最多)的列放在前面。

分析查询性能

大多数数据库允许你检查查询的执行方式,这称为执行计划。理解执行计划有助于你识别缺失的索引,并通过比较获取相同数据的不同方式来优化查询构造。

CockroachDB

使用 EXPLAIN ANALYZE(与 PostgreSQL 语法相同):

EXPLAIN ANALYZE SELECT * FROM "user" WHERE "firstName" = 'Timber';

查找 full scan(无索引)与使用特定索引名称的 scan

了解更多

在 TypeORM 中定义索引

TypeORM 支持使用 @Index 装饰器在表列上创建索引。

import { Entity, PrimaryGeneratedColumn, Column, Index } from "typeorm"

@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number

@Column()
@Index()
email: string

@Column()
firstName: string
}

有关不同类型索引(唯一、空间、全文、并发等)的全面概述,请阅读索引指南。

正确的索引往往是你能做出的最大性能改进——首先使用上述执行计划工具分析最慢的查询,然后在最重要的位置添加索引。