设计索引时应遵循什么规范?
约 914 字大约 3 分钟
在为数据库设计索引时,应该遵循一些基本规则和最佳实践。我们设计索引的目的:
一是提高查询效率和查询性能,二是减少不必要的资源开销和系统维护成本。我们设计索引遵循的规则都应该以这两个目的展开。
根据查询条件设计索引
- 数据库中频繁执行的查询语句,根据这些查询语句的查询字段、排序字段设计索引。
选择合适的索引列
- 选择具有高基数列且经常查询的列作为索引列,提高查询性能。
- 尽量避免在基数低的列上创建索引,这样的索引可能会导致性能下降。
使用联合索引
对于经常一起使用的列,考虑使用联合索引来覆盖多个列,以提高查询性能。
在选择联合索引的列顺序时,考虑到查询的频繁性和可选择性,将最常用的列放在最左边。
避免过度索引
- 避免在每个列上都创建索引,这样会增加存储空间的消耗,并且可能导致索引的性能下降。
- 评估每个索引的实际需求和性能影响,只创建那些有助于查询性能提升的索引。
定期优化和维护索引
- 定期检查和评估索引的使用情况和性能影响,根据需要进行索引调整和优化。
- 删除不再需要的索引,避免过度索引和不必要的资源消耗。
考虑查询性能和写入性能的平衡
- 索引可以提高查询性能,但会增加写入操作的开销。在设计索引时,要考虑查询性能和写入性能之间的平衡。
注意索引的数据类型和长度
- 对于字符串类型的列,可以考虑在索引中使用前缀索引来减少索引大小和存储空间消耗。
- 对于数值类型的列,选择合适的数据类型和长度,以减少索引的存储空间和提高查询性能。
尽量为ORDER BY 和 GROUP BY 后面的字段建立索引
- 为Oder By的字段建立索引,这样查询的时候就不需要再去做排序了,因为我们的索引在建立的时候已经排序好了。
- 而在执行GROUP BY操作时,通常会首先对GROUP BY后面的字段进行排序,然后再执行聚合操作。
- 当没有合适的索引可供ORDER BY或GROUP BY后的字段使用时,数据库系统可能需要创建临时表或进行文件排序来执行排序操作。
主建索引尽量使用自增的
- 自增主键通常是单调递增的,这种顺序性可以降低插入新行时索引的分裂成本,并减少索引的维护成本。
- 自增主键可以更有效地利用B树索引结构,因为它们保持了数据的有序性,使得索引的遍历更加高效。
- 要使用UUID作为主键使用,原因有以下两点:
- UUID作为主键会导致数据的随机分布,增加了索引的维护成本和磁盘I/O负载。
- UUID主键通常会占用更多的存储空间,因为它们需要存储更长的字符串值。