大きなテーブルの巨大なデータベースがありますが、複数のテーブルからのデータ取得 (クエリは約 10 個の内部結合で構成されています) では、データベースからデータを取得するのに時間がかかりすぎます (場合によっては 10 ~ 20 秒または数分)。クエリには、ほとんどのテーブルのほぼすべての列と、残りのほぼ半分の列が必要です。
私の質問は、私の場合、SQL Server 2012 列ストア アーキテクチャを使用することがどれほど役立つかということです。現在、私はSQL Server 2008を使用しています。このタイプのクエリを最適化する必要があるため、時間の最適化に関する他の提案は大歓迎です
SELECT Seq.SeqId,Seq.ThreadId, Seq.Subject,LastAccessed, Seq.State, Seq.AlarmSent,Prop.RegionCode ,Seq.Rating , Seq.ClassId, Seq.SeqMedium,
Seq.SeqPriority, Seq.StatusDate , Seq.SeqCreateDt, Seq.StartDate, Seq.LastModified, Seq.Resolved, Seq.SeqSrcId, Seq.StatusReason , SeqDocument.DocId,
SeqDocument.IsCheckedOut, SeqDocument.CheckedOutById , SeqDocument.Remarks, Prop.PahLName ,OC.ClassID,OC.ClassName,OC.ClassShortName,OC.Description ,
OC.ParentID,OC2.ClassName AS ParentClassName,OC.OrgID ,CM.DeptID,CM.Severity,CM.Nature ,ST.TargetClsId,ST.TargetSubClsId,ST.TargetId, ST.ResponderActive,
ST.TargetType, ST.SentDate ,SF.FlowId, SF.InwardNo, SF.OutwardNo,SF.InwardDate,SF.OutwardDate ,SF.FlowOrder,SF.OriginatorState,SF.ResponderState,SF.PrevFlowId ,
SF.SeqFlowSrcClsId,SF.SeqFlowSrcId, OrgP.Name, SF.FlowStatus ,
CASE Prop.BCPNO WHEN '' THEN Prop.TempNo ELSE Prop.BCPNO END AS FileNo, Prop.DeveloperName ,PROP.BCPNO,PROP.CaseType, Prop.OwnerFName,
PROP.InwardDate as ProposalInwardDate, PROP.CaseTrack ,PROP.TempNo, PROP.FastTrackNo ,Prop.RevNo ,PROP.CTSNo as CTSNo, PROP.FinalPlotNo as FinalPlotNo,
SeqDocument.CurrentSequence,IsNull(PROP.ProposalID,0) as ProposalID,IsNull(PROP.PlotRegion,0) as PlotRegion,
IsNull(Prop.ReservationID,0) as ReservationID, Prop.ADRunKey,IsNull(Prop.ApplicantName, '') as ApplicantName, Prop.CaseSubType,
IsNull(Prop.OwnerPeth,'') as OwnerPeth, Prop.ProposedProject, P.Name as ConsultantName, Prop.CURRENTSTAGEID, Seq.SequenceMode, Seq.Sequencebody,
Seq.Phaseid, PROP.RegionCode, Seq.SequenceNo, Seq.Validity, Seq.BillDate, Seq.BillNo, Seq.TransactionRegion
FROM Sequence Seq
INNER JOIN Sequence$Document SeqDocument ON Seq.SeqId = SeqDocument.DocId
LEFT OUTER JOIN ClassMapping CM ON Seq.ClassId = CM.ClassID
LEFT OUTER JOIN ObjectClass OC ON CM.ClassID = OC.ClassID
LEFT OUTER JOIN ObjectClass OC2 ON OC.ParentID = OC2.ClassID
LEFT OUTER JOIN Sequence_Flow SF ON Seq.SeqID = SF.SeqID
LEFT OUTER JOIN OrgPeople OrgP ON Seq.SeqSrcId = OrgP.Id And Seq.SeqSrcClsId = OrgP.ClsId
LEFT OUTER JOIN TemplateProposals PROP ON Seq.SeqID = PROP.DocId
LEFT OUTER JOIN Sequence_Flow_Target ST ON SF.FlowId = ST.FlowId
LEFT OUTER JOIN People P ON P.PeopleId = PROP.ArchitectId
WHERE SeqClsId = 6 AND SeqSubClsId = 1 AND Seq.SeqTypId = 3
AND Seq.SeqSubTypId = 0 AND Seq.State IN (1,2,3,5) AND ST.ResponderActive IN ('1', '2')
AND ST.TARGETPOSTID IN (132,1333,135,136 )
Order By ProposalInwardDate DESC
このクエリは、Intel (i5 3.00GHz) 8GB RAM で約 50 秒かかり、結果は 5676 行になります。
Sequence 176232 行 38 列、Sequence$Document 132776 行 8 列、ClassMapping 6 行 10 列、ObjectClass 6 行 11 列、Sequence_Flow 4847730 行 22 列、OrgPeople 4656 行 11 列、TemplateProposals 90889 行 64 列、Sequence_Flow_Target 521621 行 9 列、人 4655 行 67 列。
すべての属性のデータ型は (数値、文字列、日付) にあります