設計/パフォーマンスに関する質問があります。
次のテーブルがあります。
CREATE TABLE [dbo].[DW_Visits_2016](
[VisitId] [int] NOT NULL,
[UserId] [int] NOT NULL,
[VisitReferrer] [varchar](512) NULL,
[VisitFirstRequest] [varchar](255) NOT NULL,
[VisitAppName] [varchar](255) NULL,
[VisitCountry] [varchar](50) NULL,
[VisitDate] [smalldatetime] NOT NULL,
[VisitMins] [int] NOT NULL,
[VisitHits] [int] NOT NULL,
[EntryTag] [varchar](100) NOT NULL,
[VisitCount] [int] NOT NULL,
[VisitInitialDate] [datetime] NOT NULL,
[AggregateType] [varchar](50) NULL,
[MemberId] [int] NULL,
[ServerName] [varchar](50) NULL,
[BrowserUserAgent] [varchar](255) NULL,
[LastModifiedDate] [smalldatetime] NULL,
[Guid] [uniqueidentifier] NULL,
[SessionId] [varchar](100) NULL,
[IPAddress] [varchar](40) NULL,
CONSTRAINT [PK_Visits] PRIMARY KEY NONCLUSTERED
(
[VisitId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[Visits] WITH CHECK ADD CONSTRAINT [CK_Visits_VisitDate] CHECK (([VisitDate]>='2016-01-01' AND [VisitDate]<'2017-01-01'))
GO
ALTER TABLE [dbo].[Visits] CHECK CONSTRAINT [CK_Visits_VisitDate]
そして、これは 2015 ... 2010 年の同じ表です。
すべてのテーブルには約 1 億 5000 万行あります。つまり、合わせて約 10 億 5000 万行になります。
BI 担当者がこれを 1 つのビューにまとめたいという要件を受け取りました (select * from all_visits のようなクレイジーなもの)。
幸いなことに、彼らはいくつかの「where」句と、必要のないいくつかの列を提供してくれたので、最終結果は 6 列と行の 20% (2 億 1000 万行) になりますが、それでも、「ビュー」は単なる保存されたものです。クエリ。ボックスには 60 GB の RAM が搭載されていますが、他の多くのデータベースと共有されています。
私が見るオプション:
- ビューの代わりに… ビューをテーブルとして作成し、専用のボックスに移動します。
- 年に 1 つのビューを作成しますか?
- これらすべてをmongodbまたはverticaのようなものに切り替えますか?!
- 列に格納されたインデックスと組み合わせた以前のオプションはありますか?