新しいシステムを継承し、データを改善しようとしています。私はこの表を改善しようとしていますが、私の発見を理解できないようです。
私は次のテーブル構造を持っています:
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)
このテーブルには、約22万件のレコードが含まれています。特定の日付よりも古い日付を持つすべてのレコードを返す必要があります。この場合、2009年12月1日。このクエリは約66kレコードを返し、実行には約4秒かかります。過去のシステムから、私がこれに取り組んできたのは高いようです。特に、テーブルにあるレコードの数を考えると。ですから、その時間を減らしたいと思います。
だから私はそれを下げるためのいくつかの良い方法は何でしょうか?テーブルに日付列を追加し、文字列dateを実際の日付列に変換してみました。次に、その日付列にインデックスを追加しましたが、時刻は同じままでした。レコードがそれほど多くないことを考えると、テーブルスキャンがどのように高速であるかはわかりますが、インデックスによってその時間が短縮される可能性があると思います。
また、月と年の列をクエリすることも検討しました。しかし、私はまだそれを試していません。また、可能であれば日付列から外したいと思います。しかし、そうでなければ私はそれを変えることができます。
どんな助けでも大歓迎です。
編集:これが私が実行しようとしているクエリであり、テーブルの速度をテストしています。私は通常列を出しますが、簡単にするために使用しました*:
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'