+ -
当前位置:首页 → 问答吧 → postgresql创建索引后,用‘XX%’查找不能提高效率

postgresql创建索引后,用‘XX%’查找不能提高效率

时间:2011-08-30

来源:互联网

postgresql创建索引后,默认用btree,用‘浙江大学%’查找要几十毫秒,用‘浙江大学’查找不到1毫秒,应该可以用通配符的啊,为什么差那么多呢?

作者: freethinking01   发布时间: 2011-08-30

而且同样的表,用‘XX%’查询,在mysql中不到10毫秒(显示0.00 sec),在postgresql中要几十毫秒

作者: freethinking01   发布时间: 2011-08-30

在MYSQL里面,可以匹配前缀索引,在postgresql里面,可能不能用到索引吧。

作者: zuoxingyu   发布时间: 2011-08-30

应该可以的
你explain一下, 按理说应该会出现 index cond (xxx >='浙江大学' and xxx<='浙江大X')

如果没出现: 可能是其他原因,
1,收集状态失效, (用analyze重新收集)
2,服务端字符集被设为SQLASCII


作者: trainee   发布时间: 2011-08-30

EXPLAIN ANALYZE select name from point_01022 where name like'先锋科技'; 
结果是:
 Index Scan using pointhz_name_index on point_01022 (cost=0.00..8.29 rows=1 width=25) (actual time=0.155..0.157 rows=1 loops=1)
  Index Cond: ((name)::text = '先锋科技'::text)
  Filter: ((name)::text ~~ '先锋科技'::text)
 Total runtime: 0.185 ms
(4 行记录)

EXPLAIN ANALYZE select name from point_01022 where name like'先锋科技%'; --多了 %
结果是:
 Seq Scan on point_01022 (cost=0.00..2974.95 rows=10 width=25) (actual time=75.226..82.462 rows=2 loops=1)
  Filter: ((name)::text ~~ '先锋科技%'::text)
 Total runtime: 82.517 ms
(3 行记录)

作者: freethinking01   发布时间: 2011-08-30

热门下载

更多