表记录被锁住,,,本帖最后由 Newlychen 于 2012-12-05 08:05:16 编辑1、select * from A where ccdate betwe
表记录被锁住,,,
本帖最后由 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.
------解决方案--------------------
先运行set statistics io on 和set statistics time on
再显示实际执行计划
再运行
然后把消息帖上来,计划截图发上来
单看两句语句能看出啥
这帖子推荐。。。。
[解决办法]自己不明白原因的话,至少可以多跑几次,在不同时间段跑,把表中记录插入临时表再用同样条件查询,很多方法可以查出问题。
[解决办法]路过,学习学习
[解决办法]不知道每次都是这样的,还是偶然现象
[解决办法]先從執行計劃分析,看兩條語句的執行計劃成本,是否應用索引?
如果table A沒有聚集索引,在ccdate列上也沒有建索引,再加上table A數據量大,就會table scan ,那麼兩條查詢的時間自然會有很大的差異。
如果執行上面的2條查詢時候,還有其他的應用程序在對表A進行更新操作,同樣就會導致表鎖,自然查詢時間會有大差異。