服务器管理软件-Postgresql 查看SQL语句执行效率的操作
Explain指令在处理数据库性能上是第一引荐运用指令,大部分的性能问题能够经过此指令来简略的处理,Explain能够用来检查 SQL 句子的履行效 果,能够协助挑选更好的索引和优化查询句子,写出更好的优化句子。
Explain语法:
1explain select … from … [where …]
例如:
1explain select * from dual;
这儿有一个简略的例子,如下:
EXPLAIN SELECT * FROM tenk1;
QUERY PLAN
—————————————————————-
Seq Scan on tenk1 (cost=0.00..458.00 rows=10000 width=244)
EXPLAIN引用的数据是:
1). 估计的发动开支(在输出扫描开始之前耗费的时刻,比如在一个排序节点里做排续的时刻)。
2). 估计的总开支。
3). 估计的该规划节点输出的行数。
4). 估计的该规划节点的行平均宽度(单位:字节)。
这儿开支(cost)的核算单位是磁盘页面的存取数量,如1.0将表明一次顺序的磁盘页面读取。其中上层节点的开支将包括其一切子节点的开支。这儿的输出行数(rows)并不是规划节点处理/扫描的行数,通常会更少一些。一般而言,顶层的行估计数量会更接近于查询实践回来的行数。
现在咱们履行下面基于体系表的服务器管理软件查询:
1SELECT relpages, reltuples FROM pg_class WHERE relname = ‘tenk1’;
从查询成果中能够看出tenk1表占有358个磁盘页面和10000条记载,可是为了核算cost的值,咱们仍然需要知道别的一个体系参数值。
postgres=# show cpu_tuple_cost;
cpu_tuple_cost
—————-
0.01
(1 row)
cost = 458(磁盘页面数) + 10000(行数) * 0.01(cpu_tuple_cost体系参数值
补充:postgresql SQL COUNT(DISTNCT FIELD) 优化
布景
统计某时段关键词的一切总数,也包含null (statistics 有400w+的数据,表大小为 600M),故
写出sql:
1select count(distinct keyword) +1 as count from statistics;
问题
虽然是后台查询,可是太慢了,履行时刻为为 38.6s,那怎么优化呢?
处理
办法1(治标)
把这个定时履行,然后把sql成果缓存下,然后程序拜访缓存成果,页面拜访是快了些,可是本质上还没有处理sql履行慢的问题。
办法2(治本)
优化sql,首先说说 count( distinct FIELD) 为啥这么慢,此处不再赘述了,请看这篇:https://www.jb51.net/article/65680.htm
优化内容:
1select count( distinct FIELD ) from table
修改为
1select count(1) from (select distinct FIELD from table) as foo;
比较
履行过程比对,能够运用 explian anaylze sql句子 检查