Greenplum中like查询与index~补充完善之前讨论

声明:文中观点为作者的个人观点、不代表官方、如需更多帮助,请联系Pivotal官方·转载必须注明出处
通常情况下,如果我们使用默认的初始化方式去gpinitsystem,在这种情况下,创建一个column的index后,like查询
并不会使用索引来优化查询,因为查询计划不知道该如何使用索引来加速,索引通常可以处理的运算符是普通的数学
比较符号:> < = >= <= != >
根据InstallGuide和PostgreSQL8.2.3的手册可以发现,如果要使得like查询可以使用index有两种方法:
1、在初始化系统时使用值为C的Locale设置
2、在创建index时使用操作符类opclass(此处不详说,可参见Guide)
两者比较起来各有优缺点,需要根据情况选择
第一种选择可以使得默认的index被like查询使用,无需在create index的时候考虑opclass的问题,但order by默认
不会按照中文方式排序,且系统初始化之后无法修改(系统初始化参数)
第二种选择在create index时必须考虑合适的opclass,但order by默认可以按照Locale的设置来排序,因为Locale为
C时的排序不符合中文的排序习惯
另外,到目前为止,除了添加一个reverse列帮助实现左百分号的like查询能够使用index外,笔者没有找到其他办法,
但这个办法比较繁琐,类似Oracle中的reverse index是不存在的,即便在create index时使用了reverse函数作为column
来生成索引,在查询时无论是正向的使用,还是将column做reverse操作后使用,查询计划均不理会这个index的存在,
虽然理论上来说,这样做查询计划是可以知道我们想干什么的,但事实证明的确无效
声明:文中观点为作者的个人观点、不代表官方、如需更多帮助,请联系Pivotal官方·转载必须注明出处

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11022757/viewspace-719843/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/11022757/viewspace-719843/

你可能感兴趣的:(数据库)