相关疑难解决方法(0)

SQL Server索引哪些应该是群集的?

我在一些表上有许多索引,它们都很相似,我想知道Clustered Index是否在正确的列上.以下是两个最活跃的索引的统计数据:

Nonclustered
I3_Identity (bigint)
rows: 193,781
pages: 3821
MB: 29.85
user seeks: 463,355
user_scans: 784
user_lookups: 0
updates: 256,516

Clustered Primary Key
I3_RowId (varchar(80))
rows: 193,781
pages: 24,289
MB: 189.76
user_seeks: 2,473,413
user_scans: 958
user_lookups: 463,693
updates: 2,669,261
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,PK经常被寻找,但是i3_identity专栏的所有搜索都在对这个PK进行关键查找,所以我真的从I3_Identity的索引中获益很多吗?我应该更改为使用I3_Identity作为群集吗?这可能会产生巨大的影响,因为这个表结构在我工作的地方重复了大约10000次,所以任何帮助都会受到赞赏.

sql sql-server indexing sql-server-2005

7
推荐指数
2
解决办法
3513
查看次数

在SQL Server中搜索和扫描

谷歌搜索后,我发现索引搜索比扫描更好.

如何编写将导致搜索而不是扫描的查询.我试图在谷歌找到这个,但截至目前没有运气.

任何有解释的简单例子都将受到赞赏.

谢谢

sql t-sql sql-server

4
推荐指数
1
解决办法
351
查看次数

如何避免排序结果,由Index Seek返回?

好吧,问题不是真正"如何避免"排序,因为它是业务逻辑所要求的,而是如何使用索引进行初步预测,而不是随时随地.

我有一个查询计划:

|--Sort(TOP 5, ORDER BY:([this_].[DateAdded] DESC))
   |--Nested Loops(Inner Join, OUTER REFERENCES:([this_].[Id], [Expr1002]) OPTIMIZED WITH UNORDERED PREFETCH)
        |--Index Seek(OBJECT:([storm].[dbo].[Items].[IX_Items_ByLocationSorted] AS [this_]), SEEK:([this_].[Status]=(1) AND [this_].[RegionId]=(32) AND [this_].[LocationId]=(32001)),  WHERE:([storm].[dbo].[Items].[SubcategoryTypeId] as [this_].[SubcategoryTypeId]=(88) AND ([storm].[dbo].[Items].[IsHidden] as [this_].[IsHidden]<(1) OR [storm].[dbo].[Items].[IsHidden] as [this_].[IsHidden]>(1))) ORDERED FORWARD)
        |--Clustered Index Seek(OBJECT:([storm].[dbo].[Items].[PK_Items] AS [this_]), SEEK:([this_].[Id]=[storm].[dbo].[Items].[Id] as [this_].[Id]) LOOKUP ORDERED FORWARD) 
Run Code Online (Sandbox Code Playgroud)

您可以看到,Index Seek操作返回一组行.比查询优化器执行密钥查找以检索整行(因为他无论如何都必须返回它),而不是按DateAdded列对所有这些行进行排序.这是一个明显且完全有效的行为.但考虑到Index Seek(最大30k)返回的行数,它确实很慢(可能需要40秒).

如何加快查询速度并避免这种随时随地的排序?

PS:查询表有大约300万行,并且经常更新.这可能会导致页面锁定,但我不认为这些锁定可以持续40秒.

查询:

SELECT TOP 5 * 
FROM Items 
WHERE 
     SubcategoryTypeId = 88 
     and RegionId = 32
 and LocationId = 32001
 and not (IsHidden = 1 and …
Run Code Online (Sandbox Code Playgroud)

sql-server sorting lookup indexing seek

1
推荐指数
1
解决办法
4538
查看次数

标签 统计

sql-server ×3

indexing ×2

sql ×2

lookup ×1

seek ×1

sorting ×1

sql-server-2005 ×1

t-sql ×1