是否有任何理由对非常小的表(最多 1000 行)使用索引?

gav*_*koa 9 index index-tuning

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

我不把这个属性放在产品表中,因为电子元件不能新鲜,氧气不能是红色的,表不能有无限的行数......

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

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

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

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

我填写 - 不,但没有技术技能来证明我的填写...

Rem*_*anu 14

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

存在索引时,您的访问模式将只查看相关行(在所需的键范围内),因此遇到锁冲突的纯统计机会大大降低。