奇怪了---SQL Server中,查询一个月的数据,居然比查询两个月的数据还慢!!!!!

时间:2021-08-10 09:43:15
因为数据比较多,所以,把数据按月建表存放,比如2月份的放在一张表Table2中,3月份的放在表Table3中.
问题出来了,如以下两种情况:
C1:当我查询2月1号到3月10号的数据是,需要把Table2和Table3使用UNION ALL联合起来,速度还可以,加在一起大概200万条数据,1~2秒钟就出来了.

C2:但是,当我只查询3月1号到3月10号的数据的时候,只用到了Table2,查询起来却慢的要死,大概要30~70秒钟的样子.

刚开始想到可能是3月份没有数据,但是两次查找结果都显示3月份有要查找的数据,而且两种情况下,查询结果都是正确的.

Table2与Table3 不同的是,Table2存放2月份的数据,现在是3月份,因此,不会向Table2表再写入数据,而是会根据情况,实时的向
Table3写数据.


我把Table3导出到另外的服务器上,只查询(没有程序对它做写入操作)再执行C2的时候,速度就很快了.

但是C1情况下,也查询了Table3.而且那个时候也有实时数据向这个表中,写入.

不知道问题在哪儿?

纳闷呀,数据库方面接触也比较久了,从来没有碰到过这样的问题.

还请高人指点.

38 个解决方案

#1


更正,上面C2情况:是只用到了"Table3表",而不是"只用到了Table2表".而且到现在,Table3表中的数据也只有50万条.

#2


更正,上面C2情况:是 只用到了 Table3表  ,而不是 只用到了Table2表 而且到现在,Table3表中的数据也只有50万条.

#3


C1:当我查询2月1号到3月10号的数据是,需要把Table2和Table3使用UNION ALL联合起来,速度还可以,加在一起大概200万条数据,1~2秒钟就出来了. 

C2:但是,当我只查询3月1号到3月10号的数据的时候,只用到了Table2,查询起来却慢的要死,大概要30~70秒钟的样子.


3月1-10日数据量呢,而且表上的索引有重建吗

#4


数据量差别太。过滤条件不同造成的。

索引问题。

帮顶一下。

#5


引用 4 楼 liuqian4243 的回复:
数据量差别太。过滤条件不同造成的。

索引问题。

帮顶一下。


谢谢.
不过,问题是查询多的数据比较快,查询少的数据,反而比较慢了.

#6


引用 5 楼 littlegreenfrog 的回复:
引用 4 楼 liuqian4243 的回复:数据量差别太。过滤条件不同造成的。 索引问题。 帮顶一下。

谢谢.
不过,问题是查询多的数据比较快,查询少的数据,反而比较慢了.

你不是说还有写的其他操作吗,

我把Table3导出到另外的服务器上,只查询(没有程序对它做写入操作)再执行C2的时候,速度就很快了. 


你查询时加上锁试试

#7


引用 3 楼 sql77 的回复:
C1:当我查询2月1号到3月10号的数据是,需要把Table2和Table3使用UNION ALL联合起来,速度还可以,加在一起大概200万条数据,1~2秒钟就出来了.

C2:但是,当我只查询3月1号到3月10号的数据的时候,只用到了Table2,查询起来却慢的要死,大概要30~70秒钟的样子.


3月1-10日数据量呢,而且表上的索引有重建吗


C2那种查询是在Table3中查询的(刚才打字打错了),Table2中,存放2月份的数据,大概150万条,Table3中存放3月份的数据,(1号-9号)大概50万条.
索引是使用标识ID建立的,因为这两个表都要求实时的数据插入(1天大概插入5万条),所以没有建立其它索引.

#8


引用 5 楼 littlegreenfrog 的回复:
引用 4 楼 liuqian4243 的回复:数据量差别太。过滤条件不同造成的。 索引问题。 帮顶一下。

谢谢.
不过,问题是查询多的数据比较快,查询少的数据,反而比较慢了.


自己看一下2次的执行计划,应该是索引的问题。

#9


用事件探查器追踪一下

#10


应该和数据更新有关,加上with(nolock)试验下

#11


C1所查询的数据,包括Table2和Table3,而C2所查询的数据,只有Table3.

TO:SQL77 至于加锁机制,我有两个问题:1,会不会导致实时数据无法写入?2,C1查询用到的数据,完全包含了C2,但是C1没有加锁,情况很好,效率比较好.

