zoukankan      html  css  js  c++  java
  • 十:索引+慢查询

    索引

    对于数据库而言读写是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,叶子节点存放的是对应的主键字段的值。

    看十遍不如自己写一遍!巩固基础,纵横开拓!
  • 相关阅读:
    Docker
    Docker
    log4j日志类的使用
    &times被转义成x的解决方法
    java通用的jdbc数据库操作类
    java一个调用webapi的工具类
    Java 开发杂记
    J2EE名词解释
    C# 进程之间的通讯
    如何捕获全局异常
  • 原文地址:https://www.cnblogs.com/gyxpy/p/11960724.html
Copyright © 2011-2022 走看看