按索引字段查询时报错

Posted fooa_fooa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按索引字段查询时报错相关的知识,希望对你有一定的参考价值。

前几天解决客户问题时,碰到一个现象。

   当客户查询一张表时,报错, 如下:

            

 Location:  statutil.cpp:3225
Expression:  m_fInitialized && m_statBlob.CbSize() && iKey >= -1 && iKey < m_statBlob.GetHeader()->GetKeyCount()
SPID:  61
Process ID:  1876
消息 3624,级别 20,状态 1,第 1 行
系统断定检查已失败。有关详细信息,请查看 SQL Server 错误日志。通常,断定失败是由软件错误或数据损坏导致的。若要检查数据库是否已损坏,请考虑运行 DBCC CHECKDB。如果您同意在安装过程中将转储发送到 Microsoft,则将向 Microsoft 发送微型转储。更新可能在 Microsoft 的最新 Service Pack 或技术支持部门的 QFE 中提供。 
消息 0,级别 20,状态 0,第 0 行
当前命令发生了严重错误。应放弃任何可能产生的结果。 
 
看到这错误 ,给人的第一印像是 数据库里是不是有坏页了,所以随即对整个库做  DBCC CHECKDB 的检查(当然对那特定的表做检查也是快速定位错误的一种途径),但检查的 0 个分配错误和 0 个一致性错误 。这倒让我有些差异,随即查看 error log ,发现用户在几分钟前重启过sql server 服务,并且当时数据库里的这张表正在重新组织索引,那么这时就把这问题基本上缩小范围了。
此时,我这样做了一下验证,通过其它字段查询同样一条内客是可以的,但就是用特定的那个字段去查询会报错,又通过 sp_helpindex 查看这张表上的索引情况,发现出问题的字段上果然有索引,所以让客户把涉汲这个字段的索引全部删除重建,再去查询就正常了。
 
事后问客户,为啥重启sql 服务,他们说在重新组织索引时,发现等了半天也没有动静,以为卡死了,所以就重启了。
 
关于重建索引,重新组织索引,以及联机索引的知识,请参考后续的博客,谢谢。

以上是关于按索引字段查询时报错的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE 大表索引问题:数据量5亿+,做查询,按时间一个月分区,查询会用到3 4个字段,如何见索引

MySQL5.7创建唯一索引时报错提示Duplicate entry * for key *

索引或主关键字不能包含一个 空 (Null) 值。

sqlserver 在数据查询时是按时间顺序排列的 在时间字段上还有必要加聚集索引吗 为啥

ElasticsearchES删除索引时报错“wildcard expressions or all indices are not allowed

MySQL 中的索引,用于按 DESC、BETWEEN 和几个可能的字段集进行查询