sql优化方式

1. sql优化方式

1. 创建和使用索引

  • 索引常用查询字段:对经常出现在WHEREJOINORDER BYGROUP BY中的字段建立索引。
  • 组合索引:创建包含多个列的组合索引,以满足多个条件查询的需求。
  • 覆盖索引:选择性地创建覆盖索引,使查询可以直接从索引中获取数据而无需访问表数据。
  • 避免过多索引:过多的索引会影响写操作的性能,应在查询和写操作之间找到平衡。
  • 遵守最左前缀法则:如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列。

2. 优化查询语句

  • **避免SELECT ***:只查询需要的字段,避免使用SELECT *
  • 减少子查询:在可能的情况下,使用JOIN代替子查询。
  • **使用EXISTS替代IN**:对于子查询,使用EXISTS可能比IN更高效。
  • 避免函数索引:在WHERE子句中避免对列使用函数,尽量在应用层处理数据。
  • 避免索引失效,导致全表扫描:尽量不使用不等于(!=或者<>)like,这些无法使用索引,会导致全表扫描
  • 不在索引列上做任何操作。(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描。

4. 表设计优化

  • 规范化:确保表设计符合第三范式,减少数据冗余。
  • 适当反规范化:在读操作频繁的情况下,可以适当反规范化,减少JOIN操作。

5. 优化JOIN操作

  • 选择适当的JOIN类型:根据需求选择INNER JOINLEFT JOIN等,避免不必要的全表扫描。
  • 确保JOIN字段索引:确保JOIN操作中使用的字段上有索引。
  • 减少JOIN数量:避免多个表的JOIN,减少复杂度。

6. 分页查询优化

  • 限制返回数据量:使用LIMITOFFSET进行分页查询,避免一次性返回大量数据。
  • 优化分页:使用高效的分页查询方式,如基于索引的分页或通过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优化/
作者
Panyurou
发布于
2021年12月5日
许可协议