Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net SQL Server,这是正确的索引用法吗?_Asp.net_Sql Server_Linq_Performance_Indexing - Fatal编程技术网

Asp.net SQL Server,这是正确的索引用法吗?

Asp.net SQL Server,这是正确的索引用法吗?,asp.net,sql-server,linq,performance,indexing,Asp.net,Sql Server,Linq,Performance,Indexing,我正在努力掌握索引。根据表格: Books ------ ID (PK) Title CategoryID (FK) AuthorID (FK) 在我的ASP.net页面中,我的网页将按作者或类别获取书籍,如果我想提高检索时间,我会在CategoryID Asc、AuthorID Asc上创建索引吗 我理解正确了吗?如果我像上面那样使用多个列,那是称为聚集索引还是其他什么?您应该创建两个索引,一个用于CategoryID,另一个用于AuthorID。如果你在寻找一个或另一个,那么在同一个索引中

我正在努力掌握索引。根据表格:

Books
------
ID (PK)
Title
CategoryID (FK)
AuthorID (FK)
在我的ASP.net页面中,我的网页将按作者或类别获取书籍,如果我想提高检索时间,我会在CategoryID Asc、AuthorID Asc上创建索引吗


我理解正确了吗?如果我像上面那样使用多个列,那是称为聚集索引还是其他什么?

您应该创建两个索引,一个用于CategoryID,另一个用于AuthorID。如果你在寻找一个或另一个,那么在同一个索引中有两个并不是你所需要的;如果您总是同时查询这两个内容,例如类别和作者,则需要使用该功能


聚集索引控制数据的物理顺序。通常,如果您有一个标识列,将其用作聚集索引(默认情况下主键是主键)就可以了。

适当的索引将取决于查询的功能。如果您有一个针对category和author的联合查询,那么您可能会使用包含这两个字段的索引,否则您可能会更多地使用两个单独的索引

聚集索引是决定表中记录的存储顺序的索引,与它包含的字段数无关。主键上应该已经有聚集索引,因此不能为该表创建另一个聚集索引。

聚集索引表示数据按照索引指定的顺序存储在表和磁盘等中。其结果是,只能存在一个聚集索引


索引类别ID Asc、AuthorID Asc将加快对特定类别的查找,而对具有特定作者的特定类别的查找将是理想的。但它并不适合单独进行作者查找,因为您必须找到每个类别的作者。在这种情况下,两个单独的索引会更好。

聚集索引是表的物理排序依据;由多个列组成的索引称为复合索引答案!在我的SQL profiler中,我有一个在CPU上运行17ms的查询,我没有更改任何数据,而是以我认为正确的方式在表中放置索引!然后当我重新运行这个查询时,分析器现在在CPU上显示0ms。这就是添加索引应该追求的好处吗?@Tom Gullen是的,添加索引应该提高读取性能。但是它们会在维护索引时产生少量开销,因此写性能会下降。然而,在大多数web应用程序中,读性能比写性能重要得多。@Tom Gullen不,链表可能要求您每次都扫描整个列表。使用树,一种流行的树类型是,它实际上是叶节点中的链接列表。这允许快速范围的查询。