我这里有一个奇怪的问题.我有一个很大的表,在过去几天存储来自Exchange 2007的邮件跟踪日志信息.记录数量为数百万(约10-12百万),每30分钟一次,我通过PowerShell计划任务从所有传输服务器批量插入任何新日志.
每晚一次我运行一个维护任务来清除任何超过一天的日志,以便表格不会变得太大,但是如果可以的话我想保持日志更长一点.
该表称为MessageTracking,并且具有一个主键,即IDENTITY int列,[MessagelogID],每个记录增加1.
[date-time] asc的[date-time]列上有一个非聚集索引.
发件人和收件人字段上有一个全文索引.
用户可以通过我在C#Asp.net中编写的前端网页搜索表格.该页面允许使用4个搜索字段进行基本搜索:
>开始DateTime
>结束日期时间
>发件人
>收件人
这会将查询传递给实际将记录拉回的存储过程.存储过程称为GetMessageTracking.
现在谈到我的奇怪问题.此查询以0秒的形式返回结果,快速闪烁:
USE [DATABASENAME] GO DECLARE @return_value int EXEC @return_value = [dbo].[GetMessageTracking] @maximumRows = 20,@startRowIndex = 0,@sortExpression = N'[date-time]',@SearchStartDate = N'2012-03-27 13:51',@SearchEndDate = N'2012-03-27 20:09',@SearchSender = N'[email protected]',@SearchRecipient = N'Default' SELECT 'Return Value' = @return_value GO
如果我将@SearchStartDate参数改为一小时,即N’2012-03-27 14:51’那么它很长时间都没有完成.
我只能假设我的日期时间索引存在重大问题,因为全文目录通常是空闲的.我遇到的挑战之一是我每小时插入数千条记录,索引(IX_DateTime)很快就会碎片化,但是我想不出一个阻止这种情况发生的好方法.
所以我的问题确实是两个问题:
2)当有大量插入时,有关索引的提示吗?
我想也许是执行计划导致这种奇怪的行为,但似乎没有.我尝试将WITH RECOMPILE选项添加到查询中,这完全没有任何区别.我清除了执行计划缓存也没有效果.
很确定我的问题完全取决于我的索引.
谢谢!
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。