SQL Create Index
SQL CREATE INDEX 语句
Section titled “SQL CREATE INDEX 语句”CREATE INDEX 语句用于在表中的列上创建索引。索引是特殊的查找表,数据库搜索引擎可以使用它们来加快数据检索速度。
本质上,表上的索引就像书本末尾的索引一样:它可以帮助数据库快速找到数据,而无需扫描整个表(即“全表扫描”)。
索引主要用于提升查询性能。当查询包含引用索引列的 WHERE 子句或连接条件时,数据库通常可以使用索引更快地定位相关行,而不是扫描表中的每一行(即“全表扫描”)。
用户不会直接看到或与索引交互;它们由数据库优化器使用,以提高查询执行速度。
权衡:虽然索引可以加速读操作(SELECT 查询),但它们可能会减慢数据修改操作(INSERT、UPDATE、DELETE)。这是因为每当索引列中的数据发生变化时,索引本身也必须更新。因此,重要的是对频繁用于搜索条件和连接的列战略性地创建索引,并避免对表(特别是写入负载重的表)过度索引。
SQL CREATE INDEX 语法
Section titled “SQL CREATE INDEX 语法”在单列或多列上创建基本索引。索引列中允许存在重复值:
CREATE INDEX index_name ON table_name (column1_name [ASC|DESC], column2_name [ASC|DESC], …);
SQL CREATE UNIQUE INDEX 语法
Section titled “SQL CREATE UNIQUE INDEX 语法”在表上创建唯一索引。这确保了索引列(或列组合)中的所有值都是唯一的。不允许重复值,如果尝试插入重复值,将导致错误。
CREATE UNIQUE INDEX index_name ON table_name (column_name);
注意:创建索引的具体语法在不同的数据库系统(例如 PostgreSQL、MySQL、SQL Server、Oracle)之间可能略有不同。请始终查阅您特定数据库系统的文档。一些系统还提供针对不同场景优化的不同类型的索引(例如 B 树、哈希、全文、GiST、GIN)。
CREATE INDEX 示例
Section titled “CREATE INDEX 示例”示例 1:单列索引
Section titled “示例 1:单列索引”以下 SQL 语句在 “Employees” 表的 “LastName” 列上创建一个名为 “idx_lastname” 的索引:
CREATE INDEX idx_lastname ON Employees (LastName);
这将加速以下查询:SELECT * FROM Employees WHERE LastName = 'Smith';
示例 2:复合(多列)索引
Section titled “示例 2:复合(多列)索引”如果您经常搜索列的组合,可以创建复合索引。索引定义中列的顺序很重要。
CREATE INDEX idx_fullname ON Employees (LastName, FirstName);
该索引可以优化仅按 LastName 过滤的查询,或同时按 LastName 和 FirstName 过滤的查询(例如,WHERE LastName = 'Doe' AND FirstName = 'John')。
示例 3:唯一索引
Section titled “示例 3:唯一索引”为了确保 Users 表中的所有电子邮件地址都是唯一的,您可以创建一个唯一索引:
CREATE UNIQUE INDEX uidx_email ON Users (Email);
尝试插入或更新具有已存在的电子邮件地址的行将导致错误。
索引的最佳实践:
Section titled “索引的最佳实践:”- 索引频繁用于
WHERE子句和JOIN条件的列。 - 考虑为外键列创建索引。
- 不要过度索引。每个索引都会占用存储空间并增加写入操作的开销。
- 定期审查和维护索引。应删除未使用的索引。
- 使用特定于数据库的工具来分析查询性能,并识别缺失或低效的索引。