索引可以加快数据检索速度。如果没有索引,数据库需要扫描每一行来查找匹配的记录。有了索引,它可以直接跳转到相关的行。索引是一种独立的数据结构,它将值映射到位置。书籍索引的工作原理也是如此。你查找一个词条,然后找到它的页码。你不需要翻阅每一页来查找。数据库也是如此。
索引是有代价的。它们会占用空间。由于索引也需要更新,因此会降低插入、更新和删除操作的速度。每次写入操作的成本都会增加。其好处是读取速度更快。对于读取密集型工作负载,索引至关重要。对于写入密集型工作负载,过多的索引会损害性能。选择要建立索引的列需要了解查询模式。WHERE 子句、JOIN 条件和 ORDER BY 子句中使用的列是理想的选择。低基数的列(例如布尔标志)则不是好的选择,因为索引无法有效缩小搜索范围。复合索引涵盖多个列,可以处理基于多个字段进行筛选的查询。复合索引中列的顺序很重要。数据库可以使用复合索引来处理仅基于前导列的查询,但不能仅处理基于后导列的查询。索引设计是一种权衡。目标是在不增加不必要的写入速度的前提下,加快关键查询的速度。
索引类型
- B 树——大多数数据库的默认树,适用于范围查询
- 哈希——快速相等性查找,不支持范围查找
- 位图——低基数列,分析查询
- 全文搜索
- 复合索引——一个索引中包含多个列
索引是一种捷径。它牺牲写入速度和存储空间来换取读取速度。在对读取速度要求极高的场景下,应该使用索引。
Comments (3)
Leave a comment