
# SQL调优流程
对慢SQL语句进行分析，通常包括以下步骤：
#### 操作步骤
1. 收集SQL中涉及到的所有表的统计信息。在数据库中，统计信息是规划器生成计划的源数据。没有收集统计信息或者统计信息陈旧会造成执行计划严重劣化，从而导致性能问题。从经验数据来看，10%左右性能问题是因为没有收集统计信息。具体请参见[更新统计信息](https://support.huaweicloud.com/devg-dws/dws_04_0436.html)。
2. [审视和修改表定义](https://support.huaweicloud.com/devg-dws/dws_04_0437.html)。
3. 通常情况下，有些SQL语句可以通过查询重写转换成等价的，或特定场景下等价的语句。重写后的语句比原语句更简单，且可以简化某些执行步骤达到提升性能的目的。查询重写方法在各个数据库中基本是通用的。[SQL语句改写规则](https://support.huaweicloud.com/devg-dws/dws_04_0452.html#ZH-CN_TOPIC_0000002088892857)介绍了几种常用的通过改写SQL进行调优的方法。
4. 通过查看执行计划来查找原因。如果SQL长时间运行未结束，通过EXPLAIN命令查看执行计划，进行初步定位。如果SQL可以运行出来，则推荐使用EXPLAIN ANALYZE或EXPLAIN PERFORMANCE查看执行计划及实际运行情况，以便更精准地定位问题原因。有关执行计划的详细介绍请参见[SQL执行计划](https://support.huaweicloud.com/devg-dws/dws_04_0432.html)。
5. 针对EXPLAIN或EXPLAIN PERFORMANCE信息，定位SQL慢的具体原因以及改进措施，具体参见[SQL调优进阶](https://support.huaweicloud.com/devg-dws/dws_04_0445.html#ZH-CN_TOPIC_0000002088734281)。
6. 用户可以通过指定join顺序，join、stream、scan方法，指定结果行数，指定重分布过程中的倾斜信息等多个手段来进行执行计划的调优，以提升查询的性能。详细请参见[使用Plan Hint进行调优](https://support.huaweicloud.com/devg-dws/dws_04_0454.html)。
7. 为了保证数据库性能的持续优质，建议[例行维护表](https://support.huaweicloud.com/devg-dws/dws_04_0466.html#ZH-CN_TOPIC_0000002088892873)和[例行重建索引](https://support.huaweicloud.com/devg-dws/dws_04_0467.html)。
8. （可选）DWS支持在资源富足的情况下，通过算子并行来提升性能。详细请参见[SMP并行执行](https://support.huaweicloud.com/devg-dws/dws_04_0420.html)。
 
