Mysql优化

作者: zlcook | 来源:发表于2017-08-14 20:36 被阅读45次
    • Mysql单进程多线程设计。
    InnoDB存储引擎中索引存储形式
    • InnoDB优点

      • 5.5以后默认引擎
      • 行级锁
      • 支持事物
      • 更好的恢复性
      • 高并发下性能更好,对多核、大内存、ssd等硬件支持好。
    • mysql的InnoDB采用的索引算法
      B+树

    image.png

    B+树索引

    • 聚集索引
      一个表只有一个聚集索引,根据主键生成(如果设置主键),图中红色
      一个叶子节点存放整行记录

    • 二级索引(辅助索引)
      非聚集索引都是二级索引,如果非主键查询,会先根据二级索引找到主键,在根据聚集索引中查找数据。图中蓝色。
      一个叶子节点存放主键

    • 没有索引就会进行全表扫描。

    • 索引是一切快速查询的前提

    • 索引可以提供效率,但也会降低插入和更新的速度并占有磁盘空间。

    • 单张表索引数量不要超过5个,

    • 单个索引中的字段数不超过5个

    索引操作

    Sql优化案例

    案例一

    • 在sql查询中=号左边使用表达式,会放弃索引


      image.png
    • 查看语句执行计划
      explain extended sql语句

    image.png

    * 第一个语句扫描了6行,using index,使用了索引,第二个扫描了70多万行,没有使用索引。

    案例二

    • machine_vc字段是varchar类型,查询时如果使用数字,mysql会将两边转换成浮点数进行比较(隐式转换),会放弃索引。
    • 为什么会放弃?machine_vc是字符串,假如“1142”、“1142@d”、“1142.00”是machinde_vc的值,因为不能确定是否只有“1142”能满足等于1142的要求,所以它会扫描全表,逐个比较,这时就不会使用B+树索引。
    image.png 执行计划
    • 第一个语句查询6行,第二个查询70多万行。

    案例三

    image.png
    • 查询偏移量80000的id,然后再借助索引查询
    image.png

    优化

    • image.png
    • image.png
    • int 类型占用4个字节,而char(15)占用15个字节。

    image.png
    • in中不要使用子查询。

    • 不同字段OR改为Union,因为此时Union会使用不同字段的索引去查询。

    • Count(*)会进行全表扫描。

    • 复杂运算移动程序端CPU。

    image.png image.png image.png

    相关文章

      网友评论

        本文标题:Mysql优化

        本文链接:https://www.haomeiwen.com/subject/zygurxtx.html