数据内容对索引的影响
1 根据范式设计表
这个时候需要额外考虑的东西就是汇总表和缓存表。
2 考虑细节
这个时候,需要考虑的东西有以下这些:
- 存储引擎:一般InnoDB
- 数据类型:一般考虑的点是大小,即是否贴合真实的数据
- 索引
- 主键(虽然在范式中有相关的主键和外键的概念,但是这里的主键,说的是聚簇索引上主键的选择)
- 索引的种类,哈希 or B-Tree / 等式查询 or 范围查询
- 索引的排序,最左原则
2.1 主键的选择
主键我们一般选择id,然后自增,这对于存储来说的确很友好,但是这样仅仅是站在存储的角度,查询呢?我们很少使用主键做范围查询,相反,我们使用非聚簇索引做范围查找的更多。这就是一个矛盾点。
即使是存在上面这样的矛盾点,我还是建议使用传统的id作为主键。因为非顺序插入,对系统的影响更大。
那么在确定主键是传统的id情况下,我们需要从哪些角度综合构建二级索引呢?
- 多列索引,即最左原则
- 覆盖索引,这个可以算是一种很大程度上的优化,但是为了覆盖索引,而去覆盖索引是愚蠢的,因为要考虑在更新表期间表的锁定情况
- 前缀索引,大字符串数据类型作为索引时考虑
- 冗余和重复索引,这个能说的地方就很多了