【发布时间】:2014-10-25 09:28:34
【问题描述】:
我需要帮助了解如何在表上创建适当的索引以进行快速范围选择。
我有一个包含以下列的表格:
列 --- 类型
frameidx --- int
u --- int
v --- int
x --- 浮点数(53)
y --- 浮点数(53)
z --- 浮点数(53)
这些列都不是唯一的。
此表中大约有 3000 万条记录。
一般的查询应该是这样的:
Select x, y, z from tablename
Where
frameidx = 4 AND
u between 34 AND 500
v between 0 AND 200
非常简单,没有连接,没有嵌套的东西。只是很好的子集选择。
例如,我应该在 MS SQL Server (2012) 中为此表执行哪种索引,以便能够在(理想情况下)不到 100 毫秒的时间内获取记录(可能来自此查询的数千条记录) ?
谢谢。
【问题讨论】:
-
假设您总是过滤
frameidx、u和v我认为 3 列上的复合索引,x、y和z作为非键列将是最通用的:CREATE NONCLUSTERED INDEX IX_tablename__frameidx_u_v ON tablename INCLUDE (x, y, z);- 但是,我认为期望优化所有范围的查询以在不到 100 毫秒的时间内从具有 30m 行的表中返回数千行有点乐观。
标签: sql sql-server indexing sql-server-2012