与其他所有内容一样,PostgreSQL似乎对表有更强大/更复杂的索引。也许有人可以帮助我知道索引列的默认方式。
默认情况下,我指的是整数/布尔列,它们在90%的时间内用于过滤表格结果。
在MySQL中,我只需在列上创建一个与该列同名的索引。我不确定使用了什么类型(btree?)或者命名索引与列相同的含义是什么 - 但它确实有效。
现在转移到PostgreSQL我想知道是否有任何问题命名索引具有相同的名称(或任何原因不是)。另外,我想知道哪种类型的索引应该用于int / bool值。
答案 0 :(得分:6)
大多数情况下,默认索引类型(btree)都可以。
默认索引名称(如果未在CREATE INDEX语句中指定一个)基于表和列名称,通常类似于 table _ 列 _idx。 IIRC索引名称在模式中必须是唯一的,因此如果您使用与列相同的名称命名索引,则如果在模式中的多个表中使用相同的列名,则可能会遇到麻烦。
答案 1 :(得分:6)
如果要索引布尔值,请使用条件索引。大多数布尔值要么是均匀分解的,在这种情况下,只是boole的索引几乎不会获得任何东西,因为你将读取一半或另一种方式。但是,如果你有一个boole,其中99.999%的行是一个值而另一个0.001%是另一个值,那么在JUST创建一个0.001%的索引是有道理的:
create index mostly_true on tablename (somefieldIwantwhenboolfieldisfalse)
where boolfield is false;
请注意,这也适用于多列索引。
create index mostly_true on tablename (col1,col2) where boolfield is false;