MySQL入门——性能优化(索引篇)

性能优化(索引篇)

数据库性能查询语句(了解即可)

> show status like 'value' ; // 查询数据库的性能,value可以是如下值

Connections:连接mysql服务器的次数
uptime:服务器上线时间
Slow_queries:慢查询次数
Com_select:查询操作的次数
Com_insert:插入操作的次数
Com_delete:删除操作的次数

sql分析语句:explain和describe

> explain select * from tb_name;

其展现的结果中
possible_keys列:指定了为了提高查找速度,在mysql中可以使用的索引
key列:指定实际使用的键

普通查询算法包括

顺序查找算法:逐个查找,效率很低。
二分法查找算法:从中间开始查,不断的把数据分成两部分,直到找到目标数据。数据需排序。
二叉树查找算法:从根节点开始,向子节点叶查找。
哈希查找算法:将数据通过哈希函数创建成哈希表,将查询的值也通过哈希函数生成相应的值,再到哈希表里去查。(个人推测很可能数据变成哈希值后,检索速率很提升很高吧)。

sql在执行查询时,如果查询条件指定了索引字段,那么将会按照这个索引字段的值,去查数据库相应表维护的索引数据,由此索引数据,再去查出目标数据

初学者不要忘了索引的意义,索引数据与目标数据是关联的,就像是新华字典一样,索引数据是目录,目标数据则是内容(目录也是数据,也要占存储空间,这也说明了有些索引字段建多了,空间反倒会占的多)

MySQL采用B+Tree数据结构作为存储索引的结构,B+Tree是二叉树的一种衍生。
B+Tree中每个树叉叫做节点,最末端的树梢叫做叶子节点。节点上存的都是索引值,叶子节点则会根据InnoDB与MyISAM存储引擎的不同而存储不同的数据类型。

MyISAM存储引擎下,索引分为主索引和辅助索引
主索引指主键或唯一标识生成的索引,主索引的叶子节点下存的是目标数据的地址
辅索引指其他列(字段)构建的索引,辅索引的叶子节点下存的也是目标数据地址

InnoDb存储引擎下,索引分为主索引和二级索引(也有叫聚集索引和非聚集索引的)
聚集索引指主键或唯一标识生成的索引,其的叶子节点下直接存储目标数据
非聚集索引指其他列构建的索引,其叶子节点下存的是主索引的索引值,再以这个主索引值去找出目标数据。(也就是说在 这个非聚集索引数据区获得对应的主索引值,再拿着这个主索引值去主索引数据区获得对应的目标数据)
在这里插入图片描述通过这种索引值来找目标数据,明显要比普通的顺序逐个查找速度快的多。
但要注意,sql语句中有几种情况是应用不到这种索引查询的,尽管有索引字段的参与,他们使用的仍是普通的顺序查询算法。我们可以用 explain来查看sql语句中到底有没有应用到索引

  1. like模糊查询时,字符串首字符为百分号[%]时,索引不会被使用,如果不是第一位置,索引会被正常使用。
  2. 使用or关键字时,只有两侧字段都是索引字段才会应用索引查询。

初学者要注意,应用explain是可以查看sql是否有应用索引查询的,无需死记硬背那种情况不能应用索引。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

缔曦_deacy

码字不易,请多支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值