mysql的索引

什么是索引

  1. 帮助Mysql高效获取数据的数据结构
  2. 索引就是数据结构
  3. 类似新华字典的索引目录,可以通过索引目录快速查到你想要的字
  4. 排好序的快速查找数据

为什么要建立索引

  1. 提高查询效率 没有排序之前一个一个往后找 通过索引进行排序之后,可以直接定义到想要的位置
  2. 排好序的快速查找数据结构-->就是索引

优势

  1. 索引类似大学图书馆建立的书目索引,提高数据检索的效率,降低数据库的IO成本
  2. 通过索引对数据项进行排序,降低数据排序成本,降低了CPU的消耗

劣势

  1. 一般来说, 索引本身也很大, 索引往往以文件的形式存储到磁盘上
  2. 索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录.所以索3引也是要占磁盘空间的
  3. 虽然索引提高了查询速度,但是会降低更新表的速度.
  4. 因为更新表时, MYSQL不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,
  5. 会调整因为更新所带来的键值变化后索引的信息

索引分类

  1. 单值索引
    一个索引只包含间个列,一个表可以有多个单值索引 一般来说, 一个表建立索引不要超过5个
  2. 唯一索引 索引列的值必须唯一,但允许有空值
  3. 复合索引 一个索引包含多个列
  4. 全文索引
    MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索, 可以利用全文索引来提高匹配的速度。

索引为什么能快速查找数据

  1. 二叉查找树
  2. B-Tree
  3. B+Tree

基本语法

创建索引

create [UNIQUE] index 索引名称 ON 表名(字段(长度))
alter 表名 add [unque] index[索引名称] on(字段(长度))

查看索引

show index from 表名

删除索引

drop index[索引名称] on 表名

更改索引

添加一个主键,索引必须是唯一索引,不能为NULL

alter table tab_name add primary key(column_list)

创建的索引是唯一索引,可以为NULL

alter table tab_name add unque index_name(column_list)

普通索引,索引值可出现多次

alter table tab_name add index index_name(column_list)

全文索引

alter table tab_name add fulltext index_name(column_list)

索引建立选择

适合建立索引

  1. 主键自动建立唯一索引
    primary
  2. 频繁作为查询条件的字段应该创建索引
    比如银行系统银行帐号,电信系统的手机号
  3. 查询中与其它表关联的字段,外键关系建立索引
    比如员工,部门外键
  4. 频繁更新的字段不适合建立索引
    每次更新不单单更新数据,还要更新索引
  5. where条件里用不到的字段不建立索引
    查询中排序的字段,排序的字段若通过索引去访问将大提升排序速度
    索引能够提高检索的速度和排序的速度
    查询中统计或分组的字段
    分组的前提是必排序
原文地址:https://www.cnblogs.com/joker-dj/p/12822053.html