简介

数据库优化的目的

mysql SUM反馈高精度 mysql sum优化_sql

数据库优化方面

mysql SUM反馈高精度 mysql sum优化_主键_02

慢日志分析

  • SQL及索引优化

查看是否开启慢查日志

慢查日志的存储格式

mysql SUM反馈高精度 mysql sum优化_sql_03


mysql SUM反馈高精度 mysql sum优化_mysql SUM反馈高精度_04

  • saklia数据库演示

慢查日志分析工具

mysqldumpslow:MySQL官方工具

mysql SUM反馈高精度 mysql sum优化_mysql SUM反馈高精度_05

  • 使用:

查询使用方式

mysql SUM反馈高精度 mysql sum优化_mysql_06

mysql SUM反馈高精度 mysql sum优化_mysql SUM反馈高精度_07

mysql SUM反馈高精度 mysql sum优化_数据库_08

pt-query-digest

mysql SUM反馈高精度 mysql sum优化_数据库_09

  • 使用

发现分析“问题SQL”

  • 发现

Rows examine:扫描行数
Rows send:发送行数

  • 分析

优化方法

1.对Count()和Max()优化

mysql SUM反馈高精度 mysql sum优化_主键_10

  • Max():通过添加索引
  • mysql SUM反馈高精度 mysql sum优化_sql_11


  • mysql SUM反馈高精度 mysql sum优化_mysql SUM反馈高精度_12

  • Count()
  • mysql SUM反馈高精度 mysql sum优化_数据库_13


  • mysql SUM反馈高精度 mysql sum优化_数据库_14

  • 注意:count(*)包含NULL ;count(列)不含NUL

结果:

mysql SUM反馈高精度 mysql sum优化_数据库_15

2.对子查询的优化

mysql SUM反馈高精度 mysql sum优化_mysql_16

  • 例子:子查询改连接查询
    子查询


    连接查询:容易出现重复

    通过distinct关键字去重

3.对group by查询的优化

  • 优化前:用了临时表 文件排序 (不好)
  • 优化后:若有其他过滤条件 也应放在子查询中,而非查询后再过滤

4.对limit查询的优化

mysql SUM反馈高精度 mysql sum优化_sql_17

  • 优化1:用有索引的列主键进行Order by操作
  • 记录上次返回的主键,下次查询使用主键过滤。【注意:主键按顺序排序且无空缺】
    避免数据量大时扫描过多记录

索引优化

选择索引列

mysql SUM反馈高精度 mysql sum优化_mysql_18

  • 通过查看唯一值判断离散程度:唯一值数量多,离散大

消除重复/冗余索引

mysql SUM反馈高精度 mysql sum优化_sql_19


mysql SUM反馈高精度 mysql sum优化_数据库_20

  • 第三方工具

删除不使用的索引

mysql SUM反馈高精度 mysql sum优化_mysql_21

结构优化:表的拆分

选择合适数据类型

mysql SUM反馈高精度 mysql sum优化_mysql_22

  • int存储时间
    看后缀:
    FROM_UNIXTIME:INT时间戳转换成日期格式
    UNIX_TIMESTAMP:日期格斯转换成时间戳
  • bigint存储IP地址

表的范式化和反范式化

  • 范式化

mysql SUM反馈高精度 mysql sum优化_mysql_23


此表不符合第三范式:

mysql SUM反馈高精度 mysql sum优化_数据库_24


存在问题:

mysql SUM反馈高精度 mysql sum优化_主键_25

  • 范式化
  • 反范式化


表的垂直拆分

mysql SUM反馈高精度 mysql sum优化_sql_26

  • 例子

    拆分后

表的水平拆分

mysql SUM反馈高精度 mysql sum优化_数据库_27


mysql SUM反馈高精度 mysql sum优化_sql_28

  • 方法

    前后台分开:前台需要效率

配置优化

MySQL配置文件

mysql SUM反馈高精度 mysql sum优化_mysql SUM反馈高精度_29

  • 常用参数





操作系统配置优化

mysql SUM反馈高精度 mysql sum优化_mysql_30


mysql SUM反馈高精度 mysql sum优化_sql_31

第三方配置工具

mysql SUM反馈高精度 mysql sum优化_mysql_32

硬件优化

如何选择CPU

mysql SUM反馈高精度 mysql sum优化_数据库_33

磁盘IO

mysql SUM反馈高精度 mysql sum优化_sql_34


mysql SUM反馈高精度 mysql sum优化_mysql SUM反馈高精度_35