• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > 关于MySQL 索引详解

关于MySQL 索引详解

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了mysql,索引等相关知识,希望本文的分享对您有所帮助
mysql的索引是通过B+tree的方式的。B+tree是平衡二叉树的变种,所以查询的速度是非常快的。

索引主要分为聚集索引和辅助索引:

聚集索引:mysql中的数据是通过主键的聚集索引储存的,叶子节点中存放的就是每一行的数据,所以我们通过主键进行查询速度

如初快的原因就是主键是聚集索引,而实际使用中只会构建一颗这样的B+tree,所以这就可以解释为什么主键唯一了。

引用网上的图:

每一层的查找就是一次的IO操作,而一般B+tree层数都在2-4层 所以相当于最差的情况下,只需要做4次的IO操作。

辅助索引:辅助索引和聚集索引不同的地方在于叶子节点中储存的不是全部的数据,储存的是数据所在的位置。相当于我们使用了

辅助索引查找到数据之后,还需要在通过聚集索引的树查找详细的信息。

引用网上的图:

这个图是一个逻辑上的图,但是底层是通过叶子节点指向了所在的聚集索引,也就是说,接下面还需要在走一遍第一种图的

逻辑。

所以最终的是多个辅助索引树指向一个聚集索引树

(画的真tm丑)

关于什么时候应该创索引

因为这是一棵树,通过二分查找的方式来进行检索,所以适用在作为where后面的条件时,并且这个值是很大范围内的,适合创建索引。对于那些范围很小的的(is_delete,sex等等枚举)是不适合的。

对于具体的情况,我们可以通过show index来进行分析:

show index from company_related_person

结果:

然后通过cardinality计算

select 105/(select count(*) from company_related_person) from DUAL

这里得到的结果是0.913(这个数值和储存量有关,最好有一定的数据量) 这个数值越接近1 索引的效率就越高,如果求出的值非常小,建议不要创建索引

我们可以同时可以通过explain查看索引的使用情况

EXPLAIN select * from company_related_person where company_id='2'

输出

key表示的就是当前使用的索引列。最后的extra表示的就是使用何种方式,这里是 Using index 表示的就是使用了索引,如果Using filesort 表示的就是直接读磁盘了

对于那些查询慢的sql复杂语句,可以通过这种方式进行分析。

SQL性能优化的目标:至少要达到 range 级别,要求是ref级别,如果可以是consts最好。

1)consts 单表中最多只有一个匹配行(主键或者唯一索引),在优化阶段即可读取到数据。

2)ref 指的是使用普通的索引(normal index)。

3)range 对索引进行范围检索

4) index 表示的是直接去磁盘中读取

从上面的那种图也可以看到我们使用的是ref

关于index和key的区别:

在我们创建索引的时候,经常会有这个疑问,index和key有什么区别?。Key即键值,是关系模型理论中的一部份,比如有主键(Primary Key),外键(Foreign Key)等,用于数据完整性检否与唯一性约束等。而Index则处于实现层面,比如可以对表个的任意列建立索引,那么当建立索引的列处于SQL语句中的Where条件中时,就可以得到快速的数据定位,从而快速检索。至于Unique Index,则只是属于Index中的一种而已,建立了Unique Index表示此列数据不可重复

以上就是关于MySQL 索引详解的详细内容,更多请关注微课江湖其它相关文章!

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 分享下mysql各个主要版本之间的差异
  • MySQL essential版本和普通版本有什么区别?
  • redhat 5.4下安装MYSQL全过程
  • 如何用SQL命令查看Mysql数据库大小
  • 解析mysql中如何获得数据库的大小
  • 解析mysql修改为utf8后仍然有乱码的问题
  • 5个常用的MySQL数据库管理工具详细介绍
  • 解析在MySQL里创建外键时ERROR 1005的解决办法
  • 解析远程连接管理其他机器上的MYSQL数据库
  • mysql 精简过程(删除一些文件)

相关文章

  • 2018-12-05 MySQL安装教程图文详解
  • 2018-12-05MySQL存储引擎是什么?(详解)
  • 2017-05-11浅析mysql 共享表空间与独享表空间以及他们之间的转化
  • 2018-12-05浅谈MySQL漂流记(六)
  • 2017-05-11基于mysql 5.5 设置字符集问题的详解
  • 2018-12-05MySQL常用的日期时间函数
  • 2017-05-11MySQL中的RAND()函数使用详解
  • 2018-12-05SQL Server全文索引服务
  • 2018-12-05Mysql优化之深入了解存储引擎,进行索引优化
  • 2017-05-11mysql不重启的情况下修改参数变量

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • mysql中无限极分类的代码实现
    • 基于mysqldump搭建gtid主从
    • MySQL高级十四——表的优化
    • 关于SQL Server的最新更新
    • 关于网络负载平衡的详细介绍
    • SQL数据类型详解
    • Mysql建表与索引使用规范详解
    • 详细介绍mysql针对单张表的备份与还原的示例代码
    • Mysql系列(七)存储过程
    • mySQL中LEN()与DATALENGTH()的区别

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有