如何在SQL Server 2008数据库上创build非聚集索引? 最好没有代码?

我将不胜感激关于如何在SQL Server 2008数据库上创build非聚集索引而不使用代码 – 或者说,在运行任何SQL查询之前,一劳永逸地“静态”(这可能是没有道理的,但我的观点我不想运行SQL命令来创build索引每次我运行我的业务应用程序的一部分我的SQL查询)。

也就是说,理想情况下,Visual Studio 2010 Professional中内置了Microsoft SQL Server中的一个工具(注意:我没有企业版或最终版本 – 这与我可以在专业版中使用内置SQLpipe理器时的差异很大版本)做到这一点 – 因为我没有任何其他工具(我只是看,发现微软的SQL Server 2008没有我所需要的 – 至less在我的系统 – 这显然是一个残缺的免费版本)。 所以也许一个简单的SQL命令来索引下面的表格是有保证的。

我已阅读下面的参考,但我不知道如何做到这一点。

这是我的桌子:

Table CUSTOMER Columns: CustomerID = GUID - this is a unique primary key CustomerDecimal1 = decimal- this is not unique, but 99% of the time it is unique compared to the rest of decimal fields. I wish to index this field 1 of 2 CustomerDecimal2 = decimal- this is not unique, but 99% of the time it is unique compared to the rest of decimal fields. I wish to index this field 2 of 2 CustomerTextComments = vChar(50) 

WHERE子句中经常使用十进制字段,因此它们是非聚集索引的理想候选,显然这是Microsoft SQL Server 2008中支持的新function。

关于我的平台进一步说明:我已经有了一个包含现有数据的表格,但只有几个logging,大部分是空白的。 我正在从Visual Studio 2010内部的服务器资源pipe理器开始工作,这个工作包含很多function,包括生成SQL查询的能力。 理想情况下,我想在Linq-to-entities中编写任何索引方法(仅仅因为我不太了解SQL),但是如果有人可以给我一个关于如何索引这个表中的CustomerDecimal1,CustomerDecimal2字段的完整清单,将感激不尽。

参考文献:

http://blog.sqlauthority.com/2008/09/01/sql-server-2008-introduction-to-filtered-index-improve-performance-with-filtered-index/(SQL Server 2008新的“过滤”索引属性为WHERE子句search)

http://en.wikipedia.org/wiki/Index_%28database%29#Non-clustered

– – -更新

@mrdenny – 我感谢你的时间,我看到你有一个很好的声誉,但我不能相信你在说什么 – 是的,我固执,并称之为否认! :-)我会留下这个线索多一点,希望别人看到它。 此外,因为我不本地运行SQL,所以只有来自Entity Framework(EF 4.0)内部的Linq-to-entities我甚至不知道在哪里放置了你帮助提供的代码(“T / SQL在上创build一个非聚集索引两个十进制列“)。 我在我的WHEREsearch中始终使用两个十进制列 – 所以你的第一个SQL命令适合我。

任何人可以将Denny先生的第一个SQL代码翻译成Linq-to-Entities吗? 如果做不到这一点,我会举手,说我不相信这一点(与我所读到的有关索引是一种平衡的树应该被自动构build到系统中)相反,或者,已经阅读了索引最多可以节省20%左右的performance – 好,但没有太多的工作。 是的,它是酸葡萄!

第一个非聚集索引在SQL Server 2008中并不是新的。它们一直存在。 筛选索引是SQL Server 2008中的新增function。

在针对SQL Server运行查询之前,系统无法确定需要创build哪些索引。

有两种方法可以在SQL Server中创build索引。 一个是T / SQL,另一个是使用具有graphics编辑器的SQL Server Management Studio。 graphics编辑器将简单地生成T / SQL并针对数据库运行T / SQL。

在两个十进制列上创build非聚集索引的T / SQL将如下所示。

 CREATE INDEX IX_CustomerDecimal1_CustomerDecimal2 on dbo.CUSTOMER (CustomerDecimal1, CustomerDecimal2) INCLUDE (CustomerTextComments) WITH (FILLFACTOR=70) 

如果您计划在search数据库表时独立使用两个CustomerDecimal字段,则不需要为每个字段指定一个单独的索引。

 CREATE INDEX IX_CustomerDecimal1 on dbo.CUSTOMER (CustomerDecimal1) INCLUDE (CustomerTextComments) WITH (FILLFACTOR=70) CREATE INDEX IX_CustomerDecimal2 on dbo.CUSTOMER (CustomerDecimal2) INCLUDE (CustomerTextComments) WITH (FILLFACTOR=70) 

无论哪种情况,您都需要将所返回的列添加到包含列的列表中,以便最小化正在生成的IO。