sql优化方式
1. sql优化方式
1. 创建和使用索引
- 索引常用查询字段:对经常出现在
WHERE
、JOIN
、ORDER BY
、GROUP BY
中的字段建立索引。 - 组合索引:创建包含多个列的组合索引,以满足多个条件查询的需求。
- 覆盖索引:选择性地创建覆盖索引,使查询可以直接从索引中获取数据而无需访问表数据。
- 避免过多索引:过多的索引会影响写操作的性能,应在查询和写操作之间找到平衡。
- 遵守最左前缀法则:如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列。
2. 优化查询语句
- **避免SELECT ***:只查询需要的字段,避免使用
SELECT *
。 - 减少子查询:在可能的情况下,使用
JOIN
代替子查询。 - **使用
EXISTS
替代IN
**:对于子查询,使用EXISTS
可能比IN
更高效。 - 避免函数索引:在
WHERE
子句中避免对列使用函数,尽量在应用层处理数据。 - 避免索引失效,导致全表扫描:尽量不使用不等于(!=或者<>)like,这些无法使用索引,会导致全表扫描
- 不在索引列上做任何操作。(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描。
4. 表设计优化
- 规范化:确保表设计符合第三范式,减少数据冗余。
- 适当反规范化:在读操作频繁的情况下,可以适当反规范化,减少
JOIN
操作。
5. 优化JOIN
操作
- 选择适当的
JOIN
类型:根据需求选择INNER JOIN
、LEFT JOIN
等,避免不必要的全表扫描。 - 确保
JOIN
字段索引:确保JOIN
操作中使用的字段上有索引。 - 减少
JOIN
数量:避免多个表的JOIN
,减少复杂度。
6. 分页查询优化
- 限制返回数据量:使用
LIMIT
和OFFSET
进行分页查询,避免一次性返回大量数据。 - 优化分页:使用高效的分页查询方式,如基于索引的分页或通过ID范围查询。
7. 批量操作
- 批量插入和更新:使用批量插入或更新操作,减少单次SQL操作的开销。
- 避免逐行处理:尽量使用批量操作代替逐行处理,提高效率。
8. 分析查询性能
- **使用
EXPLAIN
**:使用EXPLAIN
命令分析查询执行计划,识别性能瓶颈。 - 查询日志分析:启用慢查询日志,分析执行时间较长的查询,进行针对性优化。
9. 使用缓存
- 应用层缓存:使用Redis或Memcached等缓存频繁查询的数据。
- 数据库层缓存:利用数据库的查询缓存机制(如MySQL Query Cache)。
11. 使用合适的存储引擎
- 选择合适的存储引擎:根据具体需求选择适合的存储引擎(如InnoDB、MyISAM)。
12. 避免死锁
- 合理的事务管理:控制事务的粒度,避免长时间持有锁。
- 避免资源竞争:尽量减少并发操作中对相同资源的竞争。
13. 选择合适的数据库中间件
如数据量大时采用归档或者CH等,提高查询效率
- 在线查询系统OLTP
- 离线分析系统OLAP:常见报表
和时间相关的数据数据采集这种,可以考虑influxDb
搜索相关的,elasticsearch
1GB,数据条数在1千万以内:常见的数据库都可以应对:mysql, postgresql
1GB~10Gb, 亿级 -> 单机
超过了10GB以及亿级 -》 数据分片, 多台物理机
(同时也考虑技术人才)
14. 分库分表
- 使用一些分库分表组件如:ShardingSphere,mycat, DBLE
但是使用这些组件会一定程度限制SQL,需要你在使用前明确后续对SQL的操作
sql优化方式
http://example.com/常见sql优化/