我有一个应用程序,我正在访问SQL服务器后端.使用最频繁的部分之一是用户选择问题的答案,然后触发存储过程,查看是否已经给出答案,是否执行了UPDATE,如果没有执行INSERT.
这工作得很好,但现在我们已升级到SQL server 2008 express我想知道重写此SP以使用新的MERGE命令是否会更好/更快/更有效.
有没有人知道这是否比执行SELECT后跟INSERT或UPDATE更快?
我有一张目前规模相当适中的桌子,但会增长到几百万行,所以我想从一开始就建立起来.
该表包含15个左右的列,其中包含代理电话性能的信息,但这并不是真正相关的.在此表上运行的查询之一通过agent_ID查看上个月4列中的数据.当然,通常我只会在Agent_ID和日期上覆盖索引,包括4列并完成它,但我想看看我是否能比这更聪明.
因为我正在使用SQL Server 2008R2,我想我会看一下过滤索引,只有索引填充当前月份的数据.问题是我似乎无法接受除过滤器上的硬值之外的任何其他内容.
我是不是用这个咆哮着错误的树,你甚至可以在SQL服务器上做到这一点,而不必诉诸于两个表或其他类型的分区?
编辑:感谢Marcus我知道如果没有一些手工工作,就不可能做到这一点.
为此,我制作了这个脚本,我将在每个月的开始时在黑暗时段运行以移动索引窗口
USE [Tracker_3]
GO
DECLARE @FirstOfMonth datetime
DECLARE @LastOfMonth datetime
declare @strSQL as varchar(max)
set @FirstOfMonth = CONVERT(smalldatetime, CONVERT(varchar(4), DATEPART(yy, GETDATE())) + '-' + CONVERT(varchar(2), DATEPART(mm, GETDATE())) + '-' + '1')
set @LastOfMonth = DATEADD(dd, -1, DATEADD(mm, +1, @FirstOfMonth))
set @strSQL='
CREATE NONCLUSTERED INDEX [tblAgent_int_data_Covering_1] ON [dbo].[tblAgent_interval_data]
(
[Login_ID] ASC,
[Date] ASC
)
INCLUDE ( [i_acdtime],
[i_acwtime],
[holdacdtime],
[acdcalls])
WHERE [date] >= ''' + convert(char(10),convert(date,@firstOfMonth)) + ''' AND [date] <= '''+ convert(char(10),convert(date,@LastOfMonth)) + …Run Code Online (Sandbox Code Playgroud)