在应用程序开发过程中,我有很多表存储“少量”数据(通常是 10-40 个值,id
+value
有时是type
),这些数据包含“对象”的属性,例如产品的新鲜/腐烂、红色/绿色/蓝色。
我没有把这个属性放到产品表中,因为电子元件不能新鲜,氧气不能红色,表不能无限行数......
为了存储属性,我使用自定义小表格,其中 2-3 字段:id
用于链接,name
用于在应用程序中显示,有时type
是否在同一类别中的属性组。
主要“对象”通过中间多对多表链接到属性。
是否有任何理由为那些少于 1000 个项目(通常是 10-40 个)的“小词典”创建和维护索引?
我的目标数据库是 Oracle,但我希望答案独立于供应商......
我填充 - 不,但没有技术技能来证明我的填充......
一般是的。在缺少索引的情况下,访问模式必须检查每一行,看看是否是您需要的。问题不在于表大小,而在于并发性。根据您的隔离级别,您的扫描可能会阻塞未提交的事务,只是为了等待最终“无趣”的行被解锁。因为您的扫描保证“查看”每一行,所以每次扫描都会阻止任何写入(插入、删除或更新)。Oracle 默认为快照隔离,这在这种情况下是可以的(无阻塞),但其他供应商默认为其他东西,例如。SQL Server 将默认为读取已提交,这确实会阻塞。
使用索引,您的访问模式将只查看相关行(在所需的键范围内),因此发生锁定冲突的纯统计机会大大降低。