我的意思是:具有 20 列的表是否比只有 4 列的表更能从对某个字段(在搜索式查询中使用的字段)建立索引中获益更多?

还:将索引添加到我不经常搜索但将来可能会搜索的字段有什么危害?添加索引有负面影响吗?这只是它在磁盘上占用的大小,还是添加不必要的索引会使运行速度变慢?

从评论中提取

我正在使用 Postgres(最新版本),并且我有一个表,我将在其中执行大量 LIKE 类型查询等,但由于我的客户可以访问 CRUD,因此这些值无疑会经常更改。我应该了解索引的想法吗?他们只是头痛吗?

有帮助吗?

解决方案

  

是否与20列的表从比具有仅4列的表索引某个字段(一个在搜寻肥胖型查询中使用的)中获益更多?

没有,列在一个表中数对没有好处轴承从具有索引。

索引是仅在指定的列(多个)的值;这将影响你的查询将如何多大好处看到的值的频率。例如,包含一个布尔值的列是索引一个糟糕的选择,因为它是一个50/50的机会的价值将是一个或另一个值。在50/50以上的所有行,索引不缩小特定行搜索。

  

什么是添加索引字段我不太多搜索的危害,但可能会在以后的未来?

索引仅加快数据检索时,他们可被使用,但它们插入/更新/删除语句的速度产生负面影响。索引还需要维护以保持它们的值。

其他提示

如果您正在执行 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,并且需要特殊的索引类型。 了解更多。

有一个问题,那就是全文索引比普通索引更复杂,而且 相关的设计决策并不简单. 。还有一些实现需要 额外的维护活动.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top