文章字数:494,阅读全文大约需要1分钟
优化方式
- 表结构设计合理
3NF
- 添加索引
普通索引
主键索引
唯一索引unique
全文索引
- sql语句优化
- 分表技术
水平分割
垂直分割
- 读写分离
- 配置优化,配置最大并发,缓存
定位需要优化点(慢查询日志)
MySQL
中日志有:错误日志
、二进制日志
、通用查询日志
、慢查询日志
二进制日志
通过监听此日志建立主从结构通用查询
建立客户端连接和执行的语句慢查询
所有执行时间超过long_query_time
秒的所有查询或者不适用所用的查询
配置慢查询1
2
3
4
5
6
71.my.ini中增加
long_query_time=2
2.可在直接在mysql连接中开启
set global slow_query_log=ON
set global long_query_time = 3600;
set global log_querise_not_using_indexes = ON;
语句分析
explain
关键字,显示了mysql如何使用索引处理查询及表连接结果中常用的信息:1
EXPLAIN SELECT * FROM USER ORDER BY TIME LIMIT 0,100
列名 | 含义 |
---|---|
id | select查询序列号 |
select_type | 查询类型(union相关) |
table | 那张表 |
type | 使用了何种类型,从好到坏:const、eq_reg、ref、range、index、ALL |
- | const:表最多有一个匹配行 |
- | eq_ref:对于多表行组合,从改表中只读取一行 |
- | ref:对于每个来自前面表的行组合,所有匹配索引值的行都从这张表中读取 |
- | ref_or_null:该联接类型如同ref,但是添加了MySQL可以专门所有包含NULL值的行。 |
- | index_merge:该联接类型表示使用了索引合并优化 |
- | unique_subquery:索引查找含糊,替固定代子查询,效率更高 |
- | index_subquery:改联接类型类似于unique_subquery |
- | range:只检索给定范围的行,使用一个索引来选择行 |
- | index:该联接类型与ALL相同,除了只有索引树被扫描。扫描索引比扫描数据文件块一点 |
- | ALL:对于每个来自前面的表的行组合,完整扫描了表数据 |