我只是在我的应用程序数据库表上进行性能测试。我在sql server中的索引概念并不差。也许当我实际上我的理论让我感到困惑。嗨嗨SQl服务器中的非集群索引
这里我的问题是,你能告诉我一个场景,我需要在一张桌子上使用多个非聚集索引? 。
我们是否需要一本书的多个索引?我很困惑 。
请帮忙。
我只是在我的应用程序数据库表上进行性能测试。我在sql server中的索引概念并不差。也许当我实际上我的理论让我感到困惑。嗨嗨SQl服务器中的非集群索引
这里我的问题是,你能告诉我一个场景,我需要在一张桌子上使用多个非聚集索引? 。
我们是否需要一本书的多个索引?我很困惑 。
请帮忙。
Indixing非常复杂,超出了这里简单回复的范围。但是,通常,您可以根据从表中读取数据的方式将索引添加到表中。
,如果你有一个表:
YourTable
ID int identity PK
WidgetName varchar(10)
WidgetSize numeric(6,2)
...你经常运行:SELECT.. WHERE WidgetName='xyz'
然后WidgetName
添加一个索引,如果你从来没有SELECT.. WHERE WidgetSize =12.4
然后不为该列添加一个索引。
谢谢,那么INCLUDE子句用于什么?以及它如何工作? –
当您的查询使用它通过索引数据搜索的索引时,一旦它找到您的行,它将使用“指针”返回表中的实际行以获取查询所需的所有列。如果索引包含查询所需的所有列,那么它可以跳过查找实际行的步骤(它具有索引中所需的所有信息)。大多数情况下,您只需要在某些列上使用索引(特别是如果它是唯一的)。 'INCLUDE'允许您将额外的数据列添加到索引仅用于数据目的,它们不是索引中可搜索或唯一部分的一部分... –
...它们只会帮助避免返回实际的表格并获取这些列。这就是为什么'SELECT *'很糟糕的原因之一,即使查询使用索引,您也需要返回表格并获取所有列。在索引上使用'INCLUDE'会有轻微的损失,每个'insert'或'update'都必须将更多数据推送到索引。在您多次阅读的典型应用中,与选择速度的增益相比,这通常非常小。 –
当你可能以多种不同的方式查找值。例如根据出生日期或姓名搜索人员列表。 –