文章字数: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:对于每个来自前面的表的行组合,完整扫描了表数据 |