微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgresql – 在WHERE子句中包含大量列的查询的索引

为公寓网站建立搜索引擎,我不知道如何索引公寓表.

查询示例:

> … WHERE city_id = 1 AND size> 500和房间= 2
> … WHERE area_id = 2 AND ad_type =’agent’和价格BETWEEN 10000和14000
> … WHERE area_id = 2 OR area_id = 4 AND published_at> ‘2016-01-01’AND ad_type = 1

如您所见,列可能会有很大差异,WHERE子句中的列数最多可为10,甚至可能更多.

>我应该索引所有这些吗?
>只有最常见的?

你必须弄清楚你将在这查询中使用什么WHERE子句,每个条件发生的频率以及每个条件的选择性.

>除非必须,否则不要为很少发生的查询编制索引.
>使用多列索引,从=比较中出现的列开始.
>关于多列索引中列的顺序,从那些将在查询中使用的列开始(索引可以用于仅包含其某些列的查询,前提是它们位于索引的开头) .
>您可能会忽略具有低选择性的列,例如性别.

例如,使用上面的查询,如果它们都是频繁的并且所有列都是选择性的,那么这些索引就会很好:

... ON apartments (city_id,rooms,size)

... ON apartments (area_id,ad_type,price)

... ON apartments (area_id,published_at)

这些索引也可以用于WHERE子句,其中只包含area_id或city_id.

索引太多是不好的.

如果上述方法会导致索引太多,例如因为用户可以为WHERE子句选择任意列,所以最好对各个列进行索引,或者偶尔对经常组合在一起的列进行索引.

这样Postgresql就可以选择一个位图索引扫描来组合一个查询的多个索引.这比常规索引扫描效率低,但通常比顺序扫描更好.

原文地址:https://www.jb51.cc/postgresql/192829.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