婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PostgreSQL利用遞歸優化求稀疏列唯一值的方法

PostgreSQL利用遞歸優化求稀疏列唯一值的方法

熱門標簽:電話機器人怎么換人工座席 移動外呼系統模擬題 地圖標注要花多少錢 天津開發區地圖標注app 廣州電銷機器人公司招聘 濟南外呼網絡電話線路 電銷機器人能補救房產中介嗎 400電話申請客服 江蘇400電話辦理官方

在數據庫中經常會碰到一些表的列是稀疏列,只有很少的值,例如性別字段,一般就只有2種不同的值。
但是當我們求這些稀疏列的唯一值時,如果表的數據量很大,速度還是會很慢。

例如:
創建測試表

bill=# create table t_sex (sex char(1), otherinfo text);
CREATE TABLE
bill=# insert into t_sex select 'm', generate_series(1,10000000)||'this is test';
INSERT 0 10000000
bill=# insert into t_sex select 'w', generate_series(1,10000000)||'this is test';
INSERT 0 10000000

查詢:
可以看到下面的查詢速度很慢。

bill=# select count(distinct sex) from t_sex;
 count
-------
   2
(1 row)

Time: 8803.505 ms (00:08.804)
bill=# select sex from t_sex t group by sex;
 sex
-----
 m
 w
(2 rows)

Time: 1026.464 ms (00:01.026)

那么我們對該字段加上索引又是什么情況呢?

速度依然沒有明顯

bill=# create index idx_sex_1 on t_sex(sex);
CREATE INDEX
bill=# select count(distinct sex) from t_sex;
 count
-------
   2
(1 row)

Time: 8502.460 ms (00:08.502)
bill=# select sex from t_sex t group by sex;
 sex
-----
 m
 w
(2 rows)

Time: 572.353 ms

的變化,可以看到執行計劃已經使用Index Only Scan了。

bill=# explain select count(distinct sex) from t_sex;
                     QUERY PLAN
----------------------------------------------------------------------------------------------
 Aggregate (cost=371996.44..371996.45 rows=1 width=8)
  -> Index Only Scan using idx_sex_1 on t_sex (cost=0.44..321996.44 rows=20000000 width=2)
(2 rows)

同樣的SQL我們看看在Oracle中性能如何?

創建測試表:

SQL> create table t_sex (sex char(1), otherinfo varchar2(100));

Table created.

SQL> insert into t_sex select 'm', rownum||'this is test' from dual connect by level =10000000;

10000000 rows created.

SQL> commit;

Commit complete.

SQL> insert into t_sex select 'w', rownum||'this is test' from dual connect by level =10000000;

10000000 rows created.

SQL> commit;

Commit complete.

性能測試:

SQL> set lines 1000 pages 2000
SQL> set autotrace on
SQL> set timing on

SQL> select count(distinct sex) from t_sex;

COUNT(DISTINCTSEX)
------------------
         2

Elapsed: 00:00:01.58

Execution Plan
----------------------------------------------------------
Plan hash value: 3915432945

----------------------------------------------------------------------------
| Id | Operation     | Name | Rows | Bytes | Cost (%CPU)| Time   |
----------------------------------------------------------------------------
|  0 | SELECT STATEMENT  |    |   1 |   3 | 20132  (1)| 00:00:01 |
|  1 | SORT GROUP BY   |    |   1 |   3 |      |     |
|  2 |  TABLE ACCESS FULL| T_SEX |  14M|  42M| 20132  (1)| 00:00:01 |
----------------------------------------------------------------------------

Note
-----
  - dynamic statistics used: dynamic sampling (level=2)


Statistics
----------------------------------------------------------
     0 recursive calls
     0 db block gets
   74074 consistent gets
     0 physical reads
     0 redo size
    552 bytes sent via SQL*Net to client
    608 bytes received via SQL*Net from client
     2 SQL*Net roundtrips to/from client
     1 sorts (memory)
     0 sorts (disk)
     1 rows processed

SQL> select sex from t_sex t group by sex;

SE
--
m
w

Elapsed: 00:00:01.08

Execution Plan
----------------------------------------------------------
Plan hash value: 3915432945

----------------------------------------------------------------------------
| Id | Operation     | Name | Rows | Bytes | Cost (%CPU)| Time   |
----------------------------------------------------------------------------
|  0 | SELECT STATEMENT  |    |  14M|  42M| 20558  (3)| 00:00:01 |
|  1 | SORT GROUP BY   |    |  14M|  42M| 20558  (3)| 00:00:01 |
|  2 |  TABLE ACCESS FULL| T_SEX |  14M|  42M| 20132  (1)| 00:00:01 |
----------------------------------------------------------------------------

Note
-----
  - dynamic statistics used: dynamic sampling (level=2)


Statistics
----------------------------------------------------------
     0 recursive calls
     0 db block gets
   74074 consistent gets
     0 physical reads
     0 redo size
    589 bytes sent via SQL*Net to client
    608 bytes received via SQL*Net from client
     2 SQL*Net roundtrips to/from client
     1 sorts (memory)
     0 sorts (disk)
     2 rows processed

