影响 SQL 语句的执行计划是通过改变查询的执行方式,使查询能够更高效地执行,以提高查询性能和响应时间。
收集当前连接数据库的统计信息;
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';
合适的索引可以加速查询操作。通过创建、删除或修改索引,可以改变执行计划中的访 问路径,以便更高效地利用索引进行数据检索。
数据库提供了一系列的配置参数来控制在生成执行计划时采用的执行算法,这些配置参数都是用户级参数,可以使用这些参数来调整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
在SQL语句中使用查询提示(SQL hint)来指定强制使用特定的算法,从而改变执行计划。这可以用于处理某些特殊情况下优化器无法得到最佳执行计划的场景。
查询优化器通过在目标SQL 语句SELECT 之后给出的特殊形式的注释来读取 hint 注释。
> 注释的形式以字符序列/+开头,以/结尾,如/+SeqScan(tablename)/。
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;
该案例暂时没有网友评论
✖
案例意见反馈
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作