TO:ldslove:至于索引,两个表的索引是一样,只建立了标识ID索引.

TO:fredrickhu:也使用事件探测器了,不过,我的查询语句只执行了一次,更多的是UPDATE和INSERT语句(实时数据上传写入到数据库).

感谢几位大牛能亲临指点....能不能再给点想法....

#12


DBCC REINDEX 重新建立索引试试

#13


引用 10 楼 zsforever 的回复:
应该和数据更新有关,加上with(nolock)试验下

支持。。。。。。。。。。。

#14


* DBCC DBREINDEX 
重建指定数据库的一个或多个索引 
* DBCC INDEXDEFRAG 
对表或视图上的索引和非聚集索引进行碎片整理 

#15


TO:fredrickhu.索引重新整理了.没有效果.
TO:zsforever.在Table3后面加上with(nolock)了,还是一样,没有效果.

现在的疑惑椒,Table2和Table3联合起来查询,没有问题,挺快的.就是单独查询Table3的数据非常慢....

#16


SELECT * FROM TABLE3 WITH(TABLOCK)


你查一下执行计划是哪的问题,

#17


联合起来查询的语句是怎样的?
是用视图?那是不是视图有索引?

查3月数据怎么查询的,也是联合起来?

#18


引用 16 楼 sql77 的回复:
SQL codeSELECT*FROM TABLE3WITH(TABLOCK)

你查一下执行计划是哪的问题,


使用它查询的时候,会不会影响数据的插入?是延迟插入?还是直接让插入进程牺牲掉?

#19


引用 17 楼 yang_ 的回复:
联合起来查询的语句是怎样的?
是用视图?那是不是视图有索引?

查3月数据怎么查询的,也是联合起来?

就是使用的UNION ALL,直接在SQL语句查询的.
3月份的只在Table3中,没有使用联合.

#20


表示热烈关注
UP
第三行

#21


和你的索引有关。           .

#22


引用 21 楼 acmain_chm 的回复:
和你的索引有关。          .


没有呀,两个表建立了同样的索引,都只是标识ID为索引...
刚刚 删除重新建立了也不行.
然后是删除所有的索引,效果还是一样.

#23


引用 22 楼 littlegreenfrog 的回复:
引用 21 楼 acmain_chm 的回复:和你的索引有关。          .

没有呀,两个表建立了同样的索引,都只是标识ID为索引...
刚刚 删除重新建立了也不行.
然后是删除所有的索引,效果还是一样.

那在两个表的日期字段建立索引试下
另外查询的时候要用
where 日期字段 >= '2010-02-01'
and 日期字段<'2010-03-10'
不要用datediff,dateadd,datepart等函数

#24


引用 23 楼 yang_ 的回复:
引用 22 楼 littlegreenfrog 的回复:引用 21 楼 acmain_chm 的回复:和你的索引有关。          . 没有呀,两个表建立了同样的索引,都只是标识ID为索引... 刚刚 删除重新建立了也不行. 然后是删除所有的索引,效果还是一样.
那在两个表的日期字段建立索引试下
另外查询的时候要用
where 日期字段 >= '2010-02-01'
and 日期字段 <'2010-03-10'
不要用datediff,dateadd,datepart等函数


也试了.还是不管用.

不知道大家对我的问题有什么疑惑,或是没有说清楚的地方没有.

现在的确没有什么其它想法了.

就希望有以前碰到过同样情况的高人,能说说解决办法....以做参考.

#25


因为Table3,有数据实时写入(每天大概4-5万条).
刚才我让写Table3的进程停止了,没有数据写入了.
做上面的查询,还是比较慢,情况没有任何好转.
但是,我把Table3的数据导入到另外的表中(tempTable),再做上面的查询.速度就很快,秒杀(不到1秒钟).

怎么办,怎么办?难道是表出来问题了?
但是,我把Table2与Table3UNION查询的时候,速度也很快,如果是表Table3出现了问题,那这个又做何解释?

#26


C2:但是,当我只查询3月1号到3月10号的数据的时候,只用到了Table2,查询起来却慢的要死,大概要30~70秒钟的样子.


查3月的 为什么要查table2?

#27


引用 26 楼 jaylongli 的回复:
C2:但是,当我只查询3月1号到3月10号的数据的时候,只用到了Table2,查询起来却慢的要死,大概要30~70秒钟的样子.


