什么是索引
索引是一种数据结构索引,可以帮助MySQL高效获取数据。他是一种排好序的快速查找数据结构。
一般索引本身也很大,不可能全部存储在内存当中,因此索引往往以索引文件的形式存储在磁盘上。索引如果没有特别指明,都是指B树结构组织的索引。其中聚集索引,次要索引,复合索引,前缀索引,唯一索引默认都是B+树索引。除了B+树索引之外还有哈希索引等。
索引的优势
① 类似书目索引,提高数据检索效率,降低数据库的IO成本
② 通过索引对数据排序,降低数据排序成本索引,降低CPU的消耗
索引的劣势
① 索引也是一张表,保存了主键与索引字段,并指向实体表的记录,所以索引也要占用空间。
② 索引虽然提高了查询速度,但却会降低更新表的速度,如对表进行insert, update, delete。因为更新表时,MySQL不仅要保存数据,还要保存索引文件,每次更新索引列字段,都需要调整对应的索引信息。
③ 对于大数据量的表,需要对索引进行设计。
索引的分类
① 单值索引:即一个索引只包含单个列,一个表可以有多个单列索引
② 唯一索引:索引列的值必须唯一,但允许有控制。(如,不允许重名)
③ 复合索引:一个索引包含多个列
① 添加主键—索引为唯一索引,且不能为NULL
alter table TableA add primary key(column_name);
② 添加唯一索引—索引值必须唯一(除NULL)
alter table TableA add unique iindex ndex_name(column_name);
③ 添加普通索引—索引值可以出现多次
alter table TableA add index index_name(column_name);
④ 添加全文索引
alter table TableA add fulltext index index_name(column_name);
哪些情况需要创建索引?
① 主键自动创建唯一索引
② 频繁作为查询条件的字段应该创建索引
③ 查询中与其他表关联的字段,外键关系创建索引
④ 频繁更新的字段不适合创建索引,因为每次更新不单单更新了记录还会更新索引
⑤ where条件里用不到的字段不创建索引
⑥ 单键/组合索引的选择问题,在高并发下倾向创建组合索引
⑦ 查询中排序的字段,若通过索引去访问将会大大提高排序速度
⑧ 查询中统计或者分组的字段(group by前提是必排序)
哪些情况不要创建索引?
① 表记录太少—不需要建立索引(300万以上)
② 经常增删改的表
索引提高了查询速度,但同时也会降低更新表的速度,如对表进行的Insert, update, delete。因为更新表时,MySQL不仅要保存数据,还要保存索引文件。
③ 如果数据列包含许多重复的内容,如性别,为他/她建立索引没有太大的实际效果。
———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: wxii2p22