Я унаследовал новую систему, и я пытаюсь внести некоторые улучшения в данные. Я пытаюсь улучшить эту таблицу и не могу понять мои выводы.
У меня следующая структура таблицы:
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)
В этой таблице около 220 тыс. Записей. Мне нужно вернуть все записи, у которых дата больше определенной даты. В этом случае 01.12.2009. Этот запрос вернет около 66 тыс. Записей, и его выполнение займет около 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'