大規模なデータベーステーブル(SQL Server 2008)を使用していますが、私のフォーラムメッセージはすべて保存されています(テーブルには現在450万以上のエントリがあります)。SQLクエリにタイムアウトが多く発生する
これは、テーブルのスキーマです:私は帰ってくる参照
CREATE TABLE [dbo].[ForumMessage](
[MessageId] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[ForumId] [int] NOT NULL,
[MemberId] [int] NOT NULL,
[Type] [tinyint] NOT NULL,
[Status] [tinyint] NOT NULL,
[Subject] [nvarchar](500) NOT NULL,
[Body] [text] NOT NULL,
[Posted] [datetime] NOT NULL,
[Confirmed] [datetime] NULL,
[ReplyToMessage] [int] NOT NULL,
[TotalAnswers] [int] NOT NULL,
[AvgRateing] [decimal](18, 2) NOT NULL,
[TotalRated] [int] NOT NULL,
[ReadCounter] [int] NOT NULL,
CONSTRAINT [PK_GroupMessage] PRIMARY KEY CLUSTERED
(
[MessageId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
1つの問題は、私はメッセージとそのすべての返信を選択し、私のストアドプロシージャを実行しているとき、私はいつかタイムアウトを取得するということですSQLサーバーからのエラー。
これは私のストアドプロシージャです:「操作が完了する前に経過し、タイムアウト期間タイムアウトの期限が切れたり、サーバーが応答しない」
:select fm1.[MessageId]
,fm1.[ForumId]
,fm1.[MemberId]
,fm1.[Type]
,fm1.[Status]
,fm1.[Subject]
,fm1.[Body]
,fm1.[Posted]
,fm1.[Confirmed]
,fm1.[ReplyToMessage]
,fm1.[TotalAnswers]
,fm1.[AvgRateing]
,fm1.[TotalRated]
,fm1.[ReadCounter],
Member.NickName AS MemberNickName, Forum.Name as ForumName
from ForumMessage fm1 LEFT OUTER JOIN
Member ON fm1.MemberId = Member.MemberId INNER JOIN
Forum On fm1.ForumId = Forum.ForumId
where MessageId = @MessageId or [email protected]
order by MessageId
私は次のようになりますエラー
私は実行計画を見ていましたが、疑わしいと思われるのは、forummessageテーブルのキールックアップでクエリのコストが約75%〜87%私はそれがクラスタ化されているので、理由を理解していないので、もっと効率的になると思っていました)。私はいつもクラスタリングされたインデックスで検索すると、クエリは非常に効率的でなければならないという仮定の下にあった。
メッセージとその返信を受け取るためにこの問題とこのクエリをどのように改善することができますか?
ありがとうございました。
質問に実行計画を含めることはできますか? – Justin
なぜロフトは参加しますか?すべてのメッセージはメンバーからのものでなければなりませんか? – HLGEM