当前位置:首页 > 问答 > 正文

SQL优化 经验总结 干货满满,34条SQL优化实用技巧分享

SQL优化 经验总结 干货满满,34条SQL优化实用技巧分享

基础优化原则

  1. **避免SELECT ***:仅查询必要字段,减少数据传输。
  2. 使用索引:为高频查询条件、JOIN字段、排序字段建立索引。
  3. 避免索引失效:注意隐式类型转换、函数操作(如WHERE YEAR(create_time)=2025)。
  4. 减少子查询:优先使用JOIN替代子查询,尤其是关联大表时。
  5. LIMIT分页优化:大表分页用WHERE id > offset_val LIMIT size替代LIMIT offset, size

索引优化

  1. 联合索引最左匹配:按查询顺序设计联合索引(如(a,b,c)匹配WHERE a=1 AND b=2)。
  2. 覆盖索引:查询字段全部在索引中时可避免回表(如SELECT id FROM table WHERE name='xx')。
  3. 区分度高的字段建索引:如性别字段区分度低,索引效果差。
  4. 避免冗余索引:联合索引(a,b)已包含对a的单独查询,无需再建a的单列索引。
  5. 索引列不为NULL:NULL值会增加索引复杂度。

查询优化

  1. EXISTS替代IN:大数据集时EXISTS效率更高。
  2. UNION ALL替代UNION:避免去重开销(确保结果允许重复时)。
  3. 避免OR条件:可能导致索引失效,改用UNION ALL或IN。
  4. JOIN字段类型一致:类型不一致会引发隐式转换,拖慢查询。
  5. 小表驱动大表:JOIN时数据量小的表放在左侧(如MySQL的Nested Loop Join)。

SQL编写技巧

  1. 批量操作:用INSERT INTO table VALUES (1),(2),(3)替代多次单条插入。
  2. 避免全表更新:如UPDATE table SET col=val无WHERE条件会锁表。
  3. 合理使用临时表:复杂查询可拆分到临时表后再关联。
  4. 减少字符串函数:如LIKE '%abc'无法用索引,尽量用LIKE 'abc%'
  5. 避免隐式类型转换:如WHERE user_id='123'user_id为INT时失效)。

数据库设计优化

  1. 适度范式化:避免过度冗余或过度关联。
  2. 冷热数据分离:频繁访问数据与历史数据分表存储。
  3. 字段类型选择:用TINYINT替代VARCHAR存储状态等小范围值。
  4. 避免大字段查询:如TEXT/BLOB字段单独存表。
  5. 分区表:按时间/范围分区提升大表查询效率。

高级技巧

  1. 执行计划分析:通过EXPLAIN查看扫描方式(ALL→全表扫描,需优化)。
  2. 强制索引:必要时用FORCE INDEX(如MySQL)。
  3. 统计信息更新:定期ANALYZE TABLE确保优化器选择正确索引。
  4. 延迟关联:先通过索引过滤,再关联原表获取数据(如分页优化)。
  5. 异步处理:耗时操作(如报表统计)用消息队列异步执行。

其他注意事项

  1. 避免长事务:减少锁竞争和资源占用。
  2. 监控慢查询:定期排查并优化执行时间超过阈值的SQL。
  3. 参数调优:调整数据库配置(如连接池大小、排序缓冲区)。
  4. 定期维护:重建碎片化索引、清理过期数据。

(注:具体优化需结合数据库类型(MySQL/Oracle等)和业务场景调整。)

SQL优化 经验总结 干货满满,34条SQL优化实用技巧分享

发表评论