婷婷综合国产,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
    国产亚洲福利社区一区| 91网站在线播放| 91精品国产一区二区三区| 欧美大片一区二区三区| 欧美精品99久久久**| 美女视频免费一区| 午夜天堂影视香蕉久久| 99国产精品99久久久久久| 成人av小说网| 欧美久久久久久久久中文字幕| 欧美人牲a欧美精品| 日韩欧美亚洲国产精品字幕久久久| 欧美一区二区精美| 精品福利视频一区二区三区| 国产精品久久久久桃色tv| 日韩va欧美va亚洲va久久| 99精品视频在线播放观看| 26uuuu精品一区二区| 亚洲成人av资源| eeuss鲁一区二区三区| 欧美一级黄色录像| 一片黄亚洲嫩模| 成人aa视频在线观看| 日韩欧美的一区二区| 偷拍自拍另类欧美| 欧美综合在线视频| 亚洲色图在线播放| 高清成人在线观看| 久久亚洲春色中文字幕久久久| 欧美一区二区视频在线观看2020| 尤物av一区二区| 激情五月婷婷综合网| 国产性天天综合网| 日韩高清一区二区| 日韩欧美国产一区在线观看| 国产福利视频一区二区三区| 国产婷婷一区二区| 久久精品免费观看| 久久99国产乱子伦精品免费| www.综合网.com| 欧美亚洲一区二区在线观看| 欧美日韩国产区一| 欧美本精品男人aⅴ天堂| 中文字幕人成不卡一区| 日本sm残虐另类| 一区二区三区 在线观看视频| 国产精品狼人久久影院观看方式| 欧美久久久久久久久中文字幕| 久久久久99精品国产片| 久久先锋影音av| 国产女主播一区| 欧美xxxx老人做受| 中文字幕国产一区| 香蕉影视欧美成人| 亚洲国产你懂的| 裸体健美xxxx欧美裸体表演| 欧美乱熟臀69xxxxxx| 日本aⅴ亚洲精品中文乱码| 日韩免费在线观看| 久久综合综合久久综合| 精品国精品自拍自在线| 成人久久视频在线观看| 日韩久久一区二区| 91玉足脚交白嫩脚丫在线播放| 国产情人综合久久777777| 日本强好片久久久久久aaa| 久久色在线观看| 欧美在线观看视频一区二区| 午夜视频在线观看一区二区三区| 欧美精品久久一区二区三区| 国产乱码精品一品二品| 亚洲尤物视频在线| 亚洲激情av在线| 国产精品人人做人人爽人人添 | 蜜桃久久精品一区二区| 久久你懂得1024| 97精品国产露脸对白| 国产精品久久久久久久久免费樱桃| 日本电影欧美片| 91精品国产手机| 精品久久人人做人人爱| 2023国产精华国产精品| 日韩影院在线观看| 国产成人一级电影| av在线免费不卡| 免费日本视频一区| 欧美国产精品久久| 久久欧美中文字幕| 26uuuu精品一区二区| 欧美性三三影院| 成人午夜av在线| 成人蜜臀av电影| 国产精品亚洲午夜一区二区三区| 亚洲婷婷在线视频| 欧美日韩国产123区| 亚洲欧美激情一区二区| 欧美激情综合在线| 午夜精品一区二区三区三上悠亚| 狠狠色丁香婷婷综合| 99九九99九九九视频精品| 精品久久久久香蕉网| 丝袜美腿亚洲综合| 亚洲欧美日韩在线不卡| 国产精品毛片无遮挡高清| 国产精品欧美久久久久无广告| 久久综合色之久久综合| 综合色天天鬼久久鬼色| 五月天视频一区| 国产成人小视频| 欧美曰成人黄网| 91天堂素人约啪| 欧美色国产精品| 日韩精品一区二区三区中文不卡 | 国产精品18久久久久久久网站| 久久精品国产99国产| 精品国产欧美一区二区| 国产精品久久久久久一区二区三区| 亚洲综合色自拍一区| 国产一区二区不卡| 精品国产乱子伦一区| 亚洲国产日韩a在线播放性色| 国产在线播精品第三| 欧美日韩国产经典色站一区二区三区| 精品欧美久久久| 欧美国产精品中文字幕| 国产自产2019最新不卡| 国产精品视频免费| 色一情一伦一子一伦一区| 亚洲婷婷综合久久一本伊一区| 成人美女在线观看| 亚洲日本韩国一区| 777久久久精品| 一区二区三区成人| 亚洲国产一区视频| 日本成人在线电影网| 不卡欧美aaaaa| 日韩欧美国产午夜精品| 欧美亚洲精品一区| 欧美无砖砖区免费| 精品女同一区二区| 精品一区二区三区视频| 成人va在线观看| 欧美日韩和欧美的一区二区| 欧美一区二区私人影院日本| 日韩视频一区二区| 男女激情视频一区| 国产福利精品导航| 亚洲人妖av一区二区| 亚洲日本在线视频观看| 久久国产夜色精品鲁鲁99| 日韩视频免费观看高清在线视频| 日日欢夜夜爽一区| 欧美成人女星排名| 日本高清不卡aⅴ免费网站| 免费在线看一区| 久久精品亚洲精品国产欧美| 91黄色在线观看| 国产不卡在线视频| 日本不卡不码高清免费观看| 亚洲三级理论片| 中文在线一区二区| 久久久久免费观看| 日韩视频123| 91福利在线导航| 国产成人综合在线| 国产美女一区二区| 最好看的中文字幕久久| 欧美视频一区二区三区四区| 亚洲日本在线视频观看| ...av二区三区久久精品| 色综合视频一区二区三区高清| 欧美一区二区三区电影| 亚洲电影在线播放| 91丝袜呻吟高潮美腿白嫩在线观看| 久久久久久久久久久99999| 91高清视频在线| 国产三级精品在线| 成人午夜在线免费| 亚洲一区影音先锋| 欧美一级黄色片| proumb性欧美在线观看| 亚洲视频每日更新| 国产精品免费人成网站| 欧美一区二区三区不卡| 中国色在线观看另类| 成人午夜激情视频| 欧美一区二区网站| 亚洲裸体在线观看| 91美女视频网站| 亚洲狠狠丁香婷婷综合久久久| 亚洲精品老司机| 欧美性猛交xxxx黑人交| 日韩电影在线一区二区| 日韩三级电影网址| 免费观看一级欧美片| 欧美性猛交xxxx黑人交| 日韩欧美国产成人一区二区| 蜜桃久久久久久| 欧美日韩国产综合一区二区三区| 蜜桃av一区二区三区电影|