表记录被锁住,,,
本帖最后由 Newlychen 于 2012-12-05 08:05:16 编辑
            1、select * from A where ccdate 
between '2011-01-01' and '2011-12-31'--记录11000,耗时31秒
2、select * from A where ccdate 
between '2012-01-01' and '2012-03-31'--记录880,耗时55分钟
请问是否有什么东东锁住了between '2012-01-01' and '2012-03-31' 这段时间的数据?
------解决方案--------------------不是数据被锁,应该是没索引,表扫描了
你对 ccdate  建个索引看看.
------解决方案--------------------ccdate字段加索引 
语句修改为
select * from A where ccdate>='2011-01-01' and  ccdate<='2011-12-31'
试试
另外这个还与结果集有关系。
------解决方案--------------------
try:
create nonclustered index ccdate_idx on tb(ccdate asc)
go
select * from tb where between '2011-01-01' and '2011-12-31'
go
------解决方案--------------------如果你的这段时间内的数据量在表里的所有数据中比例比较大   索引就没多大作用了
------解决方案--------------------1、对ccdate建立索引
CREATE CLUSTERED INDEX mycol_ccdate_index ON A(ccdate) 
2、查询select后面*换成较少的需要的字段试试
select col1,col2 from A where ccdate>'2012-01-01' and ccdate<='2012-03-31'
------解决方案--------------------具体要看执行计划和阻塞情况:
看阻塞:select * from sys.sysprocesses where blocked<>0
执行计划贴出来
------解决方案--------------------select * from A where ccdate between '2012-01-01' and '2012-03-31'--记录880,耗时55分钟
应该是查询执行时,有数据被更新等导致的排他锁存在。
------解决方案--------------------
可能性不大。因为耗时55分钟。这个时间太长。修改一条数据不可能几十分钟.不过楼主可以先检查锁.
------解决方案--------------------问一下你的表没分区或者A不是视图吧?
------解决方案--------------------ccdate 上建聚集索引会提高SELECT 速度 
1、select * from A where ccdate with (nolock) between '2011-01-01' and '2011-12-31'--记录11000,耗时31秒
2、select * from A where ccdate with (nolock) between '2012-01-01' and '2012-03-31'--记录880,耗时55分钟
--加上nolock再测测
加上快照隔离或脏读
通过sp_lock/sys.dm_tran_locks查看锁信息
------解决方案--------------------楼上  with (nolock) 要加在表后面
------解决方案--------------------进来学习,高手真多
------解决方案--------------------这个问题值得探讨一下,推荐一下
------解决方案--------------------learning.
------解决方案--------------------