0、使用explain工具检测sql语句执行时间和速度。
Explain (analyze,buffers) select * from tbl_tvwall_wnd where fl_tvwall_scene_id = 37 and fl_task_id = 0;
实际测试发现explain反馈的sql执行时间要比sql实际运行的时间要长一些,个人猜测是因为explain托管sql运行导致执行速度变慢。
1、索引:对于非主键的条件查询是比较慢的,针对比较固定的查询条件组合,可以考虑创建索引来提升查询速度。索引不仅可以用于查询,还可以用来update、delete。
创建联合索引:
create index index_tvwall_wnd_for_pane ON tbl_tvwall_pane(fl_tvwall_id,fl_tvwall_wnd_id);
删除索引
drop index index_tvwall_wnd_for_pane;
查看pgsql某张表中索引是否存在:
select relname, indexrelname from pg_stat_user_indexes where relname = 'tbl_tvwall_pane' and indexrelname = 'index_tvwall_wnd_for_pane';
查询结果:
relname | indexrelname
-----------------+---------------------------
tbl_tvwall_pane | index_tvwall_wnd_for_pane
有时一些数据表会创建外键,这样删除数据时会影响删除速度,我们可以考虑在删除数据时暂时关闭外键,数据删除完毕后再开启外键。
postgresql的外键由触发器实现,故可以通过关闭数据表的触发器来关闭外键约束。
alter table tbl_tvwall_pane enable trigger all;
alter table tbl_tvwall_pane disable trigger all;
不过这种办法存在风险,当数据表存在多线程读写时可能会造成数据不一致,而且后续很难回溯,建议慎重使用。