SQL语句执行时间长短(性能)是看其执行计划的哪一列?cost? cardinalty? bytes?

[复制链接]
查看11 | 回复9 | 2005-10-30 17:05:33 | 显示全部楼层 |阅读模式
有点搞晕了
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
单独看跟这些没有完全直接关系,

cost:花费
cardinalty:表连接是的卡氏积
bytes: 执行计划中好像没有这个参数
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 儿子属羊 发布
[B]单独看跟这些没有完全直接关系,

cost:花费
cardinalty:表连接是的卡氏积
bytes: 执行计划中好像没有这个参数 [/B]

不要只从字面上而去猜测其意义。你把表分析一下,再看执行计划里面有没bytes这个东西。
■ Cost The cost assigned to each step of the query plan by the CBO. The CBO works by generating many different execution paths/plans for the same query and assigns a cost to each and every one. The query plan with the lowest cost wins.
■ Card Card is short for Cardinality. It is the estimated number of rows that will flow out of a given query plan step.
■ Bytes The size in bytes of the data the CBO expects each step of the plan to return. This is dependent on the number of rows (Card) and the estimated width of the rows.
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
根据返回的行数看Cost啦,如果Cost高的话这条语句性能必不佳。其实最重要的还是看逻辑读,尽量调整将逻辑读降至最低。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
什么版本?如果是10g,可以看看cpu_time
In addition to the DISK_READS column, the V$SQL and V$SQLAREA views in Oracle Database 10g have exciting new columns: USER_IO_WAIT_TIME, DIRECT_WRITES, APPLICATION_WAIT_TIME, CONCURRENCY_WAIT_TIME, CLUSTER_WAIT_TIME, PLSQL_EXEC_TIME, and JAVA_EXEC_TIME. You can discover the SQL statement with the highest cumulative or average USER_IO_WAIT_TIME.
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 blue_prince 发布
[B]根据返回的行数看Cost啦,如果Cost高的话这条语句性能必不佳。其实最重要的还是看逻辑读,尽量调整将逻辑读降至最低。 [/B]

我的目的是用最短时间返回数据,cost高也没关系。
逻辑读,只能在执行完后才看得到啊。我想在执行前就估算得到啊

有办法吗?
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 jxc_hn 发布
[B]
我的目的是用最短时间返回数据,cost高也没关系。
逻辑读,只能在执行完后才看得到啊。我想在执行前就估算得到啊

有办法吗? [/B]

大哥,执行计划也是ORACLE的一个估算值嘛。ORACLE也是按照COST来选择执行的方式的。不执行,光看执行计划的那些参数,估计不行。
我一般从COST里面去看拉。要么你就做个TRACE。
COST高的未必一定就计划差。特别使用BITMAP index 的时候。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
最初由 儿子属羊 发布
[B]单独看跟这些没有完全直接关系,

cost:花费
cardinalty:表连接是的卡氏积
bytes: 执行计划中好像没有这个参数 [/B]

晕,card是查询记录输出行数的估计值
bytes是一个子计划输出的字节数,跟行数和行的宽度有关系。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
这些参数只是一个比较的值,本身没有什么意义,tuning sql 主要还是看 buffers get ,要尽量的减少buffers get 的值,当然同样一个SQL语句的话,这些值越低效率可能会越高的
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
研究了一下
SQL> select * fromuni_mt_28_29_new_trim a wherenot exists
2(select *from LOOKTICKET_28_29_mo_new_trim b
where a.TELEPHONE1=b.DESTNUMBER
and a.TELEPHONE2=b.srcnumber
and a.time_12=b.time_12
);3456
Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE (Cost=27087 Card=1 Bytes=6

7)
10 HASH JOIN (ANTI) (Cost=27087 Card=1 Bytes=67)
21 TABLE ACCESS (FULL) OF 'UNI_MT_28_29_NEW_TRIM' (Cost=590

4 Card=10065694 Bytes=352299290)
31 TABLE ACCESS (FULL) OF 'LOOKTICKET_28_29_MO_NEW_TRIM' (C

ost=8292 Card=8530636 Bytes=272980352)
Card:查询记录输出行数的估计值(就是输出的行数),Bytes 好象就对不上了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行