可以看到Oracle的性能即使不加索引也明顯比PostgreSQL中要好。
那么我們在PostgreSQL中是不是沒辦法繼續優化了呢?這種情況我們利用pg中的遞歸語句結合索引可以大幅提升性能。

SQL改寫:

bill=# with recursive tmp as (
bill(#  (
bill(#   select min(t.sex) as sex from t_sex t where t.sex is not null
bill(#  )
bill(#  union all
bill(#  (
bill(#   select (select min(t.sex) from t_sex t where t.sex > s.sex and t.sex is not null)
bill(#    from tmp s where s.sex is not null
bill(#  )
bill(# )
bill-# select count(distinct sex) from tmp;
 count
-------
   2
(1 row)

Time: 2.711 ms

查看執行計劃:

bill=# explain with recursive tmp as (
bill(#  (
bill(#   select min(t.sex) as sex from t_sex t where t.sex is not null
bill(#  )
bill(#  union all
bill(#  (
bill(#   select (select min(t.sex) from t_sex t where t.sex > s.sex and t.sex is not null)
bill(#    from tmp s where s.sex is not null
bill(#  )
bill(# )
bill-# select count(distinct sex) from tmp;
                           QUERY PLAN
----------------------------------------------------------------------------------------------------------------------
 Aggregate (cost=53.62..53.63 rows=1 width=8)
  CTE tmp
   -> Recursive Union (cost=0.46..51.35 rows=101 width=32)
      -> Result (cost=0.46..0.47 rows=1 width=32)
         InitPlan 3 (returns $1)
          -> Limit (cost=0.44..0.46 rows=1 width=2)
             -> Index Only Scan using idx_sex_1 on t_sex t (cost=0.44..371996.44 rows=20000000 width=2)
                Index Cond: (sex IS NOT NULL)
      -> WorkTable Scan on tmp s (cost=0.00..4.89 rows=10 width=32)
         Filter: (sex IS NOT NULL)
  -> CTE Scan on tmp (cost=0.00..2.02 rows=101 width=32)
(11 rows)

Time: 1.371 ms

可以看到執行時間從原先的8000ms降低到了2ms,提升了幾千倍!

甚至對比Oracle,性能也是提升了很多。

但是需要注意的是:這種寫法僅僅是針對稀疏列,換成數據分布廣泛的字段,顯然性能是下降的, 所以使用遞歸SQL不適合數據分布廣泛的字段的group by或者count(distinct)操作。

到此這篇關于PostgreSQL利用遞歸優化求稀疏列唯一值的文章就介紹到這了,更多相關PostgreSQL遞歸優化內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • postgresql 導入數據庫表并重設自增屬性的操作
  • 在PostgreSQL中設置表中某列值自增或循環方式
  • postgresql數據添加兩個字段聯合唯一的操作

標簽:榆林 昭通 溫州 海西 辛集 濮陽 杭州 寶雞

巨人網絡通訊聲明:本文標題《PostgreSQL利用遞歸優化求稀疏列唯一值的方法》,本文關鍵詞  PostgreSQL,利用,遞歸,優化,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PostgreSQL利用遞歸優化求稀疏列唯一值的方法》相關的同類信息!
  • 本頁收集關于PostgreSQL利用遞歸優化求稀疏列唯一值的方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩美女一区二区三区四区| 99国产精品久久久久久久久久 | 国产精品女同一区二区三区| 日韩一级高清毛片| 欧美视频三区在线播放| 欧洲精品一区二区| 欧美三级视频在线观看| 777久久久精品| 欧美成人三级在线| 国产网站一区二区| 亚洲欧美精品午睡沙发| 一区二区三区四区在线免费观看| 亚洲午夜在线视频| 蜜芽一区二区三区| 国产成人无遮挡在线视频| 粉嫩av一区二区三区粉嫩| 91免费精品国自产拍在线不卡| 色婷婷久久99综合精品jk白丝| 欧美人狂配大交3d怪物一区| 欧美一区二区精美| 中国色在线观看另类| 亚洲在线成人精品| 狠狠色狠狠色综合系列| 成人福利在线看| 欧美日韩亚州综合| 国产午夜精品理论片a级大结局 | 91麻豆精品国产91久久久使用方法 | 性做久久久久久免费观看欧美| 蜜桃av一区二区三区电影| 成人av网站在线观看| 欧美日韩精品三区| 中国av一区二区三区| 日韩国产欧美三级| 成人av网在线| 日韩欧美国产综合| 一区二区三区精品久久久| 另类小说一区二区三区| 色综合av在线| 久久久久久麻豆| 日日夜夜免费精品| 91在线国内视频| 久久久精品影视| 五月激情丁香一区二区三区| 成人国产精品免费观看视频| 日韩欧美中文字幕公布| 亚洲综合一区二区精品导航| 岛国一区二区在线观看| 日韩欧美一区二区免费| 一区二区三区四区在线| 北条麻妃国产九九精品视频| 日韩美女主播在线视频一区二区三区 | 91精品国产综合久久精品麻豆 | 另类综合日韩欧美亚洲| 在线免费观看日韩欧美| 国产精品欧美久久久久一区二区| 蜜臀av性久久久久蜜臀aⅴ| 在线观看亚洲成人| 中文字幕亚洲在| 国产·精品毛片| 久久午夜老司机| 激情成人午夜视频| 2019国产精品| 国产一区二三区好的| 精品日韩在线观看| 黄网站免费久久| 欧美一区二区三级| 玖玖九九国产精品| 欧美mv日韩mv国产网站| 久色婷婷小香蕉久久| 精品少妇一区二区三区日产乱码| 日韩电影在线一区二区| 欧美高清视频在线高清观看mv色露露十八| 亚洲欧美韩国综合色| 色综合久久久久网| 亚洲激情校园春色| 欧美视频一区二区三区在线观看| 一区二区在线免费| 欧美日韩国产系列| 蜜桃视频在线观看一区| 久久久久久日产精品| 成人一区二区三区视频 | 欧美一区二区三区成人| 美美哒免费高清在线观看视频一区二区| 欧美浪妇xxxx高跟鞋交| 久久成人18免费观看| 久久青草欧美一区二区三区| 成人久久18免费网站麻豆 | av中文一区二区三区| 国产精品色哟哟网站| 色狠狠桃花综合| 奇米777欧美一区二区| 国产视频一区不卡| 在线观看视频91| 久久激五月天综合精品| 中文字幕的久久| 欧美性大战xxxxx久久久| 日韩福利视频网| 中文字幕免费不卡| 欧美视频自拍偷拍| 国产精品18久久久久久久久| 国产精品国产三级国产aⅴ中文 | 欧美国产激情二区三区| 欧美主播一区二区三区| 精品系列免费在线观看| 亚洲欧美怡红院| 精品日韩成人av| 色综合久久综合中文综合网| 美女视频免费一区| 自拍偷拍欧美激情| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 美国毛片一区二区三区| 一色屋精品亚洲香蕉网站| 7777精品伊人久久久大香线蕉经典版下载 | 91毛片在线观看| 久久福利视频一区二区| 亚洲人一二三区| 久久久亚洲欧洲日产国码αv| 在线观看欧美黄色| 成人一区二区三区在线观看| 麻豆视频观看网址久久| 亚洲精品欧美激情| 国产日韩欧美综合在线| 欧美一区欧美二区| 欧美少妇bbb| 99麻豆久久久国产精品免费优播| 久久精品99国产精品| 亚洲成人综合网站| 自拍偷拍亚洲激情| 国产精品全国免费观看高清 | 久久精品理论片| 日日噜噜夜夜狠狠视频欧美人 | 视频一区中文字幕| 亚洲视频网在线直播| 国产欧美精品一区二区色综合| 91精品国产一区二区三区蜜臀| 色妹子一区二区| 97久久精品人人爽人人爽蜜臀| 国产成人av电影在线播放| 国产美女久久久久| 国产一区二区看久久| 国产在线视视频有精品| 韩国三级在线一区| 国产精品香蕉一区二区三区| 激情六月婷婷久久| 国产露脸91国语对白| 国产一二三精品| 处破女av一区二区| 成人综合日日夜夜| 暴力调教一区二区三区| av不卡在线观看| 色欧美乱欧美15图片| 91久久免费观看| 欧美另类z0zxhd电影| 91.麻豆视频| 欧美精品一区二区三区在线| 久久亚洲私人国产精品va媚药| 久久综合九色综合欧美就去吻 | 色婷婷综合在线| 欧洲亚洲国产日韩| 777a∨成人精品桃花网| 精品理论电影在线观看| 欧美国产日韩一二三区| 日韩理论片一区二区| 亚洲精品中文字幕乱码三区| 亚洲va在线va天堂| 美腿丝袜亚洲综合| 成人高清视频在线| 欧美日韩一区小说| 精品国产露脸精彩对白| 国产精品久久久久婷婷| 亚洲观看高清完整版在线观看| 蜜臀av在线播放一区二区三区| 国产真实精品久久二三区| 91在线精品一区二区| 91精品国产乱| 久久99精品久久久久| 国产精品羞羞答答xxdd| 色av一区二区| 26uuu色噜噜精品一区二区| 国产精品国产精品国产专区不蜜| 亚洲国产精品嫩草影院| 国产激情精品久久久第一区二区 | 欧美日韩在线播放三区四区| 精品国偷自产国产一区| 亚洲精品中文在线| 极品销魂美女一区二区三区| 日本韩国精品一区二区在线观看| 日韩美女一区二区三区四区| 亚洲精品国产品国语在线app| 欧美伊人精品成人久久综合97| 91精品国产91热久久久做人人| 日韩欧美国产三级电影视频| 色激情天天射综合网| 欧美一级二级三级乱码| 亚洲欧洲av一区二区三区久久| 日韩av电影天堂| 99re6这里只有精品视频在线观看| 欧美一三区三区四区免费在线看 | 在线观看精品一区| 国产欧美日韩在线观看|