查看: 2384|回复: 2

[原创] 请教基于成本的Oracle优化法则中CBO_CHAR_VALUE()函数的问题?

[复制链接]
招聘 : 数据分析/ETL
论坛徽章:
4
ITPUB学员
日期:2011-10-09 08:54:30ITPUB十周年纪念徽章
日期:2011-11-01 16:25:222013年新春福章
日期:2013-02-25 14:51:24迷宫蛋
日期:2013-04-24 10:42:36
发表于 2011-8-29 21:26 | 显示全部楼层 |阅读模式
CBO_CHAR_VALUE()这个函数是《基于成本的Oracle优化法则》一书中给出的,目的用在计算VARCHAR2类型字符串坐区间谓词between and时候的选择率。那么:

请教,为什么我的计算机上的Oracle 9i(9.1)版本,在执行select cbo_char_value('0') from dual;这个语句的时候,出现CPU利用率100%,然后十几分钟得不到查询结果的现象?CBO_CHAR_VALUE()函数的代码贴在下面:

create or replace function cbo_char_value(i_instring in varchar2,
                                          i_charsize in number default 0)
  return number as
  m_size number;
  m_vc   varchar2(2);
  m_n    number := 0;
begin
  if i_charsize = 0 then
    m_size := length(i_instring);
  else
    m_size := i_charsize;
  end if;
  m_vc := rpad(rpad(i_instring, m_size, ' '), 2, chr(0));
  for i in 1 .. 2 loop
    dbms_output.put(ascii(substr(m_vc, i, 1)));
    dbms_output.put(chr(9));
    dbms_output.put_Line(to_char(power(256, 2 - i) *
                                 ascii(substr(m_vc, i, 1)),
                                 '999,999,999,999,999,999,999,999,999,999,999,999'));
    m_n := m_n + power(256, 2 - i) * ascii(substr(m_vc, i, 1));
  end loop;
  return m_n;
end;

大家帮忙分析一下?我得计算机内存是4GB,CPU是2.13GHZ的,性能也不差啊。这是为什么?

我就是想试一下书上的代码。
招聘 : 数据分析/ETL
论坛徽章:
4
ITPUB学员
日期:2011-10-09 08:54:30ITPUB十周年纪念徽章
日期:2011-11-01 16:25:222013年新春福章
日期:2013-02-25 14:51:24迷宫蛋
日期:2013-04-24 10:42:36
 楼主| 发表于 2011-8-30 10:05 | 显示全部楼层
要沉下去了,自己顶。

使用道具 举报

回复
论坛徽章:
51
ITPUB十周年纪念徽章
日期:2011-11-01 16:25:22铁扇公主
日期:2012-02-21 15:03:13最佳人气徽章
日期:2012-03-13 17:39:18ITPUB季度 技术新星
日期:2012-05-22 15:10:11ITPUB 11周年纪念徽章
日期:2012-10-09 18:13:332013年新春福章
日期:2013-02-25 14:51:24ITPUB社区12周年站庆徽章
日期:2013-08-12 09:34:36itpub13周年纪念徽章
日期:2014-09-28 10:55:55
发表于 2011-8-30 13:39 | 显示全部楼层
SQL> create or replace function cbo_char_value(i_instring in varchar2,
  2                                            i_charsize in number default 0)
  3    return number as
  4    m_size number;
  5    m_vc   varchar2(2);
  6    m_n    number := 0;
  7  begin
  8    if i_charsize = 0 then
  9      m_size := length(i_instring);
10    else
11      m_size := i_charsize;
12    end if;
13    m_vc := rpad(rpad(i_instring, m_size, ' '), 2, chr(0));
14    for i in 1 .. 2 loop
15      dbms_output.put(ascii(substr(m_vc, i, 1)));
16      dbms_output.put(chr(9));
17      dbms_output.put_Line(to_char(power(256, 2 - i) *
18                                   ascii(substr(m_vc, i, 1)),
19                                   '999,999,999,999,999,999,999,999,999,999,999,999'));
20      m_n := m_n + power(256, 2 - i) * ascii(substr(m_vc, i, 1));
21    end loop;
22    return m_n;
23  end;
24  
25  
26  /
Function created.

SQL>  select CBO_CHAR_VALUE('0') from dual;

CBO_CHAR_VALUE('0')
-------------------
              12288


我的10.2可能是版本的问题

使用道具 举报

回复

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

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


----------------------------------------

大会官网>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表