《高性能mysql第三版》

2022-04-19  本文已影响0人  编程放大镜

性能的定义为完成某件任务所需要的时间(任务执行时间+等待时间)。如果把性能优化仅仅看成是提升每秒查询量,这其实只是吞吐量优化。

掌握面向响应时间的优化方法,需要不断地对系统进行性能剖析(profiling)。

「轻量级」 性能剖析,比如为所有的sql语句计时,加上脚本总时间统计。如果流量趋势比较稳定,随机采样也可以。

<?php

profiling_enabled = rand(0, 100) > 99;

测量PHP应用程序

    new Relic、xhprof

慢查询日志分析工具 pt-query-digest

pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog、General log、slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdump抓取的MySQL协议数据来进行分析。

3.3.2 剖析单条查询

show status、show profile(未来可能被 performance schema 取代)、慢查询日志

mysql 5.6 三个基本库mysql 、information_schema、performace_schema。

XtraDB是InnoDB存储引擎本身拆分出了一个分支的更新的存储引擎。

MariaDB、Percona Server 是mysql分支。

3.4 诊断间歇性问题

第4章 Schema 与数据类型优化,数据库设计

4.1.1 整数类型

    INT(1)和INT(20),对于存储和计算来说是一样的,只是规定了一些交互工具的显示字符个数。

tiny, small, medium, int, big 分别占1(8位)、2、3、4、8个字节。

4.1.3 字符串类型

    char 非常适合存储密码的md5值,因为这是一个定长的值。对于经常变更的数据,char类型更不容易产生碎片。对于非常短的列,例如用char(1)存储只有Y和N的值,如果采用单字节字符集,只需要一个字节,但是varhar却要两个字节,因为还有一个记录长度的额外自己。记录字符串长度定义不是字节数,是字符数。

    varchar(5)和varchar(200)存储’hello’的空间开销是一样的。在用临时表进行排序是,更长的列会消耗更多的内存。

show table status where Name='user';

5.2 索引的优点

常见的B-Tree索引,按照顺序存储数据,所以mysql可以用来做ORDER BY 和 GROUP BY操作。

大大减少的服务器需要扫描的数据量。

所以可以帮忙服务器避免排序和临时表。

索引可以把随机 I/O 变为顺序 I/O。

5.3 高性能的索引策略

5.3.1 独立的列:索引列不能是表达式的一部分,也不能是函数的参数。

5.3.2 前缀索引和索引选择性

    索引的选择性是指,不重复的索引值和数据表的记录总数的比值。

    选择合适的前缀长度

    select count(distinct left(city,3))/count(*) as sel3,

    count(distinct left(city,4))/count(*) as sel4,

    前缀索引是一种能使索引更小、更快的有效方法,但缺点是:MySQL无法使用前缀索引做 ORDER BY 和 GROUP BY,也无法做覆盖扫描。

5.3.3 多列索引

上一篇下一篇

猜你喜欢

热点阅读