佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > Postgresql 查看SQL語句執(zhí)行效率的操作

Postgresql 查看SQL語句執(zhí)行效率的操作

熱門標簽:AI電銷 鐵路電話系統(tǒng) Linux服務器 服務外包 呼叫中心市場需求 網(wǎng)站排名優(yōu)化 百度競價排名 地方門戶網(wǎng)站

Explain命令在解決數(shù)據(jù)庫性能上是第一推薦使用命令,大部分的性能問題可以通過此命令來簡單的解決,Explain可以用來查看 SQL 語句的執(zhí)行效 果,可以幫助選擇更好的索引和優(yōu)化查詢語句,寫出更好的優(yōu)化語句。

Explain語法:

explain select … from … [where ...]

例如:

explain select * from dual;

這里有一個簡單的例子,如下:

EXPLAIN SELECT * FROM tenk1;
               QUERY PLAN
----------------------------------------------------------------
   Seq Scan on tenk1 (cost=0.00..458.00 rows=10000 width=244)

EXPLAIN引用的數(shù)據(jù)是:

1). 預計的啟動開銷(在輸出掃描開始之前消耗的時間,比如在一個排序節(jié)點里做排續(xù)的時間)。

2). 預計的總開銷。

3). 預計的該規(guī)劃節(jié)點輸出的行數(shù)。

4). 預計的該規(guī)劃節(jié)點的行平均寬度(單位:字節(jié))。

這里開銷(cost)的計算單位是磁盤頁面的存取數(shù)量,如1.0將表示一次順序的磁盤頁面讀取。其中上層節(jié)點的開銷將包括其所有子節(jié)點的開銷。這里的輸出行數(shù)(rows)并不是規(guī)劃節(jié)點處理/掃描的行數(shù),通常會更少一些。一般而言,頂層的行預計數(shù)量會更接近于查詢實際返回的行數(shù)。

現(xiàn)在我們執(zhí)行下面基于系統(tǒng)表的查詢:

SELECT relpages, reltuples FROM pg_class WHERE relname = 'tenk1';

從查詢結(jié)果中可以看出tenk1表占有358個磁盤頁面和10000條記錄,然而為了計算cost的值,我們?nèi)匀恍枰懒硗庖粋€系統(tǒng)參數(shù)值。

postgres=# show cpu_tuple_cost;
   cpu_tuple_cost
  ----------------
   0.01
  (1 row)
cost = 458(磁盤頁面數(shù)) + 10000(行數(shù)) * 0.01(cpu_tuple_cost系統(tǒng)參數(shù)值

補充:postgresql SQL COUNT(DISTNCT FIELD) 優(yōu)化

背景

統(tǒng)計某時段關鍵詞的所有總數(shù),也包含null (statistics 有400w+的數(shù)據(jù),表大小為 600M),故

寫出sql:

select count(distinct keyword) +1 as count from statistics;

問題

雖然是后臺查詢,但是太慢了,執(zhí)行時間為為 38.6s,那怎么優(yōu)化呢?

解決

方法1(治標)

把這個定時執(zhí)行,然后把sql結(jié)果緩存下,然后程序訪問緩存結(jié)果,頁面訪問是快了些,但是本質(zhì)上還沒有解決sql執(zhí)行慢的問題。

方法2(治本)

優(yōu)化sql,首先說說 count( distinct FIELD) 為啥這么慢,此處不再贅述了,請看這篇:https://www.jb51.net/article/65680.htm

優(yōu)化內(nèi)容:

select count( distinct FIELD ) from table

修改為

select count(1) from (select distinct FIELD from table) as foo;

比較

執(zhí)行過程比對,可以使用 explian anaylze sql語句 查看

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • PostgreSQL對GROUP BY子句使用常量的特殊限制詳解
  • PostgreSQL中的VACUUM命令用法說明
  • PostgreSQL 如何查找需要收集的vacuum 表信息
  • PostgreSQL備份工具 pgBackRest使用詳解
  • postgresql數(shù)據(jù)合并,多條數(shù)據(jù)合并成1條的操作
  • postgresql數(shù)據(jù)添加兩個字段聯(lián)合唯一的操作
  • postgreSQL使用pgAdmin備份服務器數(shù)據(jù)的方法

標簽:蘭州 仙桃 銅川 湘潭 黃山 湖南 崇左 衡水

巨人網(wǎng)絡通訊聲明:本文標題《Postgresql 查看SQL語句執(zhí)行效率的操作》,本文關鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    乌鲁木齐县| 陇川县| 佛山市| 海盐县| 三门县| 商都县| 通渭县| 阆中市| 新丰县| 南昌县| 花莲市| 洛扎县| 弥渡县| 通州区| 横峰县| 应用必备| 柳州市| 上栗县| 诸城市| 锦屏县| 宁夏| 盖州市| 平和县| 花垣县| 卢湾区| 葫芦岛市| 兰溪市| 曲阳县| 泊头市| 阿城市| 绍兴市| 彰化县| 华安县| 织金县| 贞丰县| 阿城市| 阿坝县| 塔河县| 彭泽县| 施秉县| 改则县|