PostgreSQL的反向索引
上周我写了Oracle处理前%的文章,我后来研究了一下PostgreSQL的反向索引。建立表qq,表结构如下:
重点是建立一个反向索引。create index q2 on qq ( reverse(b) collate "C"); 这里开始建立不顺,这里请教了一下德哥。这里的写法和Oracle有所不同。多了collate "C",(当数据库默认的lc_collate<>C时,索引和查询都需要明确指定collate "C")。当我写完这个文章的时候,再去翻查,发现德哥2018年就写过类似的。
注意这里的B列的数据类型是字符串。如果在a列上这样做是报错的,因为a列是int型的。也就是说在字符串上直接这样用还行,如果是数值型的,我还没去想过。
最终SQL是:select * from qq where reverse (b) like reverse('%1234');
查看执行计划,用到了索引。看最终实现也符合预期。这个索引和SQL在实现上和Oracle是一模一样。当然这里数据也要多一些,10几条是不行的,这个也和Oracle差不多,一般都是1万多条数据起作用。MySQL的话十几条数据就能模拟出全表或者是使用索引。