我有一个设计/性能问题。
我有这张下一张桌子。
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.5 亿行。因此,加起来我们谈论的是 10.5 亿行。
我收到了一个要求,BI 人员希望将其组合在一个视图上(像 select * from all_visits 一样疯狂)。
幸运的是,他们给了我一些 'where' 子句和一些他们不需要的列,所以最终结果将是 6 列和 20% 的行(2.1 亿行),但尽管如此,'view' 只是一个存储的询问。即使盒子有 60GB 的内存,它也与许多其他数据库共享。
我看到的选项:
- 而不是视图...将视图创建为表格并将它们移动到专用框。
- 每年创建一个视图?
- 将所有这些切换到 mongodb 或 vertica 之类的东西?!
- 任何先前的选项与列存储索引相结合?