有什么理由对很小的表(最多1000行)使用索引吗?


9

在应用程序开发期间,我有很多表存储“少量”的数据(通常为10-40值,有时是id+ ),其中包含“对象”的属性,例如产品的新鲜/腐烂,红色/绿色/蓝色。valuetype

我不将此属性归因于产品表,因为电子组件不能新鲜,氧气不能变为红色,并且表不能具有无限的行数...

为了存储属性,我使用了2-3个字段的自定义小表:id用于链接,name用于在应用程序中显示以及有时type属性分组在同一类别中。

主要的“对象”通过中间的多对多表链接到属性。

是否有任何理由为少于1000个项目(通常为10至40个)的“小词典”创建和维护索引?

我的目标数据库是Oracle,但我希望回答独立于供应商的问题。

我填写-不,但是没有技术技能可以证明我的填写是正确的...

Answers:


14

通常是。在缺乏索引的情况下,访问模式必须检查每一行,以查看是否需要。问题不是表的大小,而是并发性。根据您的隔离级别,您的扫描可能会阻塞未提交的事务,以等待最终解锁“无用”的行。因为保证您的扫描可以“查看”每一行,所以每次扫描都会阻止任何写操作(插入,删除或更新)。Oracle默认使用快照隔离,在这种情况下可以使用快照隔离(无阻塞),但其他供应商默认使用其他隔离。SQL Server将默认设置为“读已提交”,但会阻止。

有了索引,您的访问模式将只查看相关的行(在期望的键范围内),因此大大降低了发生锁定冲突的统计概率。


感谢您的解释,我有一个后续问题(尽管现在是3年后)。最多3或4行的小桌子怎么办?
罗布

证书小表(适合1-2页)很可能会被扫描
Remus Rusanu

@Remus需要在MySQL上创建索引
Singh Kailash
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.