性能优化之MySQL优化(慕课)
MySQL数据库优化
1-1MySQL优化简介
数据库优化的目的
避免出现页面访问错误
- 由于数据库连接timeout产生5XX错误
- 由于慢查询造成页面无法加载
- 由于阻塞造成数据无法提交
增加数据库的稳定性
- 很多数据库的问题都是由于低效查询引起的
优化用户体验
- 流畅页面的访问速度
- 良好的网站功能体验
可以从以下几个方面进行数据库优化
MySQL数据库优化:
1.SQL语句优化
2.有效的索引
3.数据库的表结构
4.Linux系统配置优化:打开的文件数等
5.硬件:更加适合数据库系统的cpu、更快的io:ssd等、更多的内存...
2-1数据准备
Sakila样本数据库介绍
- 下载Sakila样本数据库,下载地址http://downloads.mysql.com/docs/sakila-db.tar.gz(下载页面http://dev.mysql.com/doc/index-other.html)。
- 导入sakila-schema.sql和sakila-data.sql文件
- 首先下载mysql5.7.18 zip安装包,配置环境变量
- bin文件夹下建立my.ini
- [mysqld]
- basedir=E:\Program Files (x86)\mysql-5.7.24-winx64\mysql-5.7.24-winx64\bin
- datadir=E:\Program Files (x86)\mysql-5.7.24-winx64\mysql-5.7.24-winx64\data
- port=3306
- character-set-server=utf8
- [client]
- port=3306
- character-set=utf8
- 在mysql根目录下新建data文件夹
- 以管理员身份运行cmd命令
- 输入cd G:\Program Files\MySQL\MySQL Server 5.7\bin进入bin目录下
- 输入mysqld --initialize --user=mysql --console
- 记下最后一行产生的随机密码
- 接着输入mysqld --install
- 成功会显示Servers Successfully installed
- 控制台下输入net start mysql 启动mysql服务
- 修改密码:
- mysql> set password=password('');
- Query OK, 0 rows affected, 1 warning (0.00 sec)
- source C:\Users\jiang\Desktop\sakila-db\sakila-db\sakila-schema.sql
- source C:\Users\jiang\Desktop\sakila-db\sakila-db\sakila-data.sql
- 完成数据导入。
2-2 MySQL慢查日志的开启方式和存储格式
查看是否开启慢查询日志 show variables like 'slow_query_log' set global slow_query_log =on
设置没有索引的记录到慢查询日志 set global log_queries_not_using_indexes=on
查看日志 show variables like '%log%';
查看超过多长时间的sql进行记录到慢查询日志 show variables like 'long_query_time'
设置慢查询的时间 set long_query_time=1
2-3 MySQL慢查日志分析工具之mysqldumpslow
慢查日志分析软件:mysqldumpslow
mysql官方分析软件 启用mysqldumpslow时首先要在workbench中设置basedir的路径才能避免报错
mysqldumpslow 在windows中是一个perl文件,所以需要你配置perl环境变量,并使用perl运行
2-4 MySQL慢查日志分析工具之pt-query-digest
慢查询分析工具2:pt-query-digest
输出到文件:pt-query-digest show-log > slow_log.report
输出到数据库表 pt-query-digest show.log -review \ h=127.0.0.1,D=test,p=root.P=3306,u=root,t=query_review \ --create-reviewtable \ --review-history t=hostname_show
具体参考:http://www.cnblogs.com/luyucheng/p/6265873.html
下载地址: wget http://www.percona.com/downloads/percona-toolkit/2.2.4/percona-toolkit-2.2.4.tar.gz
tar percona-toolkit-2.2.4.tar.gz
2-5 如何通过慢查日志发现有问题的SQL
1.查询次数多且每次查询占用时间长的SQL 通常为pt-query-digest分析的前几个查询
2.IO大的SQL 注意pt-query-digest分析中的Rows examine项
3.未命中索引的SQL 注意pt-query-digest分析中的Rows examine和Row send 的对比
table:表名
type:连接的类型,const、eq_reg、ref、range、index和ALL
const:主键、唯一索引;eq_reg:主键、索引的范围查找;ref:连接的查找( join),
range:索引的范围查找;index:索引的扫描;All:表扫描
possible_keys:可能用到的索引
key:实际使用的索引
key_len:使用索引的长度,长度越短越好
rows:表扫描的行数
extra:Using filesort Using temporary 使用外部文件或临时表存储结果,看到这两个就代表是要进行优化的
2-7 Count()和Max()的优化
子查询可以用join on查询优化(注意:如果两张表连接字段存在一对多的关系,需要进行去重distinct)
2-9 group by的优化
可以把
explain select actor.first_name,actor.last_name,count(*) from film_actor inner join actor on actor.actor_id = film_actor.actor_id group by actor.actor_id\G
改写为
explain select actor.first_name,actor.last_name,c.cnt from actor inner join (select actor_id,count(*) AS cnt from film_actor GROUP BY actor_id) AS c USING(actor_id)\G
2-10 limit的优化
limit常用于分页处理,时常会伴随order by从句使用,因此大多时候会使用Filesorts这样会造成大量的io问题
1.使用有索引的列或主键进行order by操作
2.记录上次返回的主键,在下次查询时使用主键过滤
即将:select film_id,description from sakila.film order by film_id limit 50,5;
改为:select film_id,description from sakila.film where file_id >55 and film_id<=60 order by film_id limit 1,5;
使用这种方式有一个限制,就是主键一定要顺序排序和连续的,如果主键出现空缺可能会导致最终页面上显示的列表不足5条,解决办法是附加一列,保证这一列是自增的并增加索引就可以了
性能优化之MySQL优化(慕课)的更多相关文章
- 网站优化之mysql优化
一,网站优化之mysql优化:1.前缀索引,可以通过前缀去识别唯一性,把这个前缀作为索引内容,可以节省存储索引的空间,从而提高索引的查询速度.distinct 排重操作2,2.in条件索引使用同时查询 ...
- 性能优化之mysql优化——慢查日志的开启方式和存储
-- MySQL优化 -- mysql 慢查日志的开启方式和存储 -- 1) 查看mysql是否开启慢查询日志 SHOW VARIABLES LIKE 'slow_query_log'; -- 2) ...
- 慕课网 性能优化之MySQL优化--- max 和count的性能优化
注:在执行SQL语句前加上explain可以查看MySQL的执行计划 数据库:MySQL官方提供的sakila数据库 Max优化: 例如:查询最后支付时间 explain select max(pay ...
- mysql优化:慢查询分析、索引配置优化
一.优化概述二.查询与索引优化分析a.性能瓶颈定位show命令慢查询日志explain分析查询profiling分析查询b.索引及查询优化三.配置优化 max_connections back_log ...
- MySQL优化具体
1. 查询与索引优化分析 在优化MySQL时,通常需要对数据库进行分析,常见的分析手段有慢查询日志,profiling分析,EXPLAIN分析查询,以及show命令查询系统状态及系统变量,通过定位分析 ...
- Mysql优化之优化工具profiling
程序员的成长之路 2016-11-23 22:42 Mysql优化之优化工具profiling 前言 mysql优化技术: mysql优化不是做一个操作就可以的优化,它包含很多的细节,需要一点一点的优 ...
- MySql优化相关概念的理解笔记
MySQL架构 查询执行流程 查询执行的流程是怎样的: 连接1.1客户端发起一条Query请求,监听客户端的‘连接管理模块’接收请求1.2将请求转发到‘连接进/线程模块’1.3调用‘用户模块’来进行授 ...
- mysql 优化(包含sql语句的书写)
http://blog.chinaunix.net/uid-11640640-id-3426908.html mysql性能优化-慢查询分析.优化索引和配置 2012-11-30 15:18:42 ...
- 42 张图带你撸完 MySQL 优化
Hey guys,这里是程序员cxuan,欢迎你阅读我最新一期的文章,这篇文章是 MySQL 调优的汇总版,我加了一下日常开发过程中的调优经验,希望对各位小伙伴们有所帮助.下面开始正文. 一般传统互联 ...
随机推荐
- 面试大厂回来后,有一些话想对 Java 后端开发说一说
在上周,我密集面试了若干位Java后端的候选人,工作经验在3到5年间.我的标准其实不复杂:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架,我相信其它公司招初级开发时,应该也照着这个标准来面 ...
- IT兄弟连 Java语法教程 Java语言入门 典面试题
1.请说明JVM.JRE和JDK是什么?它们有什么关系? JVM是Java虚拟机,Java Virtual Machine的缩写,是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实 ...
- Spring配置文件xsi:schemaLocation无法解析导致启动失败的解决方案
今天遇到过情况,spring的配置文件在本地读取没有问题,扔到线上服务器运行就报无法解析xml,找了很久问题,发现是因为线上服务器无法上网,导致无法下载相关的xsd文件,没办法不能上网就只有使用本地的 ...
- HTTP协议初识
HTTP协议介绍 当你在浏览器地址栏敲入“http://www.cnblogs.com/”,然后猛按回车,呈现在你面前的,将是博客园的首页了(这真是废话,你会认为这是理所当然的).作为一个开发者,尤其 ...
- 51nod 1515 明辨是非 并查集+set维护相等与不等关系
考试时先拿vector瞎搞不等信息,又没离散化,结果好像MLE:后来想起课上讲过用set维护,就开始瞎搞迭代器...QWQ我太菜了.. 用并查集维护相等信息,用set记录不相等的信息: 如果要求变量不 ...
- python HTTP 状态码
404 Not Found 在HTTP请求的路径无法匹配任何RequestHandler类相对应的模式时返回404(Not Found)响应码. 400 Bad Request 如果你调用了一个没有默 ...
- github新手指南
- 渣渣菜鸡的 ElasticSearch 源码解析 —— 环境搭建
关注我 转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/08/25/es-code01/ 软件环境 1.Intellij Idea:2018.2版本 2. ...
- LCA 离线做法tarjan
tarjan(int u) { int v; for(int i=h[u];i;i=nex[i])//搜索边的 { v=to[i]; tarjan(v); marge(u,v); vis[v]=; } ...
- SpringMVC注解方式与文件上传
目录: springmvc的注解方式 文件上传(上传图片,并显示) 一.注解 在类前面加上@Controller 表示该类是一个控制器在方法handleRequest 前面加上 @RequestMap ...