PostgreSQL自带Pgadmin客户端,可用于访问本地和远程PG库,一些tricks如下:

1、联合查询

SELECT * FROM table1 INNER JOIN table2 ON table1.id=table2.id

# 其中table1,table2还可以分别用SQL选择如

SELECT * FROM (SELECT * FROM table1 where num1=2 limit 10 offset 0) a INNER JOIN (SELECT * FROM  table2 where num2=4) b ON a.id=b.id

2、索引

# 查看pg库某表table1是否使用索引

SELECT * FROM pg_indexes WHERE tablename='table1'

# 对table1的某一列或者几列创建索引

CREATE INDEX table1_index ON table1(num1, num2)  # table_index为建立的索引名称

# 删除索引

DROP INDEX table1_index

 2.1 复合索引

多列复合索引的创建建议:

  1、离散查询条件(例如 等值)的列放在最前面,如果一个复合查询中有多个等值查询的列,尽量将选择性好(count(distinct) 值多的)的放在前面。

  2、离散查询条件(例如 多值)的列放在后面,如果一个复合查询中有多个多值查询的列,尽量将选择性好(count(distinct) 值多的)的放在前面。

  3、连续查询条件(例如 范围查询)的列放在最后面,如果一个复合查询中有多个多值查询的列,尽量将输入范围条件返回结果集少的列放前面,提高筛选效率(同时也减少索引扫描的范围)。

  4、如果返回的结果集非常大(或者说条件命中率很高),并且属于流式返回(或需要高效率优先返回前面几条记录),同时有排序输出的需求。建议按排序键建立索引。

 

3、try...except的使用

  Postgres数据库中,同一事务中如果某次数据库操作中出错的话,那这个事务以后的数据库都会出错。

  即

PostgreSQL数据库一些tricks
连接OPEN。
try {

               try {

                    数据库操作A。

                } catch (Exception e) {

                    log.error("do something");

                }

 

               数据库操作B。   //此次数据操作有可能出现上面的错误。

               事务提交commit。

           } catch (Exception ex) {

               事务回滚rollback。

           } finally {

               关闭连接。

           }
View Code

相关文章: