同样的代码,为什么SQL2000四秒可以出结果,而SQL2005至少三分钟

gthlu 2008-01-09 06:51:45
--前提:
CREATE TABLE [c_py] (
[chn] [char] (2) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[py] [char] (1) COLLATE Chinese_PRC_CI_AS NOT NULL ,
PRIMARY KEY CLUSTERED
(
[chn]
) ON [PRIMARY]
) ON [PRIMARY]
GO
SET QUOTED_IDENTIFIER OFF
GO
INSERT c_py(chn,py) values("吖","A")
INSERT c_py(chn,py) values("八","B")
INSERT c_py(chn,py) values("嚓","C")
INSERT c_py(chn,py) values("咑","D")
INSERT c_py(chn,py) values("妸","E")
INSERT c_py(chn,py) values("发","F")
INSERT c_py(chn,py) values("旮","G")
INSERT c_py(chn,py) values("铪","H")
INSERT c_py(chn,py) values("丌","J")
INSERT c_py(chn,py) values("咔","K")
INSERT c_py(chn,py) values("垃","L")
INSERT c_py(chn,py) values("嘸","M")
INSERT c_py(chn,py) values("拏","N")
INSERT c_py(chn,py) values("噢","O")
INSERT c_py(chn,py) values("妑","P")
INSERT c_py(chn,py) values("七","Q")
INSERT c_py(chn,py) values("呥","R")
INSERT c_py(chn,py) values("仨","S")
INSERT c_py(chn,py) values("他","T")
INSERT c_py(chn,py) values("屲","W")
INSERT c_py(chn,py) values("夕","X")
INSERT c_py(chn,py) values("丫","Y")
INSERT c_py(chn,py) values("帀","Z")



go
--问题代码:(都是函数)
--函数一:
create function f_ch2py(@chn nchar(1))
returns char(1)
as
begin
declare @py char(1)

select top 1 @py = py
from c_py (nolock)
where chn <= @chn
order by chn COLLATE Chinese_PRC_CI_AS desc

return(isnull(@py,''))
end

go
--函数二:
create function f_st2zjm(@st nvarchar(4000))
returns varchar(100) --总笔数,字母和数字按一笔算。
as
begin
declare @bh varchar(100)
declare @n int

set @n = 1
set @bh = ''

while @n <= len(@st) and @n < 31
begin
if unicode(substring(@st,@n,1)) between 48 and 57 --数字
set @bh = @bh + substring(@st,@n,1)
else if unicode(substring(@st,@n,1)) between 65 and 90 --大写字母
set @bh = @bh + substring(@st,@n,1)
else if unicode(substring(@st,@n,1)) between 97 and 122 --小写
set @bh = @bh + upper(substring(@st,@n,1))
else if substring(@st,@n,1) = '参' --多音字
set @bh = @bh + 'S'
else if unicode(substring(@st,@n,1)) between 19968 and 40869 --汉字
set @bh = @bh + dbo.f_ch2py(substring(@st,@n,1))

set @n = @n + 1
end

return(@bh)
end

/*
问题:
select dbo.f_st2zjm(columnname) from tabname,记录结果一万四千多行,每列字符汉字平均15个。
上面这条语句在SQL2000下四秒钟,而在SQL2005下将近三分钟才能出来结果?而且SQL2005所在服务器的硬件比2000的好至少三倍。
应该不是硬件问题,因为我在很多的企业都证实过这个问题。
*/
...全文
165 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
w2jc 2008-01-10
  • 打赏
  • 举报
回复
我们的测试都说明2005是比2000快一些的,同等硬件,同等数据量和访问量。
LZ的测试环境是否相同?
沅江汐水 2008-01-10
  • 打赏
  • 举报
回复
运行的快慢跟电脑也有一定关系的 ,

运行当时的内存使用率也很重要的,不能看了自己的结果,就判断sql2005不行

rfq 2008-01-10
  • 打赏
  • 举报
回复
跟踪,分析;
kelph 2008-01-10
  • 打赏
  • 举报
回复
lz对比一下执行计划,2005是哪一步耗费了时间。
JL99000 2008-01-10
  • 打赏
  • 举报
回复
LZ怒了
不给你们分了
sunrisehy2003 2008-01-10
  • 打赏
  • 举报
回复
一臺電腦上是不可能裝這兩個系統的,所以應該是裝在不同的電腦上.
電腦配置不同,速度就會不同.也有可能是裝2005的那臺電腦內存被佔用了.
kk19840210 2008-01-10
  • 打赏
  • 举报
