Я унаследовал новую систему, и я пытаюсь внести некоторые улучшения в данные. Я пытаюсь улучшить эту таблицу и, похоже, не могу понять мои выводы.Почему этот запрос быстрее без индекса?
Я имею следующую структуру таблицы:
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 записей в нем. Мне нужно вернуть все записи, у которых дата больше определенной даты. В этом случае 12/1/2009. Этот запрос вернет около 66 тыс. Записей, и для запуска потребуется около 4 секунд. Из прошлых систем, над которыми я работал, это кажется высоким. Особенно учитывая, как мало записей в таблице. Поэтому я хотел бы принести это время.
Так что мне интересно, что было бы хорошим способом принести это? Я попытался добавить столбец даты в таблицу и преобразовать дату строки в столбец фактической даты. Затем я добавил индекс в этот столбец, но время оставалось неизменным. Учитывая, что не так много записей, я вижу, как сканирование таблицы может быть быстрым, но я бы подумал, что индекс может сократить время.
Я также рассматривал вопрос о том, как просто запрашивать столбцы месяца и года. Но я еще не пробовал. И хотел бы, если это возможно, оставить его в поле «Дата». Но если нет, я могу это изменить.
Любая помощь приветствуется.
EDIT: Вот запрос, который я пытаюсь запустить и проверить скорость таблицы. Я обычно ставлю из колонок, но только для простоты я использовал *:
SELECT *
FROM _FirstSlaLevel_Tickets_New
WHERE TicketRecvdDateTime >= '12/01/2009'
EDIT 2: Итак, я упомянул, что я попытался создать таблицу со столбцом даты, которая содержала данные recvddate, но в качестве даты, а не варчар. Это то, что столбец TicketRecvdDateTime находится в запросе выше. Исходный запрос я бегу к этой таблице:
SELECT *
FROM Calls
WHERE CAST(RecvdDate AS DATE) >= '12/01/2009'
Что такое * точный запрос, который вы используете, пожалуйста? – gbn 2010-11-29 19:00:54
Да, извините. Позвольте мне редактировать и добавлять. Я забыл включить. – spinon 2010-11-29 19:03:36
Что такое TicketRecvdDateTime? Это где-то вычисленный столбец; или почему это не в вашей декларации таблицы? – 2010-11-29 19:13:39