テーブルにデータ型がどのようなものであるか尋ねることができますか?また、どのタイプのマシンを実行していますか?
何かが足りないようです。私はいくつかのテストデータを用意して上記のクエリを実行しました。maxdop 1
で実行していても、ほぼ即座にクエリが実行されます。
ここに私のテストデータがあります:あなたは、データのサイズので、限り、彼らは許容値のドメイン内にあり、あなたがほとんど保証一致していると数字の任意の組み合わせを選択することができます以下
create table dbo.tbl (
intCol int,
varcharCol varchar(128),
datetimeCol datetime);
insert tbl (
intCol,
varcharCol,
datetimeCol)
select top (6000000)
abs(checksum(newid())) % 100,
abs(checksum(newid())) % 100,
convert(datetime, abs(checksum(newid())) % 50000)
from sys.all_columns a
cross join sys.all_columns b;
create nonclustered index uc
on tbl (intCol, varcharCol, datetimeCol);
セットはかなりです。
declare
@intval int = 50,
@varchr varchar(128) = '55',
@from datetime = '1900-01-01',
@to datetime = '1950-01-01';
set nocount on;
set statistics io on;
set statistics time on;
select count(*) -- select *
from tbl
where intCol = @intval
and varcharCol = @varchr
and datetimeCol between @from and @to
option (maxdop 1);
set statistics time off;
set statistics io off;
結果は、実行時間が最小であることを示しています。
-----------
221
Table 'tbl'. Scan count 1, logical reads 5, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.
また、私が見るクエリプランは、元の投稿で述べたものと似ています。これは、集約とwhere句を使用した簡単なクエリの典型的な実行計画とコストです。
![Query Cost](https://i.stack.imgur.com/Sp2EP.png)
インデックス付きビューhttp://aboutsqlserver.com/2011/03/24/indexed-materialized-views-in-microsoft-sql-server/を考えてみましょう – Bas
まず、インデックスを置くしようとすることができあなたの**プライマリキー**のようなもの** - IDのようなもの)。それは単なる4バイトの 'int'なので、インデックスは行の数を決定するために読み込まれるページ数が少なくて済みます。または、システムカタログビューを使用してテーブルの行の概数**を取得することもできます –
SQL Serverのバージョンによっては、特に日付範囲の一部を考慮して、列ストアインデックスを考慮することもできますあなたの質問。 –