美文网首页
daily -- mysql 索引基础

daily -- mysql 索引基础

作者: JackSpeed | 来源:发表于2021-04-06 10:26 被阅读0次

MySQL索引

索引是帮助MySQL高效获取数据的一种数据结构。在数据库中,数据库系统维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法(B+树),这种数据结构就是索引(排好序的快速查找数据结构)。

一般情况下,索引本身占用内存也比较大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上。
索引会影响where后面的语句和order by后的语句执行。

索引优点
  1. 提搞数据查询效率,降低数据库IO成本。类似图书馆图书建立索引
  2. 通过索引对数据进行排序,降低数据排序成本,降低CPU消耗。
索引缺点
  1. 索引本质上也是一张表,该表存储了主键与索引字段,并指向实体表的对应记录,所以索引也会占用磁盘空间。
  2. 虽然索引能够提高查询效率,但是索引会降低表的更新效率,比如对于insert、update、delete。因为更新表是,MySQL不仅要存储数据,而且还要保存一次索引文件,保存每次更新添加了索引的字段,会因为更新所带来的键值变化后的索引信息。

MySQL索引分类

类型
  1. 单值索引
    一个索引值包含单个列,一个表可以包含多个单值索引
  2. 唯一索引
    索引列的值必须是唯一的,可以为空
  3. 符合索引
    索引包含多个列
基本语法
#新增
create  index [index name]   on  [table name]( [column name] (len));
alter   [table name] add index [index name] on ([column name]);
#删除
drop index  [index name] on [table name];
#查看
show index from [table name];
#使用alter命令
alter table [table name] add primary key([columnname]);#新增主键索引,唯一且不能为空
alter table [table name] add unique [index name]([column name]);#新增唯一索引,唯一索引的值可以为空
alter table [table name] add [index name]([column name]);#新增普通索引,单列索引和复合索引
alter table [table name] add fulltext  [index name]([column names]);#新增全文索引

索引结构

mysql索引结构包含:BTree索引、Hash索引、full-text全文索引、R-Tree索引;mysql唯一、主键、普通索引使用的索引结构:BTree

BTree 索引原理
初始化介绍
建索引的场景
适合建立索引场景
  1. 主键自动创建唯一索引
  2. 频繁作为查询条件的字段应创建索引
  3. 查询中与其他表关联的字段(外键关系)应建立索引
  4. 频繁更新的字段不适合创建索引(每次更新不仅仅是更新数据本身而且会更新索引记录表)
  5. where 条件里用不到的字段不建立索引
  6. 单值/符合索引选择的问题,在高并发场景下通常建立复合索引
  7. 查询中排序的字段可建立索引(排序字段如果通过索引去访问将会提升排序速度)
  8. 查询中统计或者分组字段可建立索引
不适合建立索引的场景
  1. 表记录太少
  2. 经常进行增删改的表(增删改除了更新数据本身还会更新索引文件)
  3. 数据平均分布且重复的表字段不适合建索引,因此应该只为最经常查询和最经常排序的数据列建立索引;如果某个数据列包含许多重复内容,为它建立索引就没有太大的实际效果。(例如一个表有100万行记录,有一个字段只有0和1这两种值,且每个值的分布概率大约为50%(性别) ,那么对这个字段建索引一般不会提高查询效率)。
索引的选择性

索引的选择性是只索引列中不同值的数据与表记录行总数的比值,如果表中有十万行记录,表的索引列有九万个不同的值,那么索引的选择性就是90000/100000=0.9;当索引选择性比值越接近于1,这个索引的效率就越高,反之则越低。

相关文章

  • daily -- mysql 索引基础

    MySQL索引 索引是帮助MySQL高效获取数据的一种数据结构。在数据库中,数据库系统维护者满足特定查找算法的数据...

  • 5.2MySQL创建高性能索引考察点

    MySQL索引的基础和类型延伸:MySQL索引的创建原则延伸:MySQL索引的注意事项 索引的基础索引类似于书籍的...

  • 高性能的索引策略

    MySQL查询基础-查询执行过程 MySQL聚簇索引 MySQL覆盖索引 MySQL索引扫描排序 MySQL冗余和...

  • Mysql 基础知识(下)

    Mysql 基础知识(上) 1.4. Mysql的索引实现 1.4.1. 常见的索引 常见的索引有:普通索引、唯一...

  • 全面分析由浅入深解析Mysql索引底层原理

    一、索引基础 1、什么是索引 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结...

  • MYSQL记录

    简单描述MySQL中,索引、主键、唯一索引、联合索引的区别,对数据库的性能有什么影响? MySQL索引的基础和类型...

  • PHP面试之数据库—创建高性能索引

    真题 简单描述MySQL中,索引、主键、唯一索引、联合索引的区别,对数据库的性能有什么影响? MySQL索引的基础...

  • Mysql索引读书笔记

    ################################## 高性能Mysql第5章:索引基础 #####...

  • MySQL听讲(六)——查询

    说到查询,首先想到了的是索引。本节基于MySQL听讲(三)——索引 的基础来对查询进行展开。 mysql索引选择策...

  • mysql

    一 mysql基础 二 mysql索引 什么是索引 索引是一种数据结构,解决查询语句中where和order by...

网友评论

      本文标题:daily -- mysql 索引基础

      本文链接:https://www.haomeiwen.com/subject/fydqkltx.html