sql 优化
1 mysql 优化方向
IO 总占用时间 索引设置
2 sql 及索引优化
如何分析
table type possible_keys key_len ref rows
explain 返回各列的含义
using filesort
3 count() 和 max()
文件IO, max 可以用户索引进行优化
4 子查询的优化方法
可以优化成为join方式
5 group by优化
一般会产生临时表 / 文件排序
在子查询内 增加处理
6 limit 优化
用主键 或者 order by 操作
多次增加 主键ID 过滤
索引的优化
1 在 where从句\group by 从句 order by 从句 on 从句中的列
2 索引字段越小越好
3 离散度大的列放到联合索引的签名
索引的维护及优化--重复及冗余索引
主键 就是 唯一索引
查询重复的索引删除。
pt-duplicate-key-checker工具检测重复索引
对不使用的索引进行删除
数据库表优化
数据类型
1 能存下最小的时间形式
2 简单的数据类型
3 尽可能用not null 定义字段
4 尽量少用text类型,非用,最好考虑分表
用int存储日期时间,利用 from_unixtime() unix_timestamp()
使用bigint来IP地址,用inet_aton() inet_ntoa()
范式话和翻番时候
1 数据冗余
2 数据插入、写、删除异常。
反范式化设计。
主要目的就为了减少表关联的操作
垂直拆分
一个多列的多,可以拆成多个表
不常用、大字段放到一个表中
水平拆分
解决表中数据量问题
前台 求余数 拆分,后台组合
系统配置优化
打开文件数量现在
soft nofile 65535
hard nofile 65535
最好用硬件防火墙,减少软件损耗
mysql 配置文件优化
/etc/my.cnf
c:/windos/my.ini
$ /usr/sbin/mysqld --verbose --help | grep -A 1 'Default options'
innodb_buffer_pool_size
非常重要的一个参数, 总内存75%。
innodb_buffer_pool_instances
mysql5.5中新增参数,可以控制缓冲池的个数,莫啊日情况下只有一个缓冲池
innodb_log_buffer_size
innodb log 缓冲的大小
innodb_flush_log_at_trx_commit
关键参数,对innodb的IO效率影响很大,默认1,可以取值 0,1,2 一般建议2,这个可以平衡。1 对安全行要求高
innodb_read_io_threads
innodb_write_io_threads
以上两个参数决定了innodb线程
innodb_file_per_table
关键参数,控制innodb没一个表使用独立的表空间,默认为off,也就是所有的表都会建立在共享表空间中
innodb_stats_metadata
决定了mysql在什么情况下会刷新innodb表的统计信息
myql 配置向导工具
https://tools.percona.com/wizard
硬件优化
cpu选择,单核更快,还是多核
建议多单核更快,有些动作不支持多核
最好不要超过32核 cpu
磁盘IO优化
常用RAID0,1,5
0 条带,IO最好
1 镜像 2分分配,安全性更好
5 最少3块 一块存放效验信息
SNA 和 NAT 是否适合数据库
1 常用于高可用解决方案
2 顺序读写效率很高,但随机读写不如人意
3 数据库随机读写比率很高