十:索引+慢查询
索引
对于数据库而言读写是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,叶子节点存放的是对应的主键字段的值。
看十遍不如自己写一遍!巩固基础,纵横开拓!