请教一个问题:我在做查询的时候,速度有时很慢,常出现超时已过期提示,请问:有没有一种很好的提高查询速度的方法。 
是不是与我写的SQL语句有关,我的SQL语句是这样的:select top 200 InfoRecordID,CalleeID,CallerID,FeeTerminalID,NeedTime,Content,direction,RetCode,b.user_name username from sendDb..inforecord a left join sys_user b on a.employeeid=b.user_id where (needtime between '2007-1-8' and '2007-1-9') and (calleeid in (select spno from chat_config) or callerid in(select spno from chat_config)) order by needtime desc 
请指点。 
若建立索引,像我这样的查询语句,应如何建索引较好。

解决方案 »

  1.   

    needtime和calleeid应该各自建立单列索引,可以尝试把needtime建立为聚集索引
      

  2.   

    可以对callerid ,calleeid ,needtime,employeeid 分别建立索引.
    另:查询可以这样改.
    select top 200 InfoRecordID,CalleeID,CallerID,FeeTerminalID,NeedTime,Content,direction,RetCode into #temp_table
    from sendDb..inforecord  where (needtime between '2007-1-8' and '2007-1-9') and (calleeid in (select spno from chat_config) or callerid in(select spno from chat_config)) order by needtime desc select top 200 * ,b.user_name username from #temp_table a left join sys_user b on a.employeeid=b.user_id order by needtime desc
    这种改法针对sys_user表的记录数效多的情况有效.
      

  3.   

    callerid和employeeid也要分别建立单列索引
      

  4.   

    如果你的SQL语句都是这种构架的话,直接建立两个覆盖索引好了。
    我认为应该从数据结构开始修改。
    你的SQL中存在跨库查询的部分,会影响速度的。
    同时判断条件中最好不要使用or。