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-winx64mysql-5.7.24-winx64in
datadir=E:Program Files (x86)mysql-5.7.24-winx64mysql-5.7.24-winx64data
port=3306
character-set-server=utf8
[client]
port=3306
character-set=utf8
在mysql根目录下新建data文件夹
以管理员身份运行cmd命令
输入cd G:Program FilesMySQLMySQL Server 5.7in进入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:UsersjiangDesktopsakila-dbsakila-dbsakila-schema.sql
source C:UsersjiangDesktopsakila-dbsakila-dbsakila-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()的优化