性能优化之MySQL优化

性能优化之MySQL优化(一)

性能优化之MySQL优化(一)

http://dev.mysql.com/doc/index-other.html

http://dev.mysql.com/doc/sakila/en/sakila-installation.html(使用教程)

下载sakila数据库:http://dev.mysql.com/doc/index-other.html或者是http://downloads.mysql.com/docs/sakila-db.zip

解压sakila-db.zip到Desktop,里面包含三个文件

sakila.mwb

sakila-schema.sql //数据库结构文件

sakila-data.sql //数据文件

select @@version;查看MySQL版本

性能优化之MySQL优化(一)

性能优化之MySQL优化(一)

性能优化之MySQL优化(一)

慢查日志分析软件:mysqldumpslow——mysql官方分析软件

启用mysqldumpslow时首先要在workbench中设置basedir的路径才能避免报错

mysqldumpslow 在windows中是一个perl文件,所以需要你配置perl环境变量,并使用perl运行

查看慢查询日志,命令:mysqldumpslow -t 要查看的条数 日志文件的位置 | more

性能优化之MySQL优化(一)

性能优化之MySQL优化(一)

性能优化之MySQL优化(一)

慢查询分析工具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

性能优化之MySQL优化(二)

性能优化之MySQL优化(二)

性能优化之MySQL优化(二)

性能优化之MySQL优化(二)

性能优化之MySQL优化(二)

性能优化之MySQL优化(二)

性能优化之MySQL优化(二)

count(*)和count(release_year)的区别:

count(*)统计满足条件的记录数release_year=null的记录也会被统计,count(release_year)则会排除为null的结果再统计。

性能优化之MySQL优化(二)

子查询优化时,如果是一对多查询,使用join on时要用distinct去重

如果子查询in中有重复的数据,从查询的结果是看不出来的,因为in(1,1)只会返回一条记录.但是join会显示两条.尽量用join

性能优化之MySQL优化(二)

性能优化之MySQL优化(二)

group by可能会出现临时表(Using temporary),文件排序(Using filesort)等,影响效率。

可以通过关联的子查询,来避免产生临时表和文件排序,可以节省io

如果涉及到表联接的过程中有group by这样的语句,可以先通过group by做为子查询,统计出结果后,再与其它表进行关联查询。

优化group by 查询后,要在外面加上筛选条件则在子查询中增加

性能优化之MySQL优化(二)

性能优化之MySQL优化(二)

性能优化之MySQL优化(二)

性能优化之MySQL优化(三)

性能优化之MySQL优化(三)

当一个索引包含了查询中的所有列 就成为覆盖索引

离散度:数据唯一值越多,离散度越高。例如,

select count(distinct id),count(distinct real_name) from user;

id 是唯一值,所以离散度更高。而 real_name 会出现重复—>会有同名同姓的情况,所以离散度低。

select count(distinct customer_id), count(distinct staff_id) from payment;

查看离散度 通过统计不同的列值来实现 count越大 离散程度越高

性能优化之MySQL优化(三)

索引中是字段越小约好,因为是分页进行存储的,字段越小,一页中索引会包含越多。

性能优化之MySQL优化(三)

性能优化之MySQL优化(三)

性能优化之MySQL优化(三)

pt-duplicate-key-checker这个工具可以用来查询冗余索引

性能优化之MySQL优化(三)

pt-duplicate-key-checker

检查多余keypt-index-usage

索引检查pt-query-digest 慢查询分析

性能优化之MySQL优化(三)

数据库优化之使用bigint来存储IP地址。

数据库优化之使用int来存储日期

如果用null,其表结构和not null的不一样,null字段存储会占用比较多,会增加io开销

性能优化之MySQL优化(三)

1、时间转时间戳:unix_timestamp("2016-08-01 13:14:00");

2、时间戳转时间:fromm_unixtime(1508076155)

性能优化之MySQL优化(三)

性能优化之MySQL优化(四)

性能优化之MySQL优化(四)

性能优化之MySQL优化(四)

为了查询效率,有些时间需要反范型化

反范式化操作,适当增加复杂性,提高数据库操作效率

反范式化: 增加冗余信息,少关联表,以空间换时间

性能优化之MySQL优化(四)

性能优化之MySQL优化(四)

性能优化之MySQL优化(四)

性能优化之MySQL优化(四)

性能优化之MySQL优化(四)

性能优化之MySQL优化(四)

性能优化之MySQL优化(四)

表的水平拆分。前后台业务分离,前台查询分表的数据,后台要执行报表操作则把数据统一到汇总表再操作

性能优化之MySQL优化(四)

性能优化之MySQL优化(四)

性能优化之MySQL优化(四)

性能优化之MySQL优化(四)

/usr/sbin/mysqld - -verbose - -help | grep -A 1 'Default options '

查看MySQL配置文件路径,如果存在多个配置文件,则后面的会覆盖前面的

#重要,缓冲池的大小 推荐总内存量的75%,越大越好。innodb_buffer_pool_size

#默认只有一个缓冲池,如果一个缓冲池中并发量过大,容易阻塞,此时可以分为多个缓冲

性能优化之MySQL优化(四)

性能优化之MySQL优化(四)

性能优化之MySQL优化(四)

性能优化之MySQL优化(四)

性能优化之MySQL优化(四)

性能优化之MySQL优化(四)

mysql第三方配置工具:

https://tools.percona.com/wizard

猜你喜欢

转载自blog.csdn.net/qq_39827935/article/details/81214376