首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >激进指数调整

激进指数调整
EN

Database Administration用户
提问于 2017-01-09 15:29:43
回答 1查看 416关注 0票数 0

背景信息-我有一个表,它用一个唯一的JobID (PK)和一个ClientID (一个客户端可以有很多作业)来存储作业信息,还有一堆数据堆的列。

我运行了sp_BlitzIndex,它返回了以下内容:

dbo.Job.PK_Job_1 (1):行锁等待: 399;总持续时间: 21分钟;平均持续时间:3秒;页锁等待: 171;总持续时间:2分钟;平均持续时间:1秒;锁升级尝试: 125,805;实际升级: 0。

这个表中只有35K行,但是它被大量使用并每隔几秒钟更新一次。当前索引在PK上,这是一个唯一的值。我对索引调优不太了解,但是如果我删除这个索引并为JobID + ClientID创建一个非聚集索引,那么我是否正确地降低了索引的攻击性?还是我让事情变得更糟了?

EN

回答 1

Database Administration用户

发布于 2017-01-09 17:03:32

对于访问数据库/服务器中的表或负载的表或查询,我们没有完整的了解,但据我们所知:

背景信息-我有一个表,它用一个唯一的JobID (PK)和一个ClientID (一个客户端可以有很多作业)来存储作业信息,还有一堆数据堆的列。

  • 好的,所以这个表有一个JobID和一个PRIMARY KEY约束(因此它是一个索引)。
  • 有一个ClientID,它是Client的(显式或隐式)外键。
  • 我们不知道是否定义了FOREIGN KEY约束。定义了FOREIGN KEY吗?
  • 我们不知道表中的其他列及其大小。列、类型和大小是什么?
  • 我们不知道(JobID)上的索引是否是聚集的(“堆积的数据”表示不是,但我们不能确定)。表是群集的还是堆的?
  • 最好为整个CREATE TABLE语句提供所有索引。

这个表中只有35K行,但是它被大量使用并每隔几秒钟更新一次。

  • 好吧,但是“重量级”不是一个数字。每秒100个查询还是每秒10K查询?
  • 每隔几秒钟插入/更新/删除一行,还是每隔几秒钟更新一行?
  • 表和数据库上的负载非常重要:
    • 运行什么查询?
    • 加载OLTP还是OLAP?
    • Server的版本和版本是什么?
    • 服务器规格(RAM、CPU、HDD/SSD)是什么?

当前索引在PK上,这是一个唯一的值。我对索引调优不太了解,但是如果删除这个索引和.呢?

  • 不,不要盲目地删除索引,尤其是当表中只有一个索引时。
  • 您可以在联接和WHERE条件中使用的列上添加索引,并且(通常)没有问题和可能的改进。

..。并为JobID + ClientID创建非聚集索引,.?

  • 考虑到在(JobID, ClientID)上已经有了一个唯一的索引,在(JobID)上建议的特定索引可能是无用的。
  • 另一方面,在(ClientID)上添加一个索引可能会帮助一些查询(那些连接到Client)。由于ClientID是一个FK,所以很可能仍然有这样的queries.,盲目地添加索引可能不会给您带来性能增益(甚至使情况更糟),所以在索引之前和之后进行测试。

。。我是否走上了降低指数攻击性的正确道路?还是我让事情变得更糟了?

  • 我不知道“指数聚合”意味着什么,但是看到上面关于潜在行动的要点。
  • 如果您真的想看到查询效率有显著提高,您需要对表的结构(S)和最常运行的查询进行适当的分析,然后测试不同的索引策略。
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/160423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档