我的意思是:具有20列的表是否从索引特定字段(在搜索ish查询中使用的字段)中获益更多,而不是只有4列的表?
另外:将索引添加到我不进行大量搜索的字段中会有什么危害,但将来可能会有什么危害呢?添加索引是否有负面影响?它只是它在磁盘上占用的大小,还是可以使事情运行得更慢以添加不必要的索引?
从评论中提取
我正在使用Postgres(最新版本),我有一个表,我会做很多LIKE类型查询等,但由于我的客户可以访问CRUD,因此值无疑会经常更改。我可以理解索引吗?他们只是头疼吗?
答案 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。