查3月的 为什么要查table2?


请看前面三楼

最开始打错了,但是CSDN不允许编辑....

#28


2次查询的sql贴出来看看

#29



--C1:第一种情况,选择2月份和3月分的数据
--Table2数据在150万左右,Table3在40万左右,此情况执行耗费在1秒钟左右.
 SELECT b.MID ,--M编号
        b.PID ,--P编号
        COUNT(*) AS deltaCount ,--次数
        SUM(deltaTime) AS deltaTime--总时间
 FROM   ( 
          SELECT    
                    MID ,
                    PID ,
                    maxValue ,--最值
                    DATEDIFF(second, beginTime, endTime) AS deltaTime--时间差
          FROM      Table2
          WHERE     ( beginTime BETWEEN '2010-02-01 00:00:00'
                                AND     '2010-03-09 00:00:00' )
          UNION ALL
          SELECT    MID ,
                    PID ,
                    maxValue ,
                    DATEDIFF(second, beginTime, endTime) AS deltaTime
          FROM      Table3
          WHERE     ( beginTime BETWEEN '2010-02-01 00:00:00'
                                AND     '2010-03-09 00:00:00' )
        ) AS a
        RIGHT JOIN TableGASP AS b ON a.MID = b.MID
                                                        AND a.PID = b.PID
        LEFT JOIN TableGAS AS c ON b.gradealarmid = c.id
 WHERE  a.maxValue >= c.oneLevel --maxValue在[oneLevel,twoLevel),之间
        AND a.maxValue < c.twoLevel
 GROUP BY b.MID ,
        b.PID        


-------------------------------------------------------------

--C2:只选择3月份的数据.
--此情况,耗费1分钟左右.
 SELECT b.MID ,
        b.PID ,
        COUNT(*) AS deltaCount ,
        SUM(deltaTime) AS deltaTime
 FROM   ( 
          SELECT    MID ,
                    PID ,
                    maxValue ,
                    DATEDIFF(second, beginTime, endTime) AS deltaTime
          FROM      Table3
          WHERE     ( beginTime BETWEEN '2010-03-01 00:00:00'
                                AND     '2010-03-09 00:00:00' )
        ) AS a
        RIGHT JOIN TableGASP AS b ON a.MID = b.MID
                                                        AND a.PID = b.PID
        LEFT JOIN TableGAS AS c ON b.gradealarmid = c.id
 WHERE  a.maxValue >= c.oneLevel
        AND a.maxValue < c.twoLevel
 GROUP BY b.MID ,
        b.PID        

#30


请求大家再给予指点..

#31


引用 30 楼 littlegreenfrog 的回复:
请求大家再给予指点..

你查一下执行计划看看,哪里消耗比较多,那些优化的牛人还没帮你看呢,呵呵

#32


大家好,感谢您在百忙之中给予我的关注,谢谢!  
    由于我最近需要搞一个设计,题目就是  《多平台异构数据库复制技术研究》  我在网上找了很多资料,找到的都只有论文,基本上没有关于这设计的源代码,所以我来到这里请大家帮忙, 如果有那位高手有或者会写关于我这个题目的源代码请联系我!  也可以直接加QQ493991609再详谈!       代价好说!

#33


   SELECT    MID ,
                    PID ,
                    maxValue ,
                    DATEDIFF(second, beginTime, endTime) AS deltaTime
          FROM      Table3
          WHERE     ( beginTime BETWEEN '2010-03-01 00:00:00'
                                AND     '2010-03-09 00:00:00' )



这段速度如何

#34


引用 33 楼 ldslove 的回复:
SQL codeSELECT    MID ,
                    PID ,
                    maxValue ,DATEDIFF(second, beginTime, endTime)AS deltaTimeFROM      Table3WHERE     ( beginTimeBETWEEN'2010-03-01 00:00:00'AND'2010-03-09 00:00:00' )


这段速度如何


没有得说.快.
上面两个SQL语句,第一个执行很快,而且包含了第二个,如果第二个因为SQL语句执行有问题的,那第一个也解释不通.

PS:如果两个表一起查询的时候,速度很快,但是如果单独查询Table3的时候,第二个SQL语句中的Group BY语句,会使得查询变的很慢.但是第一个SQL语句中同样也有Group By,而且一样包含Table3的数据.却没有这样的问题.

