请各位帮忙分析一下这两条查询语句?

[复制链接]
查看11 | 回复9 | 2005-2-28 12:57:00 | 显示全部楼层 |阅读模式
A。SELECT NVL(MAX(SHINVNO),0)+1
FROM SELLHEAD
WHERE SHSYJID = '0001'
B。SELECT NVL(MAX(SHINVNO),0)+1
FROM SELLHEAD
WHERE SHSYJID = 0001
SHINVNO TYPE CHAR(4)
表SELLHEAD中有214万条记录
A、B查出的结果是一样的,可是A需要的时间:1.24seconds,而B需要的时间是:37.1seconds。
请各位帮忙分析一下.是何原故,谢谢了!
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
最初由 jjzgc 发布
[B]A。SELECT NVL(MAX(SHINVNO),0)+1
FROM SELLHEAD
WHERE SHSYJID = '0001'
B。SELECT NVL(MAX(SHINVNO),0)+1
FROM SELLHEAD
WHERE SHSYJID = 0001
SHINVNO TYPE CHAR(4)
表SELLHEAD中有214万条记录
A、B查出的结果是一样的,可是A需要的时间:1.24seconds,而B需要的时间是:37.1seconds。
请各位帮忙分析一下.是何原故,谢谢了! [/B]

你的字段SHSYJID是字符类型吧,B进行了隐式类型转换.
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
还有看看执行计划 应该一个走索引,一个没走!
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
最初由 forestjohn 发布
[B]
你的字段SHSYJID是字符类型吧,B进行了隐式类型转换. [/B]

楼主说的对,同意
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
隐式类型转换
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
这种问题要从设计上修改,流水号可以使用其他生成方式
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
最初由 jjzgc 发布
[B]A。SELECT NVL(MAX(SHINVNO),0)+1
FROM SELLHEAD
WHERE SHSYJID = '0001'
B。SELECT NVL(MAX(SHINVNO),0)+1
FROM SELLHEAD
WHERE SHSYJID = 0001
SHINVNO TYPE CHAR(4)
表SELLHEAD中有214万条记录
A、B查出的结果是一样的,可是A需要的时间:1.24seconds,而B需要的时间是:37.1seconds。
请各位帮忙分析一下.是何原故,谢谢了! [/B]

a,可能用到索引,类型匹配。
b,因为值是 0001数字型,oracle 会转换 to_number(shsyjid)=1,
所以会走全表扫描,即使列SHSYJID 上有索引。
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
说的对,赞成!
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
简单的问题都被占了,顶
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
哈哈~~楼上的说得对!!
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行