Mysql优化

  • Mysql单进程多线程设计。
Mysql优化_第1张图片
InnoDB存储引擎中索引存储形式
  • InnoDB优点

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

image.png

B+树索引

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

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

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

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

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

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

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

索引操作

  • 查看表的索引
    show index from 表名 mysql查看表索引

Sql优化案例

案例一

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


    Mysql优化_第2张图片
    image.png
  • 查看语句执行计划
    explain extended sql语句

Mysql优化_第3张图片
image.png

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

案例二

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

案例三

Mysql优化_第6张图片
image.png
  • 查询偏移量80000的id,然后再借助索引查询
Mysql优化_第7张图片
image.png

优化

  • Mysql优化_第8张图片
    image.png
  • Mysql优化_第9张图片
    image.png
  • int 类型占用4个字节,而char(15)占用15个字节。

Mysql优化_第10张图片
image.png
  • in中不要使用子查询。

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

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

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

Mysql优化_第11张图片
image.png
Mysql优化_第12张图片
image.png
Mysql优化_第13张图片
image.png

你可能感兴趣的:(Mysql优化)