回复
关注,接分

索引一样吗??
fulianglove 2008-01-10
  • 打赏
  • 举报
回复
已测试,一秒,是不是什么服务没开
loworth 2008-01-09
  • 打赏
  • 举报
回复
没有拿苹果跟苹果比较啊

可能LZ sqlserver2000装在扣肉2G上
而 sql2005装在了 奔三500M上
wzy_love_sly 2008-01-09
  • 打赏
  • 举报
回复
楼主的机器坏了吧!
pt1314917 2008-01-09
  • 打赏
  • 举报
回复
我也运行了。也不到1秒就出数据了。
楼主的这么慢???
dobear_0922 2008-01-09
  • 打赏
  • 举报
回复
记录结果一万四千多行,每列字符汉字平均15个

--------------
我这儿没这种表,,,
dobear_0922 2008-01-09
  • 打赏
  • 举报
回复
CREATE   TABLE   [c_py]   ( 
[chn] [char] (2) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[py] [char] (1) COLLATE Chinese_PRC_CI_AS NOT NULL ,
PRIMARY KEY CLUSTERED
(
[chn]
) ON [PRIMARY]
) ON [PRIMARY]
GO
SET QUOTED_IDENTIFIER OFF
GO
INSERT c_py(chn,py) values("吖","A")
INSERT c_py(chn,py) values("八","B")
INSERT c_py(chn,py) values("嚓","C")
INSERT c_py(chn,py) values("咑","D")
INSERT c_py(chn,py) values("妸","E")
INSERT c_py(chn,py) values("发","F")
INSERT c_py(chn,py) values("旮","G")
INSERT c_py(chn,py) values("铪","H")
INSERT c_py(chn,py) values("丌","J")
INSERT c_py(chn,py) values("咔","K")
INSERT c_py(chn,py) values("垃","L")
INSERT c_py(chn,py) values("嘸","M")
INSERT c_py(chn,py) values("拏","N")
INSERT c_py(chn,py) values("噢","O")
INSERT c_py(chn,py) values("妑","P")
INSERT c_py(chn,py) values("七","Q")
INSERT c_py(chn,py) values("呥","R")
INSERT c_py(chn,py) values("仨","S")
INSERT c_py(chn,py) values("他","T")
INSERT c_py(chn,py) values("屲","W")
INSERT c_py(chn,py) values("夕","X")
INSERT c_py(chn,py) values("丫","Y")
INSERT c_py(chn,py) values("帀","Z")


go
--问题代码:(都是函数)
--函数一:
create function f_ch2py(@chn nchar(1))
returns char(1)
as
begin
declare @py char(1)

select top 1 @py = py
from c_py (nolock)
where chn <= @chn
order by chn COLLATE Chinese_PRC_CI_AS desc

return(isnull(@py,''))
end

go
--函数二:
create function f_st2zjm(@st nvarchar(4000))
returns varchar(100) --总笔数,字母和数字按一笔算。
as
begin
declare @bh varchar(100)
declare @n int

set @n = 1
set @bh = ''

while @n <= len(@st) and @n < 31
begin
if unicode(substring(@st,@n,1)) between 48 and 57 --数字
set @bh = @bh + substring(@st,@n,1)
else if unicode(substring(@st,@n,1)) between 65 and 90 --大写字母
set @bh = @bh + substring(@st,@n,1)
else if unicode(substring(@st,@n,1)) between 97 and 122 --小写
set @bh = @bh + upper(substring(@st,@n,1))
else if substring(@st,@n,1) = '参' --多音字
set @bh = @bh + 'S'
else if unicode(substring(@st,@n,1)) between 19968 and 40869 --汉字
set @bh = @bh + dbo.f_ch2py(substring(@st,@n,1))

set @n = @n + 1
end

return(@bh)
end

go
select chn=dbo.f_st2zjm(chn),py=dbo.f_st2zjm(py) from c_py

/*
chn py
---------- ----------
A A
B B
C C
D D
E E
F F
G G
H H
J J
K K
L L
M M
N N
O O
P P
Q Q
R R
S S
T T
W W
X X
Y Y
Z Z

(23 row(s) affected)
*/

drop function dbo.f_ch2py
drop function dbo.f_st2zjm
drop table c_py
dobear_0922 2008-01-09
  • 打赏
  • 举报
回复
刚刚在2005上测了下,1秒钟就出来了,,,
gthlu 2008-01-09
  • 打赏
  • 举报
回复
以上代码可直接运行,方便大家调试。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