- 締切済み
SQL Server2005 2008の文字列検索のスピードについて
SQL Server2005 2008の文字列検索のスピードについて 初歩的な質問で申し訳ありません。 下記のような文字列比較にて処理結果取得時間に差がある理由が知りたいのですが? ご存知の方がいらっしゃいましたらご回答願います。 下記の処理パターンで調査した結果「パターン1」の処理結果は早いのですが、 「パターン2と3」は、処理結果取得までに数分かかります。 (抽出結果は20件程度) SELECT COUNT(*) FROM [dbo].[注文データ] パターン1 WHERE [注文データ].[納品日] > (SELECT CONVERT(VARCHAR,DATEADD(dd,-10,GETDATE()),112) FROM DUAL) パターン2 WHERE [注文データ].[納品日] > CONVERT(VARCHAR,DATEADD(dd,-10,GETDATE()),112) パターン3 WHERE [注文データ].[納品日] > '20100601' CREATE TABLE [dbo].[注文データ]( [品番] [varchar](10) NOT NULL, [品名] [varchar](60) NOT NULL, [発注数量] [decimal](9, 2) NOT NULL, [納品日] [char](8) NOT NULL, PRIMARY KEY CLUSTERED ( [納品日] ASC, [品番] ASC ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON ) ON [PRIMARY] ) ON [PRIMARY] CREATE TABLE [dbo].[DUAL]( [DUMMY_COL] [varchar](1) NOT NULL, CONSTRAINT [PK_DUAL] PRIMARY KEY CLUSTERED ( [DUMMY_COL] ASC ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON ) ON [PRIMARY] ) ON [PRIMARY] ■「注文データ」テーブルは過去1年間の累積で 120万件程度の注文履歴ファイルとする。 ■「DUAL」テーブルは「DUMMY_COL」に「0」をセットした 1件のデータとする。 よろしくお願い致します。 m(_ _)m
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- jamshid6
- ベストアンサー率88% (591/669)
普通に考えたらありえないことですね。 パターン1が一番時間コストがかかるはずです。 (パターン1のみ、IndexSeek×2+Inner Loop Join、他はIndexSeekのみ) 気になったので実際に150万件生成してキャッシュクリアして試してみましたが、パターン1が一番コストがかかります。 しかしその時間の掛かり方はパターン2、3「だけ」フルスキャンになっているとしか考えられないですね。 (ここに書かれてないことが影響しているとしか思えません) 載っているのは本物ではなくサンプルだと思うので、一回クエリプランを確認してみてください。
お礼
jamshid6 様 お返事遅くなり申し訳ありません。 回答ありがとうございました。 頂いた回答ですとまったく私の結果と逆になるとの事ですよね? 「普通に考えたらありえないことですね。」その通りだと... 不思議です。 クエリプランを確認して環境含めて見直してみます。 ありがとうございました。