Loading

十:索引+慢查询

索引

对于数据库而言读写是9:1开,读多写少,读的过程就是IO,数据库需要从硬盘中获取数据,然后发送给客户端。

IO是瓶颈,总不能从文件的第一行开始读一直读到最后一行吧,运气好第一行就找到了想要的数据,运气不好最后一行才找到。

因此有了索引可以快速的定位数据,也就是前面desc 表名时看到的key字段

primary key unique这两个除了加速查询,还有约束的作用

而index key只有加速查询的作用

索引的本质是一个数据结构,类似书的目录,那么查找时先找目录在230页,直接翻到230页就可以了。

索引也是占硬盘空间的,索引相当于书的目录是用来读取数据的,一旦书写好了,此时进行写数据,那么目录是要变动的,根据新加的数据,重新生成目录

索引加速了查,拖慢了写

但是写相对读来说是很少的,多数瓶颈都是慢查询。

索引的本质就是不断的缩小查询范围,来降低IO次数提高查询速度。

磁盘

转速越快,定位数据的时间越短,7200转/min,每秒转120次,转一圈需要1/120秒,转半圈1/120/2=4.17ms,转半圈大约4ms

机械硬盘查找数据有两个延迟时间,一个叫平局寻道时间,受限于目前的物理水平,大约5ms时间,即便是找到数据的磁道,还要转圈转到那个点,才能拿到数据,取了一个平均值转半圈的时间,

定位数据的时间=平均寻道时间+转半圈的时间(平均延迟时间),找到数据之后,接下来就会很快了。

而cpu在一次io过程中可以执行450万条指令。

索引数据结构

是平衡二叉树,由B树演变而来,是B+树

innodb的数据和索引存放在一个文件中,默认就是按照索引的树形结构去存放数据

聚集索引(主键)的叶子节点放着整条数据,只能优化以主键为查询条件的查询

辅助索引,主键之外的unique和index,叶子节点存放的是对应的主键字段的值。

 

 

posted @ 2019-11-29 22:39  浅忆尘  阅读(150)  评论(0编辑  收藏  举报