1、数据库索引:索引是一种用于快速查询和检索数据的数据结构。
索引优点:使用索引加快数据的检索速度;索引保证数据库每一行数据唯一
索引缺点:(时间上)创建索引和维护索引需要耗费许多时间,对数据进行增删改的时候,索引也需要动态修改,降低SQL执行效率;(空间上)索引需要使用物理文件存储,耗费空间。
2、聚簇索引:索引结构和数据一起存放的索引。InnoDB中主键索引属于聚簇索引。对于InnoDB引擎表来说,该表的索引(实现是B+树)每个非叶子节点存储索引,叶子节点存储索引和索引对应的数据。
聚簇索引优点:查询速度快;对排序查找和范围查找优化
缺点:依赖于有序的数据;更新代价大
3、非聚簇索引:索引结构和数据分开存放的索引。二级索引属于非聚簇索引。MySQL的MyISAM引擎,主键和非主键使用的都是非聚簇索引。
非聚簇索引优点:由于叶子节点不存放数据,更新代价小。
缺点:依赖于有序数据;可能会二次查询,找到索引的指针和主键后再到数据文件或表中查询。
4、正确的使用索引建议:
选择合适的字段创建索引 例如:不为NULL的字段、被频繁查询的字段、被作为条件查询的字段、频繁需要排序的字段、被经常频繁用于连接的字段
被频繁更新的字段慎重建立索引:维护索引的成本过大。
限制每张表上的索引数量:MySQL优化器优化查询时如果评估到很多个索引都可以用于查询时,会增加优化器生成执行计划的时间,降低了查询性能。
尽可能建立联合索引而不是单列索引:索引占用磁盘空间,多个字段放在一个索引上可以节省磁盘空间,提升操作数据的效率。
避免创建冗余索引:索引功能相同,能够命中索引(a,b)就一定能命中索引(a)。大多数情况下,尽量扩展已有的索引不创建新索引。
字符串类型的字段使用前缀索引代替普通索引:前缀索引仅限于字符串类型,相比普通索引占用更小的空间。