PostgreSQL中varchar类型like前置%查询命中索引的方法
上一篇中,我们学习了PostgreSQL
中想要让varchar
类型支持like
查询能够命中索引,需要注意的地方。但是即便是创建索引时,指定了操作符类varchar_pattern_ops
,在使用like
查询的时候,还是只能保证sometext%
这种查询能够命中索引,但是%sometext
这种是无能为力的,见下图。
所以如果需要支持%sometext
方式的索引查询,还需要再做点工作:
上一篇中,我们学习了PostgreSQL
中想要让varchar
类型支持like
查询能够命中索引,需要注意的地方。但是即便是创建索引时,指定了操作符类varchar_pattern_ops
,在使用like
查询的时候,还是只能保证sometext%
这种查询能够命中索引,但是%sometext
这种是无能为力的,见下图。
所以如果需要支持%sometext
方式的索引查询,还需要再做点工作:
之前在使用PostgreSQL
中的varchar
类型时想当然的以为用最基本的索引创建语句创建的索引,就支持like
查询的。
类似这句:CREATE INDEX log_action_v_uri_index ON log_action (v_uri);
善于利用SQL
的explain
是SQL
调整优化的必经之路。但是遇到复杂的SQL
,查看explain
结果也是有点困难的。比如这样的:
好在很多数据库的客户端都提供了图形化的表现形式,比如PostgreSQL
的pgAdmin4
就能看到如下效果:
不过如果有个工具,能够hold住所有主流的关系型数据库的话,就更嗨皮了。答案就是IntelliJ IDEA
。如果你还没有尝试过其自带的Database
功能的话,推荐现在就试一下。在屏幕右侧应该能找到。
只需要按照向导添加相应的数据库连接就好了。不过这个功能免费的社区版是没有的。
创建完数据库链接后,通过此按钮打开SQL Console
窗口
然后在里面就可以愉快的编写SQL
了。
先来一段:
现在我们可以尝试通过IntelliJ IDEA
执行一次explain
了。
对于中国用户来说,一般的docker容器启动后,如果执行docker exec -it xxxx date
会发现打印出来的时间,比当前北京时间早八个小时。所以需要调整容器的时区,主要有两个命令(要在容器内部执行):
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
找到<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" />
sudo /Applications/Install\ macOS\ High\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/Sierra --applicationpath /Applications/Install\ macOS\ High\ Sierra.app --nointeraction |
已经把公钥添加到~/.ssh/authorized_keys
文件之后,有时候依然无法实现免密码登录。后来才发现,是因为有些文件的权限放大了。想想也是,如果authorized_keys
文件,是其他用户也能编辑的。那岂不是多了个后门,可以帮助其他用户绕到当前用户了。
所以重点在于几个关键文件是否把权限集中在自己手上,并且无论如何是不允许其他用户编辑的。
总结为以下几条命令chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys