To qiubolecn(来自差生市) 我是丢了year了, to yeath(无敌枪手),如果我要的是全部数据呢,何况才7000条呢, TO :yuanjujing(※挪威森林※)你说的方法我早试过了,超时已过期,关键在于order by 语句. To CoolSlob() :select * from ghtsh_view试过的,超不过1秒钟. To Delphi_study(),你的方法我也试过了, 主要就是order by 语句惹的祸
不要写那么复杂的sql语句!应该分几部完成!几个简单的sql语句要比一个复杂的用的时间还要长呢!
View中增加: year(jc_ksrq)-year(dbo.Return_Max_Date(GHJCB_ID)) as 寄存年数查询写成: select * From GHTSH_VIEW Order by 寄存年数,寄存开始日期试试!
谢谢各位: 我的问题还是没有解决,但是我明白是怎么回事了,这不是简单的加上索引就能解决的事,虽然加上索引可以提高速度,我还忘记了,我的return_max_date函数没有给出,主要原因是在这个函数,他还在重新serch 7000次另外一个表.也就是于表中有 7000*7000条记录的速度相当了.也就是49000000条记录的速度了。不知对否,各位大虾 CREATE FUNCTION Return_Max_Date (@GHJCID integer) RETURNS smalldatetime AS BEGIN DECLARE @Result smalldatetime; /*以下检测有无续存记录*/ IF (SELECT Count(*) From GHTSH_XCDJB where GHJCB_ID=@GHJCID)>0 BEGIN Select @Result=MAX(XCJSRQ) From GHTSH_XCDJB Where GHJCB_ID=@GHJCID; END ELSE BEGIN Select @Result=JC_JSRQ From GHTSH_JCDJB Where GHJCB_ID=@GHJCID; END RETURN(@Result); END
select (Year(寄存结束日期)-Year(寄存开始日期)) as 寄存年数,* From GHTSH_VIEW Order by (寄存结束日期)-Year(寄存开始日期)
Order by (寄存结束日期)-Year(寄存开始日期),我没看懂。前面有没有 Year?
你有没有DBA?用它运行检查一下!
From GHTSH_VIEW
Order by 1,寄存开始日期
2. 瓶颈应该在order by,你的应用不会使用全部的7000条数据吧,为什么要全部选出来呢,限制一下条数吧.用翻页的话只需要定位到翻页所需的几条数据就行了
to yeath(无敌枪手),如果我要的是全部数据呢,何况才7000条呢,
TO :yuanjujing(※挪威森林※)你说的方法我早试过了,超时已过期,关键在于order by 语句.
To CoolSlob() :select * from ghtsh_view试过的,超不过1秒钟.
To Delphi_study(),你的方法我也试过了,
主要就是order by 语句惹的祸
year(jc_ksrq)-year(dbo.Return_Max_Date(GHJCB_ID)) as 寄存年数查询写成:
select * From GHTSH_VIEW Order by 寄存年数,寄存开始日期试试!
我的问题还是没有解决,但是我明白是怎么回事了,这不是简单的加上索引就能解决的事,虽然加上索引可以提高速度,我还忘记了,我的return_max_date函数没有给出,主要原因是在这个函数,他还在重新serch 7000次另外一个表.也就是于表中有 7000*7000条记录的速度相当了.也就是49000000条记录的速度了。不知对否,各位大虾
CREATE FUNCTION Return_Max_Date (@GHJCID integer)
RETURNS smalldatetime AS
BEGIN
DECLARE @Result smalldatetime;
/*以下检测有无续存记录*/
IF (SELECT Count(*) From GHTSH_XCDJB where GHJCB_ID=@GHJCID)>0
BEGIN
Select @Result=MAX(XCJSRQ) From GHTSH_XCDJB Where GHJCB_ID=@GHJCID;
END
ELSE
BEGIN
Select @Result=JC_JSRQ From GHTSH_JCDJB Where GHJCB_ID=@GHJCID;
END
RETURN(@Result);
END