数据库: 索引(Mysql)

什么是索引

  • 帮助Mysql高效获取数据的数据结构

  • 索引就是数据结构

  • 类似新华字典的索引目录,可以通过索引目录快速查到你想要的字

  • 排好序的快速查找数据

为什么要建立索引

  • 提高查询效率

    • 没有排序之前一个一个往后找
    • 通过索引进行排序之后,可以直接定义到想要的位置
  • 排好序的快速查找数据结构–>就是索引

优势

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

劣势

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

索引分类

  • 单值索引

    • 一个索引只包含间个列,一个表可以有多个单值索引
    • 一般来说, 一个表建立索引不要超过5个
  • 唯一索引

    • 索引列的值必须唯一,但允许有空值
  • 复合索引

    • 一个索引包含多个列
  • 全文索引

    • MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提高匹配的速度。

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

  • 二叉查找树
  • B-Tree
  • B+Tree

基本语法

  • 创建索引

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

    • show index from 表名
    • 示例
  • 删除索引

    • drop index[索引名称] on 表名
  • 更改索引

    • alter table tab_name add primary key(column_list)

      • 添加一个主键,索引必须是唯一索引,不能为NULL
    • alter table tab_name add unque index_name(column_list)

      • 创建的索引是唯一索引,可以为NULL
    • 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.频繁更新的字段不适合建立索引

      • 每次更新不单单更新数据,还要更新索引
    • where条件里用不到的字段不建立索引

    • 查询中排序的字段,排序的字段若通过索引去访问将大提升排序速度

      • 索引能够提高检索的速度和排序的速度
    • 查询中统计或分组的字段

      • 分组的前提是必排序
  • 不适合建立索引

    • 记录比较少

    • 经常增删改的表

      • 索引提高了查询的速度
      • 同时却会降低更新表的速度,如果对表的INSERT,UPDATE和DELETE
      • 因为建立索引后, 更新表时, MYSQL不仅要保存数据,还要保存一下索引文件
    • 数据重复的表字段,

      • 如果某个数据列包含了许多重复的内容,为它建立索引 就没有太大在的实际效果
      • 比如表中的某一个字段为国籍,性别
      • 数据的差异率和重复率不高,这种建立索引就没有太多意义
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值