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
你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 行记录)
结果是:
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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28