跳到主要内容

3. 创建查询优化

信息
查询优化表示在您的工作空间内对一组SQL查询进行的性能优化诊断,一般包括SQL审查、重写优化、索引推荐等。

用户可以对优化任务输入、输出、数据源以及执行过程的配置。

image-20231013144027728

3.1 基础配置

  • 优化ID: 标识您本次优化的ID
  • 是否仅索引推荐:此选项控制是否启用重写优化,在SQL已经上线的情况下,修改SQL可能无法立即实施,在此情况下,可以禁用此选项;PawSQL将不会重写您的SQL,只是基于原SQL进行索引推荐。

3.2 优化验证

  • 是否更新DDL信息,是否连接到验证数据库获取最新的DDL信息。

  • 是否启用What-If性能验证,此选项控制是否对推荐的优化建议进行性能验证,如果启用此选项,PawSQL在优化详情中会提供SQL优化前后的执行计划及代价信息,从而确保推荐的优化建议(重写优化及索引推荐)能够真实提升数据库性能。

  • 性能验证时是否启用Analyze,如果启用此选项,则在进行What-If性能验证时获取SQL的真实解析及执行时间,避免了MySQL对中间结果表explain的缺陷,代价估算更加精确。

警告

最后两个性能验证的选项应避免在生产库上使用,因为对于没有内置what-if(内置虚拟索引)的数据库(MySQL/Postgres皆是)来说,性能验证是通过创建推荐索引并进行explain分析执行计划,然后删除推荐索引的方式来做的。这个过程在生产库上会消耗一定的资源,且执行时间可能会比较长,可能对生产库上的业务运行产生影响。

3.3 索引推荐配置

  • 是否和现有索引去重,此选项表示推荐索引时,是否和现有索引去重。

    启用此选项的场景是不考虑删除现有的索引,因为输入的SQL只是并不能代表这个数据库上所有的SQL场景,所以只考虑新增对输入SQL有帮助的索引。如果能够确保输入的SQL包含此数据库所有的查询,那么只保留推荐的索引就可以了,这种情况下可以不选择此选项,并且使用新推荐的索引代替现有的索引。

  • 是否推荐覆盖索引,此选项表示推荐索引时是否考虑覆盖索引策略。

提示

覆盖索引可以让查询只访问索引而不需要访问数据表(请参考《高效索引的准则》),在一些场景下,覆盖索引能够大幅提示查询性能。但是覆盖索引会包含查询条件中没有使用的列,从而增加索引所占的磁盘空间大小。

  • 覆盖索引的最大列数,此项设置表示在进行覆盖索引推荐时,索引的最大列数限制。如以上所述,覆盖索引会包含查询条件中没有使用的列,从而增加索引所占的磁盘空间大小。此选项可以控制覆盖索引所占空间的大小,让PawSQL能够为用户提供一定空间限制的情况下利用覆盖索引的非回表特性。

  • 索引的最大列数,此选项限制索引的最大列数,索引会占用一定的磁盘空间,且太多列的索引会让索引树的层级加深,从而增加索引访问的代价。用户可以通过此项设置控制索引的最大列数。

  • 单表最大索引数目,如《高效索引的准则》中所述,索引不是免费的午餐,它会占用磁盘空间,并对对DML操作产生负面影响,因为对于数据库管理器写入表的每一行,它还必须更新任何受影响的索引。因此,PawSQL通过此选项来审查单表的索引数量,并进行警告提示。

image-20230718164152330

3.4 优化规则配置

  • 是否启用该优化规则,以及修改相应阈值

image-20230718164547806