精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

10個你不知道的PostgreSQL功能:創建統計信息

數據庫 其他數據庫 PostgreSQL
如果你曾使用 Postgres 做過一些性能優化,你或許已經使用過 EXPLAIN 。EXPLAIN 向你展示了 PostgreSQL planner 為提供的語句生成的執行計劃。它說明了語句涉及到的表將會使用順序掃描、索引掃描等方式進行掃描,在使用多表的情況下將會使用連接算法。但是, Postgres 是如何產生這些規劃的?

如果你曾使用 Postgres 做過一些性能優化,你或許已經使用過 EXPLAIN 。EXPLAIN 向你展示了 PostgreSQL planner 為提供的語句生成的執行計劃。它說明了語句涉及到的表將會使用順序掃描、索引掃描等方式進行掃描,在使用多表的情況下將會使用連接算法。但是, Postgres 是如何產生這些規劃的?

[[224918]]

決定使用哪種規劃的一個非常重要的輸入是 planner 收集到的數據統計。這些統計的數據能夠使 planner 評估執行規劃的某一部分會返回多少行,繼而影響到使用哪一種規劃或連接算法。它們主要是通過運行 ANALYZE 或 VACUUM(和一些 DDL 命令,比如說 CREATE INDEX )來采集或更新的。

這些統計信息由 planner 存儲在 pg_class 和 pg_statistics 中。Pg_class 基本上存儲了每個表和索引中的條目總數,以及它們所占用的磁盤塊數。Pg_statistic 存儲關于每列的統計信息,例如哪些列的 % 值為 nul l,哪些是最常見的值,直方圖邊界等。你可以查看下面的示例,以了解 Postgres 在下表中為 col1 收集的統計信息類型。下面的查詢輸出展示了 planner(正確地)預估表中列 col1 中有 1000 個不同的值,并且還對最常見的值、頻率等進行了其他預估。

請注意,我們已經查詢了 pg_stats(一個擁有更多可讀版本的列統計信息的視圖)。

 

  1. CREATE TABLE tbl (                                                                         
  2.     col1 int,                                                                              
  3.     col2 int                                                                               
  4. );                                                                                         
  5.  
  6. INSERT INTO tbl SELECT i/10000, i/100000                                                   
  7. FROM generate_series (1,10000000) s(i);                                                    
  8.  
  9. ANALYZE tbl;                                      
  10.  
  11. select * from pg_stats where tablename = 'tbl' and attname = 'col1'
  12. -[ RECORD 1 ]----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
  13. schemaname             | public 
  14. tablename              | tbl 
  15. attname                | col1 
  16. inherited              | f 
  17. null_frac              | 0 
  18. avg_width              | 4 
  19. n_distinct             | 1000 
  20. most_common_vals       | {318,564,596,...} 
  21. most_common_freqs      | {0.00173333,0.0017,0.00166667,0.00156667,...} 
  22. histogram_bounds       | {0,8,20,30,39,...} 
  23. correlation            | 1 
  24. most_common_elems      |  
  25. most_common_elem_freqs |  
  26. elem_count_histogram   | 

單列統計數據不足時

這些單列統計信息可幫助 planner 估算你的條件選擇性(這是 planner 用來估算索引掃描將選擇多少行的內容)。 當查詢中存在多個條件時,planner 假定列(或 where 子句條件)彼此獨立。 當列相互關聯或相互依賴并導致 planner 低估或高估這些條件將返回的行數時,就不適用。

