我继承了一个新系统,我正在尝试对数据进行一些改进。我正在尝试改进这张表,但似乎无法理解我的发现。
我有以下表结构:
CREATE TABLE [dbo].[Calls](
[CallID] [varchar](8) NOT NULL PRIMARY KEY,
[RecvdDate] [varchar](10) NOT NULL,
[yr] [int] NOT NULL,
[Mnth] [int] NOT NULL,
[CallStatus] [varchar](50) NOT NULL,
[Category] [varchar](100) NOT NULL,
[QCall] [varchar](15) NOT NULL,
[KOUNT] [int] NOT NULL)
该表中有大约 220k 条记录。我需要返回日期大于特定日期的所有记录。在这种情况下,2009 年 12 月 1 日。此查询将返回大约 66k 条记录,运行大约需要 4 秒。从我过去研究过的系统来看,这似乎很高。特别是考虑到表中的记录很少。所以我想把时间缩短。
所以我想知道有什么好的方法可以降低它?我尝试将日期列添加到表中并将字符串日期转换为实际日期列。然后我在该日期列上添加了一个索引,但时间保持不变。鉴于没有那么多记录,我可以看到表扫描如何快速,但我认为索引可以缩短时间。
我还考虑过只查询月份和年份列。但我还没有尝试过。如果可能,希望将其保留在日期列之外。但如果不是我可以改变它。
任何帮助表示赞赏。
编辑:这是我试图运行并测试表速度的查询。我通常会列出列,但为了简单起见,我使用了 * :
SELECT *
FROM _FirstSlaLevel_Tickets_New
WHERE TicketRecvdDateTime >= '12/01/2009'
编辑2:所以我提到我试图创建一个包含recvddate数据但作为日期而不是varchar的日期列的表。这就是上面查询中的 TicketRecvdDateTime 列。我针对此表运行的原始查询是:
SELECT *
FROM Calls
WHERE CAST(RecvdDate AS DATE) >= '12/01/2009'