美文网首页
MySql-SQL优化-深入浅出mysql笔记

MySql-SQL优化-深入浅出mysql笔记

作者: 妖精的九尾 | 来源:发表于2016-07-11 14:59 被阅读0次

优化sql语句的一般步骤

通过show status命令了解各种sql执行频率
  • mysql> show status like 'Com_%'
  • Com_xxx表示每个xxx执行的次数,我们主要关心几个统计值。
  • Com_select执行select操作查询的次数,一次查询只累加1。
  • Com_insert执行insert操作的次数,批量操作只加1。
  • Com_update执行update操作的次数。
  • Com_delete执行delete操作的次数。
    以上对所有数据库引擎都会进行累计,下面这几个参数只针对Innodb引擎
  • Innodb_rows_read select查询返回的行数
  • Innodb_rows_inserted 执行insert操作插入的行数
  • Innodb_rows_updated 执行update操作更新的行数
  • Innodb_rows_deleted 执行delete操作删除的行数
    查看以上参数可以看出当前数据库是以插入为主还是查询为主
  • show status 'connections' 连接数据库次数
  • show status like 'uptime' 服务器工作时间
  • show status like 'show_queries' 慢查询次数

通过查询慢查询日志

  • 通过long_query_time查询慢查询时间
  • 查看慢查询日志log-slow-queries慢查询配置
  • 通过查询 show processlist查看当前mysql进行线程

通过explain分析执行效率低的语句

  • explain select count(1) from test
  • select_typeselect的查询类型
    • simple 简单表
    • primary 主见查询
    • union 第二个或者后面的查询
    • subquery 子查询中的第一个select
  • table输出结果的表
  • type 表示mysql在表中查询方式
    • all 扫描全表
    • index索引扫描
    • range索引扫描范围,常见于<,<=,>,>=,between
    • ref非唯一索引扫描
    • eq_ref唯一索引扫描
    • const,system最多只有一行匹配,查询非常快,例如主键primary key/唯一索引unique index/表中只有一条记录
    • null不用访问表或者索引,直接就能得到结果explain select 1 from test where 1
  • explain extened select count(1) from test where 1=1可以查看执行sql前,mysql做了哪些优化
  • explain partitions select id from test where id = 15可以查看分区名称

查看索引使用情况

show status like 'Hanlder_read%'
如果Hanlder_read_rnd_next值比较高索命表索引不正确

分析表

analyze table emp_date

检查表

check table emp_date

优化表

optimize table emp_date

修改数据库引擎

alter table emp_date engine = innodb

大批量导入数据优化

对于MyIsAM优化

  • 关闭MyIsAM存储引擎表的非唯一索引
alert table emp_date DISABLE KEYS; //关闭
load file infile 'xxx.txt' into table emp_date; //导入数据
alert table emp_date ENABLE KYES; //开启

对于Innodb导入大数据优化

  • 对于Innodb数据库,导入的数据按照主键顺序要比无序数据快
  • 关闭唯一性校验set unique_checks = 0,导入后再开启set unique_checks = 1
  • 关闭自动增长set autocommit=0,导入后在开启set autocommit = 1

优化Insert语句

  • 一次性执行多个insert语句,尽量使用insert into emp_date values (1,2,3),(2,2,3),(3,3,4)
  • 索引文件和数据文件建立在不同的磁盘上
  • 当重一个文件载入到一个表时,使用load date infile 'xx.txt',比使用多个insert快20倍

相关文章

  • MySql-SQL优化-深入浅出mysql笔记

    优化sql语句的一般步骤 通过show status命令了解各种sql执行频率 mysql> show statu...

  • MySQL-SQL优化

    前言 在应用开发的早期,数据量少,开发人员开发功能时更重视功能上的实现,随着生产数据的增长,很多SQL语句开始暴露...

  • MySQL-SQL优化

    前置文章:一、MySQL-Explain了解查询语句执行计划[https://www.jianshu.com/p/...

  • MySQL-SQL基础应用+Infomation_Schema介

    MySQL-SQL基础应用+Infomation_Schema介绍-Day3 1、SQL 介绍 2、SQL 作用 ...

  • mysql基本语法

    mysql-sql 语句 字符集选utf-8 我需要学增删改查, 事物, 联合 启动数据库 mysql -u ro...

  • 《深入浅出MySQL++数据库开发、优化与管理维护 第2版.pd

    《深入浅出MySQL++数据库开发、优化与管理维护 第2版.pdf》PDF高清完整版-免费下载 《深入浅出MySQ...

  • mysql-sql

    explain分析sql语句的执行情况常用分析字段:key用的索引type索引的使用类型 大致分为 从上到下排序会...

  • 《深入浅出Mysql》笔记之优化

    [toc] 一 SQL语句优化 1.1 使用 show status 命令了解sql执行频率 或者在操作系统的终端...

  • 无标题文章

    目录 笔记大型项目优化概述大型项目优化的方向代码优化数据库优化缓存优化架构优化Memcache与MySQL比较语法...

  • 详解MySQL之SQL优化(1)

    MySQL学习笔记(6) SQL优化(1) 优化SQL的一般步骤 本文所涉及案例表来自MySQL的案例库sakil...

网友评论

      本文标题:MySql-SQL优化-深入浅出mysql笔记

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