我們來看下面的幾個例子。 為了使查詢計劃易于閱讀,我們通過設置 max_parallel_workers_per_gather 為 0 來關閉每個查詢的并行性:

 

  1. EXPLAIN ANALYZE SELECT * FROM tbl where col1 = 1;                             
  2.                                                 QUERY PLAN                                                  
  3. ----------------------------------------------------------------------------------------------------------- 
  4.  Seq Scan on tbl  (cost=0.00..169247.80 rows=9584 width=8) (actual time=0.641..622.851 rows=10000 loops=1) 
  5.    Filter: (col1 = 1) 
  6.    Rows Removed by Filter: 9990000 
  7.  Planning time: 0.051 ms 
  8.  Execution time: 623.185 ms 
  9. (5 rows

正如你看到的那樣,planner 估計 col1 的值為 1 的行數是 9584 ,而查詢返回的實際行數是 10000 ,所以相當準確。

當你在 column 1 和 column 2 都包含過濾器時會發生什么情況。

 

  1. EXPLAIN ANALYZE SELECT * FROM tbl where col1 = 1 and col2 = 0;                             
  2.                                                 QUERY PLAN                                                 
  3. ---------------------------------------------------------------------------------------------------------- 
  4.  Seq Scan on tbl  (cost=0.00..194248.69 rows=100 width=8) (actual time=0.640..630.130 rows=10000 loops=1) 
  5.    Filter: ((col1 = 1) AND (col2 = 0)) 
  6.    Rows Removed by Filter: 9990000 
  7.  Planning time: 0.072 ms 
  8.  Execution time: 630.467 ms 
  9. (5 rows

planner 的估計減少了100倍! 讓我們試著理解為什么發生這種情況。

第一個列的選擇性約為 0.001(1/1000),第二個列的選擇性為 0.01(1/100)。 要計算將由這兩個“獨立”條件過濾的行數,planner 會將它們的選擇性相乘。 所以,我們得到:

  • 選擇性= 0.001 * 0.01 = 0.00001。

當它乘以我們在表中的行數即 10000000 時,我們得到 100。這就是 planner 對 100 的估計值的來源。 但是,這些列不是獨立的,那么我們如何告知 planner ?

在 PostgreSQL 中創建統計信息

在 Postgres 10 之前,沒有一種簡易的方式去告訴 planner 采集捕捉列之間關系的數據統計。但是, Postgres 10 有一個新特性正好解決了這個問題,可以使用 CREATE STATISTICS 來創建擴展統計的對象,告訴服務器去采集這些有意思的相關列的額外的統計信息。

函數依賴統計

回到我們先前評估的問題,col2 的值僅僅是 col1/10 。在數據庫的術語中,我們會說 col2 是函數依賴于 col1 ,也就是說,col1 的值足以決定 col2 的值,并且不存在有兩行數據擁有相同的 col1 值的同時有不同的 col2 值。因此,在 col2 列上的第二個過濾篩選并沒有移除任何行!但是,planner 捕捉到了足夠的統計信息去知道這件事情。

讓我們來創建一個統計對象去捕獲這些列和運行分析(ANALYZE)所依賴的函數統計。

 

  1. CREATE STATISTICS s1 (dependencies) on col1, col2 from tbl;  
  2. ANALYZE tbl; 

讓我們來看看現在的計劃是怎么來的。

 

  1. EXPLAIN ANALYZE SELECT * FROM tbl where col1 = 1 and col2 = 0;                             
  2.                                                 QUERY PLAN                                                  
  3. ----------------------------------------------------------------------------------------------------------- 
  4.  Seq Scan on tbl  (cost=0.00..194247.76 rows=9584 width=8) (actual time=0.638..629.741 rows=10000 loops=1) 
  5.    Filter: ((col1 = 1) AND (col2 = 0)) 
  6.    Rows Removed by Filter: 9990000 
  7.  Planning time: 0.115 ms 
  8.  Execution time: 630.076 ms 
  9. (5 rows

很好!讓我們看一下對計劃的測量。

 

  1. SELECT stxname, stxkeys, stxdependencies                                                   
  2.   FROM pg_statistic_ext                                                                    
  3.   WHERE stxname = 's1';    
  4. stxname | stxkeys |   stxdependencies     
  5. ---------+---------+---------------------- 
  6.  s1      | 1 2     | {"1 => 2": 1.000000} 
  7. (1 row) 

看這里,我們可以看到, Postgres 意識到 col1 完全決定 col2 ,因此用系數1來捕獲這些信息。現在,所有的查詢都過濾這些列之后,計劃將會得到更好的評估。

ndistinct 統計

函數依賴是你可以在列之間捕獲的一種關系。 你可以捕獲的另一種統計信息是一組列的不同值。 我們之前指出,planner 可以獲取每列不同值的統計數字,但再次合并多列時,這些統計數據往往是錯誤的。

這些不好的數據是在什么時候影響我們的呢? 下面來看一個例子。

 

  1. EXPLAIN ANALYZE SELECT col1,col2,count(*) from tbl group by col1, col2;                    
  2.                                                          QUERY PLAN                                                           
  3. ----------------------------------------------------------------------------------------------------------------------------- 
  4.  GroupAggregate  (cost=1990523.20..2091523.04 rows=100000 width=16) (actual time=2697.246..4470.789 rows=1001 loops=1) 
  5.    Group Key: col1, col2 
  6.    ->  Sort  (cost=1990523.20..2015523.16 rows=9999984 width=8) (actual time=2695.498..3440.880 rows=10000000 loops=1) 
  7.          Sort Key: col1, col2 
  8.          Sort Method: external sort  Disk: 176128kB 
  9.          ->  Seq Scan on tbl  (cost=0.00..144247.84 rows=9999984 width=8) (actual time=0.008..665.689 rows=10000000 loops=1) 
  10.  Planning time: 0.072 ms 
  11.  Execution time: 4494.583 ms 

聚合行時,Postgres 選擇做散列聚合或組合。 如果它認為散列表合適,則選擇散列聚合,否則它會選擇對所有行進行排序,然后按照 col1、col2 對它們進行分組。

現在,planner 估計組的數量(等于 col1、col2 的不同值的數量)將為 100000。它預計到它沒有足夠的 work_mem 將該散列表存儲在內存中。 因此,它使用基于磁盤的排序來運行該查詢。 但是,正如在查詢計劃中所看到的那樣,實際行數僅為 1001。也許,我們有足夠的內存來執行哈希聚合。

讓 planner 去捕獲 n_distinct 統計信息,重新運行查詢并找出結果。

 

  1. CREATE STATISTICS s2 (ndistinct) on col1, col2 from tbl;                                   
  2. ANALYZE tbl; 
  3.  
  4. EXPLAIN ANALYZE SELECT col1,col2,count(*) from tbl group by col1, col2;                    
  5.                                                       QUERY PLAN                                                        
  6. ----------------------------------------------------------------------------------------------------------------------- 
  7.  HashAggregate  (cost=219247.63..219257.63 rows=1000 width=16) (actual time=2431.767..2431.928 rows=1001 loops=1) 
  8.    Group Key: col1, col2 
  9.    ->  Seq Scan on tbl  (cost=0.00..144247.79 rows=9999979 width=8) (actual time=0.008..643.488 rows=10000000 loops=1) 
  10.  Planning time: 0.129 ms 
  11.  Execution time: 2432.010 ms 
  12. (5 rows

可以看到,現在的估算精度更高了(即 1000 ),查詢速度也提高了2倍左右。 通過運行下面的查詢,我們可以看到 planner 學到了什么。

 

  1. SELECT stxkeys AS k, stxndistinct AS nd                                                    
  2.   FROM pg_statistic_ext                                                                    
  3.   WHERE stxname = 's2';  
  4.   k  |       nd        
  5. -----+---------------- 
  6.  1 2 | {"1, 2": 1000} 

現實影響

在實際的生產模式中,你總是會有某些與數據庫不知道的相互依賴或關系的列。 以下是我們與 Citus 客戶見過的一些例子:

  • 有月份,季度和年份的列,因為你希望在報告中顯示按所有人分組的統計信息。
  • 地理層次之間的關系。 例如。 具有國家,州和城市的列,并由它們來過濾/分組。

這里的例子僅僅是在數據集中只有 10M 行的情況,并且我們已經看到,在存在相關列的情況下,使用 CREATE 統計信息可顯著改善查詢計劃,并顯示性能改進。在 Citus 使用案例中,我們有客戶存儲數十億行數據,糟糕查詢計劃的影響可能非常嚴重。在上述示例中,當 planner 選擇了一個糟糕的查詢計劃時,我們不得不為 10M 行做一個基于磁盤的分類。想象一下如果是數十億行,那會有多糟糕。

Postgres一直在變得越來越好

當我們著手構建 Citus 時,我們明確選擇了 Postgres 作為構建基礎。通過擴展 Postgres ,我們選擇了一個堅實的基礎,在每個版本迭代中變得更好。由于 Citus 是一個純粹的擴展,而不是分支,所以每個版本中出現的所有優秀新功能都可以在使用 Citus 時得到充分利用。

喜歡以上的內容嗎?

如果您有興趣閱讀我們團隊的更多文章,請注冊我們的月刊,我們會將最新內容直接發送到您的收件箱。

責任編輯:未麗燕 來源: 開源中國編譯
相關推薦

2019-11-29 16:49:42

HTML語言開發

2009-04-14 21:38:05

LinuxUbuntu技巧

2020-06-12 09:20:33

前端Blob字符串

2020-07-28 08:26:34

WebSocket瀏覽器

2018-04-26 13:33:20

Python語法Bug

2011-09-06 13:56:07

Vista服務器網卡

2022-03-10 09:11:33

JavaScrip開發JSON

2020-06-22 08:09:22

GitHub工具開發

2020-09-11 08:48:52

Python 3開發代碼

2024-12-17 08:33:42

2015-10-30 09:56:10

WiFiWiFi技術傳感

2023-12-21 14:40:09

Python編程語言

2024-05-20 09:27:00

Web 開發CSS

2017-07-21 09:48:45

SQL索引查詢

2019-04-30 08:09:12

Windows 10操作系統工具

2019-04-01 06:37:12

R語言數據分析數據

2025-02-27 08:33:13

2021-12-17 00:10:00

ChromeDevtools功能

2009-12-10 09:37:43

2022-10-13 11:48:37

Web共享機制操作系統
點贊
收藏

51CTO技術棧公眾號

亚洲天堂视频在线| 免费黄色在线播放| 亚洲欧美综合视频| 国产最新视频在线观看| 精品在线播放午夜| 欧美成人午夜激情视频| 亚洲精品无码一区二区| 欧美羞羞视频| 亚洲人成7777| 看高清中日韩色视频| 在线观看一二三区| 亚洲区国产区| 色av吧综合网| 欧美xxxxx精品| 久久亚洲资源中文字| 婷婷综合五月天| 伊人久久大香线蕉成人综合网| 久久高清内射无套| 婷婷精品在线| 欧美久久久久免费| 亚洲熟妇av一区二区三区漫画| 亚洲AV无码乱码国产精品牛牛| 成人在线免费视频观看| 欧美变态凌虐bdsm| 五月婷婷六月合| 黄毛片在线观看| 亚洲老妇xxxxxx| 日韩欧美99| 黑人精品一区二区| 精品一二三四区| 国产成人精品优优av| 国产乡下妇女做爰视频| **女人18毛片一区二区| 亚洲四色影视在线观看| 尤物网站在线观看| 国产剧情一区二区在线观看| 在线一区二区视频| 男人添女人下面高潮视频| gogo在线观看| 国产精品久久久久婷婷二区次| 国产精品夜色7777狼人| 波多野结衣国产| 亚洲天堂久久| 欧美成人在线网站| 波多野结衣喷潮| 成人黄色av| 亚洲男人天堂2024| 午夜av免费看| 欧美jizz19性欧美| 日韩一区二区三区在线视频| 精品亚洲一区二区三区四区| 韩日精品一区二区| 欧美丝袜一区二区| 欧美变态另类刺激| 欧亚av在线| 午夜精品久久久久久久久久| 福利视频免费在线观看| 日本精品600av| 一区二区三区波多野结衣在线观看 | 男人天堂网在线视频| 韩国视频一区二区| 亚洲r级在线观看| a天堂在线视频| 国产成人鲁色资源国产91色综| **欧美日韩vr在线| 色播视频在线播放| 亚洲区第一页| 国产v综合v亚洲欧美久久| 日韩综合在线观看| 欧美a级理论片| 国产欧美在线观看| 国产丝袜在线视频| 丰满岳乱妇一区二区三区| 国产一区二区不卡视频在线观看 | 97超碰人人在线| 欧美国产精品久久| 在线视频不卡国产| 国产黄a三级三级三级av在线看| 91丝袜呻吟高潮美腿白嫩在线观看| 国产精品日韩一区| 91麻豆成人精品国产| 国产精品66部| 国模精品娜娜一二三区| 亚洲 欧美 精品| 国产清纯在线一区二区www| 亚洲欧洲精品在线 | 国产第一页在线播放| 黄色在线一区| 国产经典一区二区| 国产免费的av| 91亚洲精华国产精华精华液| 日韩精品一线二线三线| а√中文在线8| 亚洲第一av色| 美女一区二区三区视频| 国产视频一区二区在线播放| 亚洲成人av中文字幕| 亚洲人成人无码网www国产| 国产精品99久久| 午夜精品久久久久久久99热| 性高潮视频在线观看| 国产ts人妖一区二区| 欧美精品与人动性物交免费看| 人成网站在线观看| 欧美激情中文字幕| 中文精品无码中文字幕无码专区| 免费a级毛片在线播放| 亚洲国产成人va在线观看天堂| 午夜久久久久久久久久久| 国产www视频在线观看| 在线视频亚洲一区| 成人免费看片载| 成人在线国产| 欧美亚洲视频在线看网址| 国产精品区在线观看| www久久久久| 麻豆映画在线观看| 欧美一区久久久| 精品成人在线观看| 欧美一级特黄高清视频| 久久不射中文字幕| 国产精品一区二区欧美| 日本激情在线观看| 在线一区二区观看| 黑丝av在线播放| 狠狠入ady亚洲精品经典电影| 久久久天堂国产精品女人| 在线观看xxxx| xfplay精品久久| 久久国产精品视频在线观看| 欧美午夜在线播放| 色综合伊人色综合网| 青草视频在线观看免费| 成人黄色国产精品网站大全在线免费观看 | 黄色资源网久久资源365| 欧美精品七区| 极品av在线| 亚洲第一天堂av| 久草视频中文在线| 国产成人免费视频网站 | 色丁香婷婷综合久久| 亚洲欧美在线高清| 成人亚洲精品777777大片| 国产91精品对白在线播放| 久久久久久久一区二区| 亚洲精品18在线观看| 亚洲综合在线视频| 影音先锋资源av| 欧美日本免费| 99在线看视频| 色呦呦呦在线观看| 日韩欧美久久久| 欧美黄片一区二区三区| 国产精品白丝jk黑袜喷水| 五月天在线免费视频| 国产一区二区三区黄网站| 久久久成人的性感天堂| 国产成a人亚洲精v品无码| 亚洲蜜臀av乱码久久精品蜜桃| 日韩精品视频久久| 亚洲性视频大全| 国产成人综合亚洲| 97超碰人人在线| 欧美色综合影院| 伊人久久久久久久久久久久久久| 国产精品亚洲产品| 九色91视频| 久久久人成影片一区二区三区在哪下载| 欧美一区二区性放荡片| 永久免费看片视频教学| 国产酒店精品激情| 又大又硬又爽免费视频| 免费成人蒂法| 日本中文字幕成人| 92国产在线视频| 日韩一区二区免费视频| 久久精品国产亚洲AV无码男同| 奇米影视一区二区三区| 好吊色这里只有精品| 亚洲一二av| 欧美在线精品免播放器视频| 日本韩国一区| 欧美日韩国产中文| 精品99在线观看| 久久这里只有精品6| 日本人视频jizz页码69| 91精品国产福利在线观看麻豆| 国产suv精品一区二区| 在线观看麻豆| 日韩欧美亚洲另类制服综合在线 | www.久久久久久| 午夜欧美一区二区三区在线播放| 日本三级黄色网址| 综合综合综合综合综合网| 国产精品一二三在线| 91破解版在线观看| 日韩在线中文字| 午夜视频免费在线| 欧美日韩一区二区三区高清| 久久精品国产亚洲av高清色欲| 国产成人综合在线观看| aa在线免费观看| 欧美一区二区| 日韩视频在线播放| 超碰一区二区三区| 成人黄色中文字幕| 美女100%一区| 欧美高清自拍一区| 2019中文字幕在线视频| 日韩国产高清污视频在线观看| 在线观看亚洲天堂| 一区二区三区在线视频免费| 欧美人与性囗牲恔配| 国产成人免费xxxxxxxx| 福利片一区二区三区| 久久精品123| a级免费在线观看| 欧美一区二区三区激情视频 | 伊人久久亚洲综合| 精品福利免费观看| 欧美人妻一区二区| 国产精品高清亚洲| 91中文字幕永久在线| 风间由美一区二区三区在线观看| www精品久久| 亚洲国产精品久久久天堂| 欧美三级网色| 欧美日韩大片免费观看| 99re在线| 久久99精品久久久野外观看| 国产精品三级美女白浆呻吟 | 91av在线免费观看| 日韩特级毛片| 欧美成人高清视频| 伦xxxx在线| 最近2019免费中文字幕视频三| 一炮成瘾1v1高h| 在线看日韩精品电影| 亚洲s码欧洲m码国产av| 偷拍日韩校园综合在线| 久久久午夜影院| 亚洲综合色噜噜狠狠| 日本少妇高清视频| 亚洲视频一区在线观看| 极品美妇后花庭翘臀娇吟小说| 成熟亚洲日本毛茸茸凸凹| 99久久99精品| 国产一区二区在线电影| 国产性生活一级片| 国产一区高清在线| 佐佐木明希电影| 成人免费黄色大片| 丰满大乳奶做爰ⅹxx视频| 91丨九色丨蝌蚪丨老版| 久久无码人妻精品一区二区三区| 麻豆freexxxx性91精品| 男人添女人下面免费视频| 毛片不卡一区二区| 亚洲五月激情网| 国产精品456露脸| 91丨porny丨对白| 久久女同精品一区二区| 精品欧美一区二区久久久| 国产亚洲欧洲997久久综合| 手机看片福利视频| 国产精品高清亚洲| 久久免费视频播放| 精品久久久久久中文字幕大豆网| 免费三级在线观看| 一区二区在线观看不卡| 国产第一页在线播放| 色哟哟日韩精品| 97人妻精品一区二区三区视频 | 国产伦精品一区二区三区在线播放 | 久热re这里精品视频在线6| 午夜精品久久久内射近拍高清| 亚洲国产日韩欧美在线| a级片一区二区| 国产亚洲精品v| 精品999在线| 国产制服丝袜一区| 中国一级特黄录像播放| 久久久久高清精品| 熟女av一区二区| 午夜精品久久久久久久蜜桃app| 草草久久久无码国产专区| 四虎影视成人精品国库在线观看| 97色在线播放视频| 日日夜夜天天综合| 91精品国产综合久久男男| 亚洲精品不卡在线观看| 日本一区二区精品| 99视频国产精品免费观看a| 欧美少妇性性性| 成人午夜福利视频| 亚洲香蕉在线观看| av片在线观看永久免费| 38少妇精品导航| 午夜不卡一区| 欧美日韩亚洲免费| 综合在线视频| 妞干网在线免费视频| 国产精品一区二区久久不卡| 这里只有久久精品| 亚洲五码中文字幕| 中文有码在线播放| 亚洲国产美女精品久久久久∴| 亚洲第一色网站| 伊人久久男人天堂| 日韩深夜视频| 91观看网站| 日韩欧美视频专区| 国产精品视频一区二区三区四区五区| 国产精品豆花视频| www.超碰97.com| 久久久综合激的五月天| 久草视频在线资源| 91麻豆精品国产91久久久更新时间| 国产精品伦一区二区三区| 亚洲美女www午夜| 日本片在线观看| 成人性生交xxxxx网站| 欧洲grand老妇人| 狠狠97人人婷婷五月| 国产91在线|亚洲| 内射一区二区三区| 欧美三级日本三级少妇99| 神马午夜在线观看| 欧美黄色www| 视频成人永久免费视频| 亚洲一区二区在| 日韩成人免费在线| 加勒比综合在线| 日韩欧美中文字幕在线播放| 日韩一级片免费看| 欧美国产日韩中文字幕在线| vam成人资源在线观看| 一级特黄录像免费播放全99| 免费欧美在线视频| 欧美黄色一级生活片| 色婷婷久久99综合精品jk白丝| 中国老头性行为xxxx| 亚洲午夜国产成人av电影男同| 免费在线看黄网站| 国产一区二区在线免费视频| jiujiure精品视频播放| 亚洲免费av一区二区三区| 国产网站一区二区| 秋霞精品一区二区三区| 亚洲欧美日韩爽爽影院| 日本高清不卡一区二区三区视频 | av爱爱亚洲一区| 不卡的免费av| 亚洲国产天堂久久综合| 国产黄色大片在线观看| 精品国产乱码久久久久久108| 欧美大黑bbbbbbbbb在线| 黄大色黄女片18第一次| 国产精品久久久久久久裸模| 亚洲视频一区二区三区四区| 色伦专区97中文字幕| 国产va免费精品观看精品| 久久天天东北熟女毛茸茸| 成人黄色av网站在线| 亚洲伊人成人网| 在线观看欧美www| 日韩一级视频| 成人区一区二区| 99久久精品国产精品久久| 国产精品一区无码| 中文字幕精品国产| 日本精品一区二区三区在线观看视频| 欧美极品一区| 久久精品国产一区二区三| a级片在线观看免费| 亚洲精品99999| 欧美日韩视频网站| 国产又黄又爽免费视频| fc2成人免费人成在线观看播放| 四虎永久免费在线| 亚洲高清不卡av| 欧美xnxx| 久久亚洲a v| 久久久久久免费网| 国产成人精品毛片| 国产91精品久久久久久久| 日韩精品免费| 色哟哟视频在线| 欧美在线色视频| 欧美xxxx少妇| 日本精品一区二区三区视频| 国产毛片精品一区| 亚洲欧美偷拍视频| 欧美成人免费小视频| 免费电影一区二区三区| 性生活在线视频| 91久久一区二区| 春色校园综合激情亚洲| 亚洲在线观看一区| 91社区在线播放|