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

解决方案 »

  1.   

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

  2.   

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

  3.   

    应该可以的
    你explain一下, 按理说应该会出现 index cond (xxx >='浙江大学' and xxx<='浙江大X')如果没出现: 可能是其他原因,
    1,收集状态失效, (用analyze重新收集)
    2,服务端字符集被设为SQLASCII
      

  4.   

    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 行记录)