Indexes 是数据库搜索引擎用于加快数据检索的特殊查找表。简而言之, index 是指向表中数据的指针。数据库中的索引与书末尾的索引非常相似。
例如,如果你想要引用一本书中讨论某一特定主题的所有页面,你首先会参考索引,它按字母顺序列出所有主题,然后被引用到一个或多个特定的页码。
索引有助于加快 SELECT 查询和 WHERE 子句的速度,但会减慢数据输入速度,以及 UPDATE 和 INSERT 语句。可以在不影响数据的情况下创建或删除索引。
创建索引涉及使用 CREATE INDEX 语句,该语句允许你命名索引、指定表和要索引的列(一个或多个)以及指示索引是按升序还是降序。
索引也可以是唯一的,类似于 UNIQUE 约束,其中索引禁止在列或有索引列组合中重复条目。
CREATE INDEX Command
Syntax
CREATE INDEX index_name ON table_name
Single-Column Indexes
单列索引是基于仅一个表列创建的。以下是其基本语法。
Syntax
CREATE INDEX index_name
ON table_name (column_name)
Example
CREATE INDEX singlecolumnindex
ON customers (ID)
Unique Indexes
唯一索引不仅用于性能,还用于数据完整性。唯一索引不允许将任何重复值插入表中。以下是其基本语法。
Syntax
CREATE UNIQUE INDEX index_name
on table_name (column_name)
Example
CREATE UNIQUE INDEX uniqueindex
on customers (NAME)
Composite Indexes
复合索引是对表中的两个或多个列进行的索引。以下是其基本语法。
Syntax
CREATE INDEX index_name on table_name (column1, column2)
Example
CREATE INDEX compositeindex
on customers (NAME, ID)
无论创建单列索引还是复合索引,都要考虑在查询的 WHERE 子句中可能非常频繁地用作筛选条件的列。
如果只使用了一列,则应该选择单列索引。如果在 WHERE 子句中经常将两列或更多列用作筛选条件,那么复合索引将是最佳选择。
Implicit Indexes
隐式索引是对象创建时由数据库服务器自动创建的索引。对于主键约束和唯一约束会自动创建索引。
DROP INDEX Command
可以使用 MS SQL SERVER DROP 命令删除索引。删除索引时应小心,因为这可能会降低或提升性能。
Syntax
DROP INDEX tablename.index_name
When to Avoid Indexes?
尽管索引旨在提高数据库性能,但在某些情况下应避免使用它们。以下指导原则指出了在什么时候应重新考虑使用索引−
-
不应该在小表中使用索引。
-
不应为经常进行大批量更新或插入操作的表建立索引。
-
不应该在包含大量 NULL 值的列上使用索引。
-
不应该编制经常操作的列的索引。