#35


在查询分析器里面显示预计的执行计划
看看资源在哪被消耗了!

#36


引用 35 楼 zhousq00 的回复:
在查询分析器里面显示预计的执行计划
看看资源在哪被消耗了!


执行了,只是预计的,不是实际的....

谢谢.

#37


结贴,我们头通过重新建索引,把问题解决了.

不过,具体的原因还是没有搞懂.

问题解决了,是件好事.谢谢各位也谢谢我们头.

#38


强制索引就可以了,或着手动的更新索引的统计信息。
因为重建索引会更新索引统计信息,所以会解决你的问题。

一般的作法是强制索引.

#1


更正,上面C2情况:是只用到了"Table3表",而不是"只用到了Table2表".而且到现在,Table3表中的数据也只有50万条.

#2


更正,上面C2情况:是 只用到了 Table3表  ,而不是 只用到了Table2表 而且到现在,Table3表中的数据也只有50万条.

#3


C1:当我查询2月1号到3月10号的数据是,需要把Table2和Table3使用UNION ALL联合起来,速度还可以,加在一起大概200万条数据,1~2秒钟就出来了. 

C2:但是,当我只查询3月1号到3月10号的数据的时候,只用到了Table2,查询起来却慢的要死,大概要30~70秒钟的样子.


3月1-10日数据量呢,而且表上的索引有重建吗

#4


数据量差别太。过滤条件不同造成的。

索引问题。

帮顶一下。

#5


引用 4 楼 liuqian4243 的回复:
数据量差别太。过滤条件不同造成的。

索引问题。

帮顶一下。


谢谢.
不过,问题是查询多的数据比较快,查询少的数据,反而比较慢了.

#6


引用 5 楼 littlegreenfrog 的回复:
引用 4 楼 liuqian4243 的回复:数据量差别太。过滤条件不同造成的。 索引问题。 帮顶一下。

谢谢.
不过,问题是查询多的数据比较快,查询少的数据,反而比较慢了.

你不是说还有写的其他操作吗,

我把Table3导出到另外的服务器上,只查询(没有程序对它做写入操作)再执行C2的时候,速度就很快了. 


你查询时加上锁试试

#7


引用 3 楼 sql77 的回复:
C1:当我查询2月1号到3月10号的数据是,需要把Table2和Table3使用UNION ALL联合起来,速度还可以,加在一起大概200万条数据,1~2秒钟就出来了.

C2:但是,当我只查询3月1号到3月10号的数据的时候,只用到了Table2,查询起来却慢的要死,大概要30~70秒钟的样子.


3月1-10日数据量呢,而且表上的索引有重建吗


C2那种查询是在Table3中查询的(刚才打字打错了),Table2中,存放2月份的数据,大概150万条,Table3中存放3月份的数据,(1号-9号)大概50万条.
索引是使用标识ID建立的,因为这两个表都要求实时的数据插入(1天大概插入5万条),所以没有建立其它索引.

#8


引用 5 楼 littlegreenfrog 的回复:
引用 4 楼 liuqian4243 的回复:数据量差别太。过滤条件不同造成的。 索引问题。 帮顶一下。

谢谢.
不过,问题是查询多的数据比较快,查询少的数据,反而比较慢了.


自己看一下2次的执行计划,应该是索引的问题。

#9


用事件探查器追踪一下

#10


应该和数据更新有关,加上with(nolock)试验下

#11


C1所查询的数据,包括Table2和Table3,而C2所查询的数据,只有Table3.

TO:SQL77 至于加锁机制,我有两个问题:1,会不会导致实时数据无法写入?2,C1查询用到的数据,完全包含了C2,但是C1没有加锁,情况很好,效率比较好.

TO:ldslove:至于索引,两个表的索引是一样,只建立了标识ID索引.

TO:fredrickhu:也使用事件探测器了,不过,我的查询语句只执行了一次,更多的是UPDATE和INSERT语句(实时数据上传写入到数据库).

感谢几位大牛能亲临指点....能不能再给点想法....

#12


DBCC REINDEX 重新建立索引试试

#13


引用 10 楼 zsforever 的回复:
应该和数据更新有关,加上with(nolock)试验下

支持。。。。。。。。。。。

#14


