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

时间:2010-11-17 04:55:37

标签: database database-design database-indexes

我的意思是:具有20列的表是否从索引特定字段(在搜索ish查询中使用的字段)中获益更多,而不是只有4列的表?

另外:将索引添加到我不进行大量搜索的字段中会有什么危害,但将来可能会有什么危害呢?添加索引是否有负面影响?它只是它在磁盘上占用的大小,还是可以使事情运行得更慢以添加不必要的索引?

从评论中提取

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

2 个答案:

答案 0 :(得分:5)

  

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

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

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

  

将索引添加到我没有多搜索的字段中会有什么危害,但可能会在以后的某个字段中添加?

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

答案 1 :(得分:1)

如果您正在执行LIKE查询,您可能会发现索引无论如何都没有太大帮助。虽然索引可能会改进此查询......

select * from t23
where whatever like 'SOMETHING%'
/

......索引不太可能有助于这些查询......

select * from t23
where whatever like '%SOMETHING%'
/

select * from t23
where whatever like '%SOMETHING'
/

如果您有自由文本字段且您的用户需要模糊匹配,那么您应该查看Postgres的全文功能。它使用MATCH运算符而不是LIKE,并且需要特殊的索引类型。 Find out more.

有一个问题,即全文索引比普通索引更复杂,related design decisions are not simple。还有一些实现需要additional maintenance activities