我在 SQL Server 2008 中,我一直在努力让一些旧代码使用参数,而不是使用字符串连接构建查询。我还在努力通过向表中添加索引等事情来加快工作速度。
我正在使用的表有很多列(它是星型模式报告数据库的核心)并且有超过 4M 行。表的创建如下所示:
CREATE TABLE [dbo].[rptTransaction](
...
[Date] [nvarchar](10) NULL,
...
) ON [PRIMARY]
是的,日期列的名称很差,因为它与关键字冲突。他们使用字符串日期[记住它是一个报告数据库]。
当我在 MS SQL Server Management Studio 中执行以下代码时:
DECLARE @testDate NVARCHAR = N'2012/03/01';
SELECT COUNT(*)
FROM rptTransaction AS t
WHERE t.Date >= @testDate
AND t.Date <= @testDate
OPTION (RECOMPILE);
GO
结果如下:
(No column name)
0
另一方面,当我执行以下代码时:
DECLARE @testDate NVARCHAR = N'2012/03/01';
SELECT COUNT(*)
FROM rptTransaction AS t
WHERE t.Date >= N'2012/03/01'
AND t.Date <= N'2012/03/01'
OPTION (RECOMPILE);
GO
结果如下:
(No column name)
124888
(我使用的是 OPTION (RECOMPILE),否则参数化版本会执行全表扫描,这需要很长时间。)