* DBCC DBREINDEX 
重建指定数据库的一个或多个索引 
* DBCC INDEXDEFRAG 
对表或视图上的索引和非聚集索引进行碎片整理 

#15


TO:fredrickhu.索引重新整理了.没有效果.
TO:zsforever.在Table3后面加上with(nolock)了,还是一样,没有效果.

现在的疑惑椒,Table2和Table3联合起来查询,没有问题,挺快的.就是单独查询Table3的数据非常慢....

#16


SELECT * FROM TABLE3 WITH(TABLOCK)


你查一下执行计划是哪的问题,

#17


联合起来查询的语句是怎样的?
是用视图?那是不是视图有索引?

查3月数据怎么查询的,也是联合起来?

#18


引用 16 楼 sql77 的回复:
SQL codeSELECT*FROM TABLE3WITH(TABLOCK)

你查一下执行计划是哪的问题,


使用它查询的时候,会不会影响数据的插入?是延迟插入?还是直接让插入进程牺牲掉?

#19


引用 17 楼 yang_ 的回复:
联合起来查询的语句是怎样的?
是用视图?那是不是视图有索引?

查3月数据怎么查询的,也是联合起来?

就是使用的UNION ALL,直接在SQL语句查询的.
3月份的只在Table3中,没有使用联合.

#20


表示热烈关注
UP
第三行

#21


和你的索引有关。           .

#22


引用 21 楼 acmain_chm 的回复:
和你的索引有关。          .


没有呀,两个表建立了同样的索引,都只是标识ID为索引...
刚刚 删除重新建立了也不行.
然后是删除所有的索引,效果还是一样.

#23


引用 22 楼 littlegreenfrog 的回复:
引用 21 楼 acmain_chm 的回复:和你的索引有关。          .

没有呀,两个表建立了同样的索引,都只是标识ID为索引...
刚刚 删除重新建立了也不行.
然后是删除所有的索引,效果还是一样.

那在两个表的日期字段建立索引试下
另外查询的时候要用
where 日期字段 >= '2010-02-01'
and 日期字段<'2010-03-10'
不要用datediff,dateadd,datepart等函数

#24


引用 23 楼 yang_ 的回复:
引用 22 楼 littlegreenfrog 的回复:引用 21 楼 acmain_chm 的回复:和你的索引有关。          . 没有呀,两个表建立了同样的索引,都只是标识ID为索引... 刚刚 删除重新建立了也不行. 然后是删除所有的索引,效果还是一样.
那在两个表的日期字段建立索引试下
另外查询的时候要用
where 日期字段 >= '2010-02-01'
and 日期字段 <'2010-03-10'
不要用datediff,dateadd,datepart等函数


也试了.还是不管用.

不知道大家对我的问题有什么疑惑,或是没有说清楚的地方没有.

现在的确没有什么其它想法了.

就希望有以前碰到过同样情况的高人,能说说解决办法....以做参考.

#25


因为Table3,有数据实时写入(每天大概4-5万条).
刚才我让写Table3的进程停止了,没有数据写入了.
做上面的查询,还是比较慢,情况没有任何好转.
但是,我把Table3的数据导入到另外的表中(tempTable),再做上面的查询.速度就很快,秒杀(不到1秒钟).

怎么办,怎么办?难道是表出来问题了?
但是,我把Table2与Table3UNION查询的时候,速度也很快,如果是表Table3出现了问题,那这个又做何解释?

#26


C2:但是,当我只查询3月1号到3月10号的数据的时候,只用到了Table2,查询起来却慢的要死,大概要30~70秒钟的样子.


查3月的 为什么要查table2?

#27


引用 26 楼 jaylongli 的回复:
C2:但是,当我只查询3月1号到3月10号的数据的时候,只用到了Table2,查询起来却慢的要死,大概要30~70秒钟的样子.


查3月的 为什么要查table2?


请看前面三楼

最开始打错了,但是CSDN不允许编辑....

#28


2次查询的sql贴出来看看

#29



