第2章 MySQL基准测试
基准测试有两种策略:一是针对整个系统的整体测试,二是单独测试MySQL。也叫集成式和单组件式。
下面为测试何种指标:
吞吐量:是单位时间内的事务处理量。
百分比响应时间
Web服务器并发性:会话处理机制可以存储多少数据
并发性:任意时间有多少并发的请求
(一个应用可能有成百上千的数据库连接,但只有几十个在执行查询)
可扩展性
概念:TPS(每秒处理事务数)
QPS(每秒查询次数)
缓存命中:用已有的副本为某些达到缓存的请求提供服务。
sysbench工具(多线程系统压测工具):不仅可以测试数据库性能,还能测试运行数据库的服务器的性能。
第3章 服务器性能剖析
是什么导致了性能低下:
- 资源请求过多,导致匮乏
- 配置错误
- 资源已损坏
第4章
4.1 需要优化的数据类型
整形比字符串占用更少
最好指定列为NOT NULL
对于经常变更的数据,CHAR比VARCHAR更好。它是定长的,不容易产生碎片。
BLOB和TEXT类型,为很大数据设计的字符串类型,分别用二进制和字符方式。
枚举字段按内部存储的整数排序的,而非字符串。
MySQL会将每个数据的位置存储为整数,且在表的.frm文件中保存数字-字符串关系。
避免使用ENUM,SET,BIT
TIMESTAMP占存储空间小,默认第一个列值为当前时间。
范式化和反范式化
范式化:把 1 2 3的表拆成1 2和2 3
- 更新操作快
- 范式化的表通常更小
- 很少有多余的数据意味着很少用DISTINCT和GROUP BY
- 缺点:通常需要关联
inner join(等值连接) 只返回两个表中联结字段相等的行
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
索引:不需要表名.属性就能调用的属性?
4.4 缓存表与汇总表
有时候提升性能最好的方法是在同一张表中保存衍生的冗余数据。有时候也要创建完整独立的缓存表。
缓存表是比较简单可以从其他scheme表获取数据的表,汇总表保存GROUP BY汇总的表。
两种表必须决定是实时维护还是定期重建。
建额外索引,增加冗余列,写变慢,读变快
快速创建MyISAM索引:只对非唯一索引有效,禁用索引,载入数据,重启索引