日期:2014-05-18  浏览次数:20474 次

100分求助,请帮忙看看下面的SQL2005查询问题
使用下面的语句检索“一线城市”的数据,例如:北京/上海/深圳等,检索非常的慢,且很少能检索出来数据,并在程序中提示“超时时间已到。在操作完成之前超时时间已过或服务器未响应”。
但是,在检索“二线城市”的数据,例如:成都/西安等,检索就能出来,检索效率还挺快。
请各位兄弟、大老们看看,为什么出现这样的问题,问题在什么地方,应该如何解决这个问题。

表内数据量说明:
西安:8088条数据
成都:9670条数据
北京:124028条数据
上海:73070条数据
深圳:29233条数据

select top(20) [jobCode],[JobLocation],[issueTime],[UpToTime],[EditTime]
from dbo.EnterpriseJob
where contains([JobLocation],'北京')
  and [UpToTime] >convert(char(19),getdate(),120)
  and [issueTime] <convert(char(19),getdate(),120)
  and [State] ='A'
  and [JobStatus] ='O'
  order by [issueTime] desc
条件说明:1 全文检索“JobLocation”地名字段
  2 检索条件:1)数据必须是当前时间必须大于“issueTime”字段时间(issueTime字段为datatime类型);
  2)数据必须是当前时间必须小于“UpToTime”字段时间(UpToTime字段为datatime类型)

------解决方案--------------------
探讨
1看执行计划
2问题应该在于选取了大量数据后进行排序
3把issueTime做进全文索引
4尽量不用issueTime排序,或者可以换成同等的ID排序

------解决方案--------------------
探讨
如果只是存放城市名称,不含其它地址信息,不必要建全文索引。建普通索引即可