--C1:第一种情况,选择2月份和3月分的数据
--Table2数据在150万左右,Table3在40万左右,此情况执行耗费在1秒钟左右.
 SELECT b.MID ,--M编号
        b.PID ,--P编号
        COUNT(*) AS deltaCount ,--次数
        SUM(deltaTime) AS deltaTime--总时间
 FROM   ( 
          SELECT    
                    MID ,
                    PID ,
                    maxValue ,--最值
                    DATEDIFF(second, beginTime, endTime) AS deltaTime--时间差
          FROM      Table2
          WHERE     ( beginTime BETWEEN '2010-02-01 00:00:00'
                                AND     '2010-03-09 00:00:00' )
          UNION ALL
          SELECT    MID ,
                    PID ,
                    maxValue ,
                    DATEDIFF(second, beginTime, endTime) AS deltaTime
          FROM      Table3
          WHERE     ( beginTime BETWEEN '2010-02-01 00:00:00'
                                AND     '2010-03-09 00:00:00' )
        ) AS a
        RIGHT JOIN TableGASP AS b ON a.MID = b.MID
                                                        AND a.PID = b.PID
        LEFT JOIN TableGAS AS c ON b.gradealarmid = c.id
 WHERE  a.maxValue >= c.oneLevel --maxValue在[oneLevel,twoLevel),之间
        AND a.maxValue < c.twoLevel
 GROUP BY b.MID ,
        b.PID        


-------------------------------------------------------------

--C2:只选择3月份的数据.
--此情况,耗费1分钟左右.
 SELECT b.MID ,
        b.PID ,
        COUNT(*) AS deltaCount ,
        SUM(deltaTime) AS deltaTime
 FROM   ( 
          SELECT    MID ,
                    PID ,
                    maxValue ,
                    DATEDIFF(second, beginTime, endTime) AS deltaTime
          FROM      Table3
          WHERE     ( beginTime BETWEEN '2010-03-01 00:00:00'
                                AND     '2010-03-09 00:00:00' )
        ) AS a
        RIGHT JOIN TableGASP AS b ON a.MID = b.MID
                                                        AND a.PID = b.PID
        LEFT JOIN TableGAS AS c ON b.gradealarmid = c.id
 WHERE  a.maxValue >= c.oneLevel
        AND a.maxValue < c.twoLevel
 GROUP BY b.MID ,
        b.PID        

#30


请求大家再给予指点..

#31


引用 30 楼 littlegreenfrog 的回复:
请求大家再给予指点..

你查一下执行计划看看,哪里消耗比较多,那些优化的牛人还没帮你看呢,呵呵

#32


大家好,感谢您在百忙之中给予我的关注,谢谢!  
    由于我最近需要搞一个设计,题目就是  《多平台异构数据库复制技术研究》  我在网上找了很多资料,找到的都只有论文,基本上没有关于这设计的源代码,所以我来到这里请大家帮忙, 如果有那位高手有或者会写关于我这个题目的源代码请联系我!  也可以直接加QQ493991609再详谈!       代价好说!

#33


   SELECT    MID ,
                    PID ,
                    maxValue ,
                    DATEDIFF(second, beginTime, endTime) AS deltaTime
          FROM      Table3
          WHERE     ( beginTime BETWEEN '2010-03-01 00:00:00'
                                AND     '2010-03-09 00:00:00' )



这段速度如何

#34


引用 33 楼 ldslove 的回复:
SQL codeSELECT    MID ,
                    PID ,
                    maxValue ,DATEDIFF(second, beginTime, endTime)AS deltaTimeFROM      Table3WHERE     ( beginTimeBETWEEN'2010-03-01 00:00:00'AND'2010-03-09 00:00:00' )


这段速度如何


没有得说.快.
上面两个SQL语句,第一个执行很快,而且包含了第二个,如果第二个因为SQL语句执行有问题的,那第一个也解释不通.

PS:如果两个表一起查询的时候,速度很快,但是如果单独查询Table3的时候,第二个SQL语句中的Group BY语句,会使得查询变的很慢.但是第一个SQL语句中同样也有Group By,而且一样包含Table3的数据.却没有这样的问题.

#35


在查询分析器里面显示预计的执行计划
看看资源在哪被消耗了!

#36


引用 35 楼 zhousq00 的回复:
在查询分析器里面显示预计的执行计划
看看资源在哪被消耗了!


执行了,只是预计的,不是实际的....

谢谢.

#37


结贴,我们头通过重新建索引,把问题解决了.

不过,具体的原因还是没有搞懂.

问题解决了,是件好事.谢谢各位也谢谢我们头.

#38


强制索引就可以了,或着手动的更新索引的统计信息。
因为重建索引会更新索引统计信息,所以会解决你的问题。

一般的作法是强制索引.