|
这两个查询的问题比较典型,大家注意
原帖由 〇〇 于 2011-5-11 20:28 发表 ![]()
我有下面几个最近遇到的具体的问题,希望作者解答
1.分区内并行对查询的帮助大否
2.如果没有创建索引或主键,是否会导致很差的执行计划,比如下面的查询
select
s_acctbal,
s_name,
n_name,
p_partkey,
p_mfgr,
s_address,
s_phone,
s_comment
from
tpch.part,
tpch.supplier,
tpch.partsupp,
tpch.nation,
tpch.region
where
p_partkey = ps_partkey
and s_suppkey = ps_suppkey
and p_size = 9
and p_type like '%TIN'
and s_nationkey = n_nationkey
and n_regionkey = r_regionkey
and r_name = 'MIDDLE EAST'
and ps_supplycost = (
select
min(ps_supplycost)
from
tpch.partsupp,
tpch.supplier,
tpch.nation,
tpch.region
where
p_partkey = ps_partkey
and s_suppkey = ps_suppkey
and s_nationkey = n_nationkey
and n_regionkey = r_regionkey
and r_name = 'MIDDLE EAST'
)
ORDER BY s_acctbal desc,
n_name,
s_name,
p_partkey ASC
fetch first 100 rows only;
1.分区内并行在CPU利用率比较低的情况下使用,能充分利用CPU资源,对性能有帮助。但要注意启用分区内并行会有一定的额外消耗。
2.索引和主键对性能和查询计划有非常大的影响。
对于这个查询,如果partsupp是大表,应该创建(ps_partkey,ps_suppkey)主键并建立索引(DB2会在主键上自动创建索引)。其他表上如果可以的话也应该主键和索引。这些主键和索引将使优化器得到较好的代价和中间结果估计,找出最优的连接方法、顺序。 |
|