我们有一个基于SQL Server的中型应用程序,它没有定义索引.甚至在标识列上也没有。我向我们比较昂贵的应用程序顾问建议,也许我们可以通过在适当的字段上创建一些索引来获得更好的性能(特别是随着数据库的增长),他说:
“索引将对应用程序的其他领域产生重大影响,客户不应在任何情况下创建索引。”
有人听说过这样的事吗?是否存在不应该创建任何索引的情况?我看不出这个应用程序有什么特别之处--它有int标识列,然后是很多字符串列,很多关系表,但我看不到什么特别或奇怪的东西。
谢谢!
编辑:标识列没有使用“标识规范”,它们似乎是由程序设置的,通过Management查看数据库,我无法找到任何索引.
跟进:在一次会议上,我问生产这款产品的公司首席执行官(兼首席架构师),他的反应是,他们觉得在小型到中型的部署中,维护索引的开销对总体用户体验(应用程序做了很多写作)的负面影响要大于索引的好处,但对于大型数据库,它们确实创建了索引。技术支持人员只是过于热心,对他的回答毫无帮助。谜团解开了。
发布于 2010-05-21 06:27:48
雇我,我会为你创建索引。14年的Sybase/ Server经验告诉我要创造这些!该死!索引。除非您的表每个表的记录少于500条。
我的想法是索引哈希节点的大小大致为1000。
您需要注意的另一件事是您的顾问是否已将表规范化。也许,该表有500个字段/列,包含多个概念实体或整整十几个概念实体。这可能是他对创建索引感到紧张的原因,因为如果表中有12个概念实体,那么至少会有12组索引--在任何情况下,他都是绝对正确的.诸如此类。
但是,如果他确实有500个列,或者每个表可以检测到多个概念实体--他是一个非常糟糕的数据设计工程师。在我与更有经验的数据工程师一起工作的所有年中,我们的表很少超过20列。低5侧,平均10侧。有时,为了性能起见,我们确实允许将两个实体混合在一个表中,或者将行发生水平化到表的列中。
当您查看表设计时,您可以用未经训练的眼光查看产品、项目、BuildSheet、FloorPlan、设备等所有记录都卷成一排。您不能将所有这些实体合并到一个表中。
这是我知道他为什么会建议你不要有索引的唯一原因。如果他这样做,你应该知道,他是欺骗性地向你的公司代表他的数据设计技能,你应该立即放弃他从你的每周合同费用。
好吧,看完拉里的帖子-我也同意他的看法。
发布于 2010-05-21 01:44:30
存在过度索引的问题,特别是在使用非常大的表插入和更新大量应用程序中。因此,标题中的问题的答案是肯定的,有时添加索引可能是个坏主意。
这与问题正文中提出的问题完全不同,即“在Server数据库中没有索引是正常的吗?”答案是,除非您使用数据库作为“只写”系统,在这个系统中,数据被添加,但只有在大容量提取并转换成另一个数据存储区之后才会读取,否则数据库中不包含一些索引是非常不寻常的。
你的顾问的陈述很奇怪,让我相信你可能遗漏了一些重要的信息在你的描述中。如果不是,我会说他疯了。
发布于 2010-05-21 01:16:22
你有多余的磁盘空间吗?我见过指数比表更重的例子。
然而,任何索引都不存在!除了所有读取操作都需要整个表时,不可能有这样的情况。
https://stackoverflow.com/questions/2878985
复制相似问题