tools

Basis-MySQL Optm

2018-06-24  本文已影响0人  afewnotes

配置优化

文件位置 /etc/my.cnf%MYSQL_HOME%/my.ini
根据实际情况适当调整配置项

数据库设计优化

SQL 执行效率分析

EXPLAIN SELECT ...
![image](https://img.haomeiwen.com/i1447479/60fe47ec7fdd7b1c.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

结果字段说明

- select_type
    - simple 简单表
    - primary 主查询
    - union 第二个或者后面的查询
    - dependent union union中的第二个或后面的select语句,取决于外面的查询
    - union result union的结果
    - subquery 子查询中的第一个select
    - dependent subquery 子查询中的第一个select,取决于外面的查询
    - derived 导出表的select(from子句的子查询)
- table 输出结果的表
- type 表示mysql在表中查询方式
    - all 扫描全表
    - index 索引扫描
    - range 索引扫描范围,常见于<,<=,>,>=,between
    - ref 非唯一索引扫描
    - eq_ref 唯一索引扫描
    - const,system 最多只有一行匹配,查询非常快,例如主键primary key/唯一索引unique index/表中只有一条记录
    - null 不用访问表或者索引,直接就能得到结果 `explain select 1 from test where 1`
- EXTRA
    - Using filesort: **出现时需要优化**。MYSQL需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行
    - Using temporary  **出现时需要优化**。MYSQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上
- `explain extened select count(1) from test where 1=1` 可以查看执行sql前,mysql做了哪些优化
- `explain partitions select id from test where id = 15` 可以查看分区名称
image

对于频繁更新的表,查询缓存是不适合的,而对于不常改变数据且有大量相同sql查询的表,查询缓存能提升性能。

查询缓存不自动处理空格,因此 SQL 语句中要尽量减少空格的使用

SQL 语句优化

上一篇 下一篇

猜你喜欢

热点阅读