gpt4 book ai didi

sql - SQL Server 中复杂主键的表索引

转载 作者:行者123 更新时间:2023-12-04 16:04:00 25 4
gpt4 key购买 nike

我的数据库中有以下表格

  • 用户
  • 状态
  • 用户状态

statusToUser 用作其他两者之间的链接表,用于多对多关系

表定义如下:

  • 用户名
  • Status_Id

这些列是表的主键,并且有一个包含它们的索引,但是当针对“缺失查询”运行查询优化时,我在列表中得到了在 user_id 上添加另一个索引的建议。

问题是,我是否真的需要在该列上使用另一个索引,并且已经有另一个索引?

谢谢

编辑:

这是两个不同的查询,相同的方法:

SELECT  user_seeks * avg_total_user_cost * ( avg_user_impact * 0.01 ) AS [index_advantage] ,
dbmigs.last_user_seek ,
dbmid.[statement] AS [Database.Schema.Table] ,
dbmid.equality_columns ,
dbmid.inequality_columns ,
dbmid.included_columns ,
dbmigs.unique_compiles ,
dbmigs.user_seeks ,
dbmigs.avg_total_user_cost ,
dbmigs.avg_user_impact
FROM sys.dm_db_missing_index_group_stats AS dbmigs WITH ( NOLOCK )
INNER JOIN sys.dm_db_missing_index_groups AS dbmig WITH ( NOLOCK )
ON dbmigs.group_handle = dbmig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details AS dbmid WITH ( NOLOCK )
ON dbmig.index_handle = dbmid.index_handle
WHERE dbmid.[database_id] = DB_ID()
ORDER BY index_advantage DESC ;

数字 2

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT TOP 20
ROUND(s.avg_total_user_cost *
s.avg_user_impact
* (s.user_seeks + s.user_scans),0)
AS [Total Cost]
, d.[statement] AS [Table Name]
, equality_columns
, inequality_columns
, included_columns
FROM sys.dm_db_missing_index_groups g
INNER JOIN sys.dm_db_missing_index_group_stats s
ON s.group_handle = g.index_group_handle
INNER JOIN sys.dm_db_missing_index_details d
ON d.index_handle = g.index_handle
ORDER BY [Total Cost] DESC

最佳答案

连接表中的两个字段都是其他表的外键。在外键上有一个索引通常是个好主意,所以在 (user_id, status_id) 上有一个聚集键。和非集群 (status_id, user_id)会是个好主意。

A deletestatus表或在 user表必须检查 statusToUser 中是否存在行如果您拥有的唯一索引是 (user_id, status_id) deleteuser可以使用主键但删除status必须对 statusToUser 进行聚簇索引扫描验证那里没有与要删除的行相匹配的行。

关于 status 的谓词也是如此在查询中。 (user_id, status_id) 上的主键不会有任何帮助,您最终可能会进行聚簇索引扫描而不是潜在的查找,或者它可能需要执行昂贵的排序操作。

关于sql - SQL Server 中复杂主键的表索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15306042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com