向SQL Server添加索引是一个坏主意吗?

Aer*_*rik 9 sql-server indexing

我们有一个基于SQL Server的中型应用程序没有定义索引.甚至没有在标识列上.我建议我们适度昂贵的应用程序顾问,通过在适当的字段上创建一些索引,我们可能会获得更好的性能(特别是当我们的数据库增长时),他说:

"索引将显着影响应用程序的其他领域,客户不应在任何情况下创建它们."

有人听说过这样的事吗?是否有人不应该创建任何索引?我可以看到这个应用程序没什么特别的 - 它有int标识列,然后是很多字符串列,一堆关系表,但没有什么特别的或奇怪的,我可以看到.

谢谢!

[编辑:标识列没有使用"身份规范",他们似乎由程序设定,寻找与Management Studio中的数据库,我能找到NO索引...]

关注:在一次会议上,我询问了生产这种产品的公司的首席执行官(和首席架构师),他的回答是,他们认为对于中小型部署,与维护索引相关的开销会对整体用户产生更大的负面影响.经验(应用程序执行大量写入)比索引的好处会抵消,但对于大型数据库,它们确实创建了索引.这位技术支持人员过于热心,对他的回答毫无帮助.谜团已揭开.

Lar*_*tig 5

存在过度索引的问题,尤其是在具有非常大的表的 INSERT 和 UPDATE 密集型应用程序中。因此,标题中问题的答案是肯定的,添加索引有时可能不是一个好主意。

这与您在问题正文中提出的问题完全不同,即“SQL Server 数据库中没有索引是否正常”。答案是,除非您将数据库用作“只写”系统(其中添加数据但仅在批量提取并转换为另一个数据存储后才读取),否则数据库中没有某些索引是非常不寻常的。数据库。

你的顾问的陈述很奇怪,让我相信你可能在描述中遗漏了一些重要的信息。如果不是,我会说他疯了。


Ble*_*eek 4

雇用我,我将为您创建索引。14 年的 Sybase/SQL Server 经验告诉我要创建那些!该死!索引。除非您的表中每个表的记录少于 500 条。

我的想法是索引哈希节点的大小大致为 1000。

您需要注意的另一件事是您的顾问是否已标准化表格。也许,该表有 500 个字段/列,包含多个概念实体或一打概念实体。这可能就是为什么他对创建索引感到紧张,因为如果表中有 12 个概念实体,则至少会有 12 组索引 - 在这种情况下,他是绝对正确的 - 在任何情况下......等等。

然而,如果他确实有 500 列或每个表有多个概念实体,那么他就是一个非常非常糟糕的数据设计工程师。在我与更有经验的数据工程师一起工作的这些年里,我们的表很少超过 20 列。5 偏低,10 平均。有时为了性能的考虑,我们确实允许在表中混合两个实体,或者将行出现水平化到表的列中。

当您查看表格设计时,您可以用未经训练的眼睛看到产品、项目、构建表、平面图、设备等记录全部卷成一长排。您不能将所有这些实体混合到一张表中。

这是我知道他建议你不要建立索引的唯一原因。如果他这样做,您应该知道他正在向您的公司欺骗性地展示他的数据设计技能,您应该立即将他从您的每周合同费用中剔除。

好吧,读完拉里的帖子后——我也同意他的观点。