• 全部
  • 经验案例
  • 典型配置
  • 技术公告
  • FAQ
  • 漏洞说明
  • 全部
  • 全部
  • 大数据引擎
  • 知了引擎
产品线
搜索
取消
案例类型
发布者
是否解决
是否官方
时间
搜索引擎
匹配模式
高级搜索

[MVS]KES 影响执行计划的因素

2025-05-30 发表
  • 0关注
  • 0收藏 116浏览
粉丝:2人 关注:5人

配置步骤

影响 SQL 语句的执行计划是通过改变查询的执行方式,使查询能够更高效地执行,以提高查询性能和响应时间。

1、更新数据库的统计信息

  1. 自动收集统计信息:自动统计分析(autovacuum)默认启用,系统会定期收集表和索引的统计信息。在kingbase.conf中可配置autovacuum 的相关参数。
  2. 手动收集统计信息:执行ANALYZE 命令,可同时执行清理和统计信息收集,可收集整个数据库或指定表的统计信息。
收集当前连接数据库的统计信息; system@test=#ANALYZE; 收集单个表的统计信息: system@test=#ANALYZE t1; 查询表中元组数和占用操作系统文件的页面数; select nspname,relname,relpages,reltuples from sys_class,sys _namespace where relnamespace = sys_namespace.oid and nspname='tpch' and relname='orders';

2、创建合适的索引

合适的索引可以加速查询操作。通过创建、删除或修改索引,可以改变执行计划中的访 问路径,以便更高效地利用索引进行数据检索。

3、影响执行计划的配置参数

数据库提供了一系列的配置参数来控制在生成执行计划时采用的执行算法,这些配置参数都是用户级参数,可以使用这些参数来调整SQL语句的执行计划,并验证其性能,从而找出合适的执行方法。

表扫描执行算法的相关控制参数:

enable_seqscan =on #参数值为on则执行计划中使用顺序扫描(sequential scan) enable_indexscan =on #参数值为on则执行计划中使用索引扫描(index scan) enable_indexOnlyscan=on #参数值为on则在执行计划中使用仅索引扫描(index-only scan) enable_bitmapscan =on #参数值为on时,在执行计划中使用位图扫描(bitmap scan)

表连接执行算法的相关控制参数:

enable_hashjoin =on #参数值为on 时,在执行计划中使用哈希连接(hash join) enable_nestloop =on #参数值为on 时,在执行计划中使用嵌套循环连接(nested loop join) enable_mergejoin =on #参数值为on 时,在执行计划中使用合并连接(merge join) enable_hashagg =on #聚集操作;

SQL调试示例:
参数为语句级参数,set直接生效。例如发现位图扫描这种执行算法性能不是太好,可以尝试关闭参数 enable_bitmapscan,则SQL语句的执行计划就会发生变化,

system@test=# SET enable_bitmapscan =off; --关闭参数 enable_bitmapscan system@test=# explain seelct * from t1; system@test=# SET enable_bitmapscan =on; --重新打开参数 enable_bitmapscan

4、使用查询提示SQL Hint

在SQL语句中使用查询提示(SQL hint)来指定强制使用特定的算法,从而改变执行计划。这可以用于处理某些特殊情况下优化器无法得到最佳执行计划的场景。

查询优化器通过在目标SQL 语句SELECT 之后给出的特殊形式的注释来读取 hint 注释。
> 注释的形式以字符序列/+开头,以/结尾,如/+SeqScan(tablename)/。

启用SQL Hint方法

SQL hint的功能由系统参数 enable_hint 控制,该参数默认为off。 可在系统配置文件 kingbase.conf 中配置启用,也可以语句级set启用。

配置kingbase.conf方法,添加如下参数:

enable_hint =on

直接使用 SET 语句设置语句级命令:

system@test=# SHOW enable_hint; enable_hint off (1 row) system@test=# SET enable_hint =on; system@test=#SHOW enable_hint; enable_hint on (1 row)

执行示例

使用SQL hint 提示 / * +IndexScan(orders) */,强制语句扫描表 orders 时使用索引扫描方法:

system@test=# EXPLAIN select /* +Indexscan(orders) */ * from orders where o_totalprice > 500000;

使用SQL hint 提示 / * +hashjoin(orders lineitem) */,强制表orders 和 表lineitem 连接操作时使用了哈希连接算法,如下所示:

system@test=# EXPLAIN select /* +hashjoin(orders lineitem) */ * from orders,lineitem where o_orderkey=1_orderkey and o_orderkey<10000;

该案例对您是否有帮助:

您的评价:1

若您有关于案例的建议,请反馈:

0 个评论

该案例暂时没有网友评论

编辑评论

举报

×

侵犯我的权益 >
对根叔知了社区有害的内容 >
辱骂、歧视、挑衅等(不友善)

侵犯我的权益

×

泄露了我的隐私 >
侵犯了我企业的权益 >
抄袭了我的内容 >
诽谤我 >
辱骂、歧视、挑衅等(不友善)
骚扰我

泄露了我的隐私

×

您好,当您发现根叔知了上有泄漏您隐私的内容时,您可以向根叔知了进行举报。 请您把以下内容通过邮件发送到pub.zhiliao@h3c.com 邮箱,我们会尽快处理。
  • 1. 您认为哪些内容泄露了您的隐私?(请在邮件中列出您举报的内容、链接地址,并给出简短的说明)
  • 2. 您是谁?(身份证明材料,可以是身份证或护照等证件)

侵犯了我企业的权益

×

您好,当您发现根叔知了上有关于您企业的造谣与诽谤、商业侵权等内容时,您可以向根叔知了进行举报。 请您把以下内容通过邮件发送到 pub.zhiliao@h3c.com 邮箱,我们会在审核后尽快给您答复。
  • 1. 您举报的内容是什么?(请在邮件中列出您举报的内容和链接地址)
  • 2. 您是谁?(身份证明材料,可以是身份证或护照等证件)
  • 3. 是哪家企业?(营业执照,单位登记证明等证件)
  • 4. 您与该企业的关系是?(您是企业法人或被授权人,需提供企业委托授权书)
我们认为知名企业应该坦然接受公众讨论,对于答案中不准确的部分,我们欢迎您以正式或非正式身份在根叔知了上进行澄清。

抄袭了我的内容

×

原文链接或出处

诽谤我

×

您好,当您发现根叔知了上有诽谤您的内容时,您可以向根叔知了进行举报。 请您把以下内容通过邮件发送到pub.zhiliao@h3c.com 邮箱,我们会尽快处理。
  • 1. 您举报的内容以及侵犯了您什么权益?(请在邮件中列出您举报的内容、链接地址,并给出简短的说明)
  • 2. 您是谁?(身份证明材料,可以是身份证或护照等证件)
我们认为知名企业应该坦然接受公众讨论,对于答案中不准确的部分,我们欢迎您以正式或非正式身份在根叔知了上进行澄清。

对根叔知了社区有害的内容

×

垃圾广告信息
色情、暴力、血腥等违反法律法规的内容
政治敏感
不规范转载 >
辱骂、歧视、挑衅等(不友善)
骚扰我
诱导投票

不规范转载

×

举报说明

提出建议

    +

亲~登录后才可以操作哦!

确定

亲~检测到您登陆的账号未在http://hclhub.h3c.com进行注册

注册后可访问此模块

跳转hclhub

你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作