0%

数据库优化

文章字数:494,阅读全文大约需要1分钟

优化方式

  • 表结构设计合理3NF
  • 添加索引普通索引 主键索引 唯一索引unique 全文索引
  • sql语句优化
  • 分表技术水平分割 垂直分割
  • 读写分离
  • 配置优化,配置最大并发,缓存

定位需要优化点(慢查询日志)

MySQL中日志有:错误日志二进制日志通用查询日志慢查询日志

  • 二进制日志通过监听此日志建立主从结构
  • 通用查询建立客户端连接和执行的语句
  • 慢查询所有执行时间超过long_query_time秒的所有查询或者不适用所用的查询
    配置慢查询
    1
    2
    3
    4
    5
    6
    7
    1.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:对于每个来自前面的表的行组合,完整扫描了表数据