索引
概念:
对数据库表中的一列或者多列的值进行排序的一种结构,旨在提高数据的查询效率。
比喻:查询字典,查询“索”,若没有索引,会从整个字典中查找,若有索引,索在该序区域查找。
分类:
索引分类 | 描述 |
---|---|
普通索引 | 不需要添加任何限制条件,可以创建在任何数据类型中,由字段本身的完整性约束决定。 |
唯一索引 | 使用unique参数进行设置,该值必须是唯一的。(主键是一种特殊的唯一索引) |
全文索引 | 使用fulltext参数进行设置,只能创建在char,varchar或者text类型的字段上(适用于查询数据量较大的字符串类型的字符时) |
单列索引 | 在表中单个字段上创建,只能根据该字段进行索引查询,只要保证该索引只对应一个字段即可。 |
多列索引 | 在表中多个字段上创建,可根据多个字段进行索引查询(注:只有查询条件中使用率这些字段中的第一个字段时,索引才会被使用) |
空间索引(用的比较少) | 使用spatial 参数进行设置,只能建立在空间数据类型上。(geometry、point、linestring和polygon等) |
设计原则:
1. 选择唯一索引
唯一索引的值是唯一的,可快速通过该索引来确定某条记录
eg:人 -> 身份证号 学生 --> 学号
2. 为经常需要排序、分组和联合操作的字段建立索引
频繁使用order by、group by、distinct 和 union 等来操作字段时
3. 经常作为查询条件的字段建立索引
4. 限制索引的数目
索引的数目并不是越多越好,每个索引都要占用磁盘空间,修改表时,对索引的重构和更新比较麻烦
5. 尽量使用数据量少的索引
varchar(10) varchar(255)
6. 尽量使用前缀来索引
检索值很长时,比如text、blog,只检索前面的若干个字符