Sql server MS Sql 2008二维位置两列索引

Sql server MS Sql 2008二维位置两列索引,sql-server,performance,indexing,Sql Server,Performance,Indexing,我有一个名为“Map”的表,其结构为“xposint,yposint,FieldType int” “XPO”和“YPO”是主键。有几个表依赖于此表,引用“XPos”和“YPO”列 在“映射”表中,用户不能添加或删除行。“FieldType”列中的值很少更改 大多数选择如下所示: SELECT M.XPos, M.YPos, M.FieldType, N.NoteTitle, N.NoteDescription FROM Map AS M INNER JOIN Note AS N ON M.XP

我有一个名为“Map”的表,其结构为“xposint,yposint,FieldType int”

“XPO”和“YPO”是主键。有几个表依赖于此表,引用“XPos”和“YPO”列

在“映射”表中,用户不能添加或删除行。“FieldType”列中的值很少更改

大多数选择如下所示:

SELECT M.XPos, M.YPos, M.FieldType, N.NoteTitle, N.NoteDescription
FROM Map AS M
INNER JOIN Note AS N ON M.XPos = N.XPos AND M.YPos = N.YPos
WHERE M.XPos >= 248 AND M.XPos <= 311
      AND M.YPos >= 578 AND M.YPos <= 715
选择M.XPos、M.YPos、M.FieldType、N.notetTitle、N.NoteDescription
从映射为M
在M.XPos=N.XPos和M.YPos=N.YPos上作为N的内部联接注释

其中M.XPos>=248和M.XPos=578以及M.YPos在您选择的字段上创建索引,并在包含的列中添加筛选依据的字段

下面是一个例子:

在[dbo].[tblPROJECTS]上创建非聚集索引[IDX_Cover] ( [QUOTESTATUS]ASC ) 包括([项目金额], [分成本], [卖方成本], [成本], [crmProjID])在[PRIMARY]上启用(PAD_INDEX=OFF、STATISTICS_norecocomputer=OFF、SORT_IN_TEMPDB=OFF、IGNORE_DUP_KEY=OFF、DROP_EXISTING=OFF、ONLINE=OFF、ALLOW_ROW_LOCKS=ON、ALLOW_PAGE_LOCKS=ON)

此索引适用于以下语句:

挑选 报价表 来自dbo.tblProjects 其中项目金额>0 和子成本=0 而供应商成本>0 而成本>0
和crmProjID=2

快速问题:您运行过SQL Server的数据库引擎优化顾问吗?这真的很有帮助,特别是如果你能模拟数据库通常会经历的工作负载,你为什么认为索引无效?聚集索引通常适用于“范围查询”,即搜索谓词位于特定值之间的情况。您是否有性能问题?您是否查看了查询计划并按照@Hal的建议使用了DTA?
注释
表是如何索引的?@Hal,@Pondlife:DTA显示,使用了PK聚集索引(XPos,YPos)并建议在(XPos,YPos)上创建新的非聚集索引。这对我来说毫无意义。@Ed Harper:“注意”表是由“XPos,YPos”索引的-和“Map”表一样。对不起,我真的不明白你到底认为我应该怎么做。