数据库索引 - 表大小是否重要?

oro*_*aki 1 database database-design database-indexes

我的意思是:具有20列的表是否比仅具有4列的表对索引特定字段(在搜索查询中使用的字段)中获益更多?

另外:将索引添加到我不经常搜索的字段中会有什么危害,但可能在以后的某个时间?添加索引是否有负面影响?它只是在磁盘上占用的大小,还是可以使运行速度变慢以添加不必要的索引?

从评论中提取

我正在使用Postgres(最新版本),我有一个表,我将做很多LIKE类型查询等,但由于我的客户可以访问CRUD,因此值无疑会经常更改.我可以理解索引吗?他们只是头疼吗?

OMG*_*ies 5

具有20列的表是否比仅具有4列的表对索引某个字段(在搜索ish查询中使用的字段)中获益更多?

不,表中的列数与索引的好处无关.

索引仅针对指定列中的值; 这是值的频率将影响您的查询将看到多少好处.例如,包含布尔值的列是索引的不良选择,因为该值是50/50的可能性,该值将是一个或另一个值.在所有行的50/50分割上,索引不会缩小对特定行的搜索范围.

将索引添加到我不经常搜索的字段中会有什么危害,但将来可能会有什么危害呢?

索引只在可以使用时加速数据检索,但它们会对INSERT/UPDATE/DELETE语句的速度产生负面影响.索引还需要维护以保持其价值.

  • 嗯,我会说"最小"而不是"无",更依赖于行大小而不是列数(尽管后者影响前者).对于较大的行,您的全表扫描将无法在一次读取时将尽可能多的行放入内存中(例如)只包含单列的行.因此,对于行大小为50K的表而不是具有10K行大小的表,该列的索引的_improvement_更大.正如你正确指出的那样,这种差异会被其他因素所淹没. (2认同)
  • @paxdiablo - 它当然取决于数据库产品,但在Oracle中,返回50%行的查询将作为全表扫描比执行索引读取更快地执行*way*. (2认同)