一个表只能有一个主键, 一个表只能有一个「聚集索引」
索引类型
主键索引:加速查找,不能为空,不能重复:
唯一索引(unique):加速查找,不能重复,可以 为空,只能有一个
普通索引:加速查找
设计索引原则:
1、适合的索引出现在where子句中,或者连接子句指定的列。表进行关联的时候。
2、表的数据本身基数不大的情况下,没必要建立索引。因为我们在给表的字段建立索引的时候,会在数据库中重新开辟一块空间来维护索引表,反而占用空间。
3、不要建立过度索引,索引需要额外的磁盘空间,并降低读写操作性能,在修改表内容的时候,索引会进行更新甚至重构,索引列越多,这个时间越长,所以只保持需要的索引是有利查询的
4、定义有外键的数据列一定要建立索引
5、更新频繁的字段不要建立索引
6、区分度很低(重复值较多)的字段不要建立索引,比如字段性别,只要男女的值。最好别建立索引。
7、对于定义为text、image、bit的数据类型的列不要建立索引
如果没有索引的话,通常就是遍历整张表
聚集索引:通过主键来找到符合条件的值
非聚集索引:通过条件找到数据,然后通过聚集索引来找到表中的主键,之后在返回数据
覆盖索引:查询的的值就是索引,当我们不再使用select * 来进行查询的时候,查询的字段就包含在索引中,那么就表示sql走完之后就不再回表了。所需要的字段就在当前索引的叶子节点上存在,可以直接作为结果返回。
每次给字段建一个新索引, 字段中的数据就会被复制一份出来, 用于生成索引。 因此, 给表添加索引,会增加表的体积, 占用磁盘存储空间。
非聚集索引和聚集索引的区别在于, 通过聚集索引可以查到需要查找的数据, 而通过非聚集索引可以查到记录对应的主键值 , 再使用主键的值通过聚集索引查找到需要的数据。
https://zhuanlan.zhihu.com/p/23624390
https://pan.baidu.com/s/15PqQZbuzKrb2rGRjhWhz6A?pwd=dtk3