1、MySQL数据库优化技术
1)表的设计合理化(符合3NF)
2)添加适当的索引(index):普通索引、主键索引、唯一索引、全文索引、复合索引
3)分表技术(水平分割、垂直分割)
4)读写分离(读:select,写:insert、update、delete)
5)存储过程、触发器(模块化编程,提前编译sql语句,提交执行速度)
6)对mysql配置文件进行优化(最大并发数、缓存大小)
7)mysql服务器升级
8)定时清理不需要的数据,定时进行碎片整理(MyISAM)
2、3NF(范式)
1)1NF:列具有原子性,不可分割,数据库是关系型数据库就符合1NF
2)2NF:表的行记录是唯一的,符合2NF,设置主键
3)3NF:表中没有冗余数据
3、反3NF:没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是: 在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余。
4、Sql语句优化
1)定位慢查询
a、获取mysql的一些运行状态(如:当前连接数、select次数、update次数、insert次数、delete次数等)
show [global|session] status like ‘‘ 查询相关运行状态
netstat –anb 查询端口
SHOW STATUS; #显示参数信息列表 SHOW STATUS LIKE ‘%quer%‘; #模糊匹配 SHOW STATUS LIKE ‘uptime‘; #显示MySQL运行时间 SHOW GLOBAL STATUS LIKE ‘com_select‘; #显示select次数 SHOW GLOBAL STATUS LIKE ‘com_update‘; #显示update次数 SHOW GLOBAL STATUS LIKE ‘com_insert‘; #显示insert次数 SHOW GLOBAL STATUS LIKE ‘com_delete‘; #显示delete次数 SHOW STATUS LIKE ‘connections‘; #显示当前并发连接数 SHOW GLOBAL STATUS LIKE ‘slow_queries‘; #查询慢查询次数
b、开启慢查询日志:
SHOW VARIABLES LIKE ‘long_query_time‘; #慢查询记录最短时间 SET long_query_time = 1; #设置慢查询时间 SET GLOBAL slow_query_log = ON; #开启慢查询日志 SHOW VARIABLES LIKE ‘slow_query_log‘; #显示慢查询日志状态 SHOW VARIABLES LIKE ‘slow_query_log_file‘; #显示慢查询日志文件路径
日志记录:
# Time: 151007 12:01:37 # [email protected]: root[root] @ localhost [127.0.0.1] Id: 5 # Query_time: 15.434343 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 13000000 use hsp_mysql; SET timestamp=1444190497; select * from emp where empno = 12321312312 LIMIT 0, 1000;
时间: 2024-09-30 09:59:29