首页 > 数据库技术 > 详细

PostgreSQL Select 索引优化

时间:2018-09-07 14:45:45      阅读:264      评论:0      收藏:0      [点我收藏+]

使用 gin() 创建全文索引后,虽然有走索引,但是当结果集很大时,查询效率还是很底下,

SELECT keyword,avg_mon_search,competition,impressions,ctr,position,suggest_bid,click,update_time 
FROM keyword
WHERE
update_time is not null and plainto_tsquery(‘driver‘) @@ keyword_participle
ORDER BY avg_mon_search DESC
LIMIT 500 OFFSET 0;

技术分享图片

 

背景: keyword 表中有八千万行数据,建立了 gin( keyword_participle ) 索引,以及其他排序字段的 BTREE 索引

分析:当查询当个单词时,虽然有走全文索引,但是由于返回的结果集很大,有二十多万行数据,而且返回后需要再次进行排序,导致性能严重下降,

 

处理方法:限制全文索引返回的结果集行数,结果集变小了,也就减少了排序消耗的时间,况且全文索引分词返回的这么多数据,用户只是查看前面一部分,通过这种方式让用户完善搜索词,知道找到自己想要的结果。

SELECT
keyword,avg_mon_search,competition,impressions,ctr,position,suggest_bid,click,update_time, count(*) over() as res_count 
FROM 
 (SELECT keyword,avg_mon_search,competition,impressions,ctr,position,suggest_bid,click,update_time 
FROM keyword WHERE update_time is not null AND avg_mon_search > 0 AND plainto_tsquery(‘english_nostop‘, ‘driver‘) @@ keyword_participle limit 20000
) AS tmp ORDER BY avg_mon_search DESC LIMIT 500 OFFSET 0;

  技术分享图片

 

PostgreSQL Select 索引优化

原文:https://www.cnblogs.com/ryanzheng/p/9604464.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!