我计划使用以下架构在SQL Azure数据库中存储车牌列表:
CREATE TABLE [dbo].[events](
[id] [bigint] IDENTITY(1,1) NOT NULL,
[dateTimeCreated] [datetime] NOT NULL,
[registration] [varchar](14) NOT NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[events] ADD CONSTRAINT [DF_events_dateTimeCreated] DEFAULT (getdate()) FOR [dateTimeCreated]
GO
我只能想到运行以下一个查询: - 在给定的日期/时间范围内搜索注册
到目前为止,我只能想到创建一个非聚集索引agaisnt dateTimeCreated并注册
最终可能会出现数百万行的10个行。 *当行数最终大大增加时,有哪些选项(天蓝色特定与否)可以提高性能? *是否有关于查询性能如何针对给定行数降级的指南?
答案 0 :(得分:1)
您绝对应该为dateTimeCreated
创建群集索引。 registration
列也应该被编入索引,但是否应该(以及如何)将其编入索引取决于数据:您的registration
是否会对它们有所了解或者它们是否是随机的?
Clustered Indexes背后的关键理念:
表中的数据行以排序顺序存储的唯一时间是 当表包含聚集索引时。
这意味着当您对聚类的列进行搜索并且值具有一些可订购的语义(您的dateTimeCreated
列)时,您获取正确数据的可能性会显着增加。 (SQL Server不必提取 - 尽可能多的表页来收集必要的数据。)
Microsoft Azure SQL数据库不支持没有群集的表 索引。表必须具有聚簇索引。如果创建了表 如果没有聚簇约束,则必须创建聚簇索引 在表上允许插入操作之前。
答案 1 :(得分:0)
我会将ID设为PK(和聚集索引)
为什么bigint?
int上升到40亿(如果使用负数则为80亿)
不仅光盘空间更少,而且在相同数量的内存中缓存了更多记录。
count(*)将是n阶 两倍的记录需要两倍的时间来计算
对于其他列,如果要对其进行搜索或排序,请创建索引。