对JC_KSRQ,GHJCB_ID等字段进行索引

解决方案 »

  1.   

    试试把order后面的寄存开始日期去掉看看.
    select (Year(寄存结束日期)-Year(寄存开始日期)) as 寄存年数,* From GHTSH_VIEW  Order by (寄存结束日期)-Year(寄存开始日期)
      

  2.   

    你用 create index 建立索引,而不用 order by试试;另外,你的
    Order by (寄存结束日期)-Year(寄存开始日期),我没看懂。前面有没有 Year?
      

  3.   

    你有没有试过这样?Select * From GHTSH_VIEW这样的速度是多少呢?你可以一步步的排除可能!学习就这样。。还有,建立Index也是必要的.
      

  4.   

    我认为肯定是索引的问题! 可以对  JC_KSRQ、GHJCB_I两个字段分别建立单索引和联合索引测试一下效率 也可以用 Analysis的索引分析器看看系统推荐的索引 另外不知道dbo.Return_Max_Date和(寄存结束日期)-Year(寄存开始日期)这里会不会对效率的影响很大! 因为我觉得按你的数据量来说,即使不建索引也不应该 TimeOut的
      

  5.   

    不可置信!
    你有没有DBA?用它运行检查一下!
      

  6.   

    Select (Year(寄存结束日期)-Year(寄存开始日期)) as 寄存年数,* 
    From GHTSH_VIEW 
    Order by 1,寄存开始日期
      

  7.   

    把 Year(寄存结束日期)-Year(寄存开始日期)) ,(寄存结束日期)-Year(寄存开始日期)   在视图 GHTSH_VIEW   建立对应的字段名( 取个名字)在查询时不要对视图的计算字段 在视图外再计算。
      

  8.   

    1. 最好取消视图
    2. 瓶颈应该在order by,你的应用不会使用全部的7000条数据吧,为什么要全部选出来呢,限制一下条数吧.用翻页的话只需要定位到翻页所需的几条数据就行了
      

  9.   

    用dbo.Return_Max_Date排序应该会占用很多时间,视图并不会解决问题,用一个中间表或临时表
      

  10.   

    To qiubolecn(来自差生市) 我是丢了year了, 
    to  yeath(无敌枪手),如果我要的是全部数据呢,何况才7000条呢,
    TO :yuanjujing(※挪威森林※)你说的方法我早试过了,超时已过期,关键在于order by 语句.
    To  CoolSlob() :select * from ghtsh_view试过的,超不过1秒钟.
    To Delphi_study(),你的方法我也试过了,
    主要就是order by 语句惹的祸
      

  11.   

    不要写那么复杂的sql语句!应该分几部完成!几个简单的sql语句要比一个复杂的用的时间还要长呢!
      

  12.   

    View中增加:
    year(jc_ksrq)-year(dbo.Return_Max_Date(GHJCB_ID)) as 寄存年数查询写成:
    select * From GHTSH_VIEW  Order by 寄存年数,寄存开始日期试试!
      

  13.   

    谢谢各位:
    我的问题还是没有解决,但是我明白是怎么回事了,这不是简单的加上索引就能解决的事,虽然加上索引可以提高速度,我还忘记了,我的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