午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > PostgreSQL教程(十):性能提升技巧

PostgreSQL教程(十):性能提升技巧

熱門標簽:打電話智能電銷機器人授權 重慶自動外呼系統定制 辦公外呼電話系統 合肥公司外呼系統運營商 海豐有多少商家沒有地圖標注 漯河外呼電話系統 外呼調研系統 地圖標注和圖片名稱的區別 美容工作室地圖標注

一、使用EXPLAIN:

    PostgreSQL為每個查詢都生成一個查詢規劃,因為選擇正確的查詢路徑對性能的影響是極為關鍵的。PostgreSQL本身已經包含了一個規劃器用于尋找最優規劃,我們可以通過使用EXPLAIN命令來查看規劃器為每個查詢生成的查詢規劃。
    PostgreSQL中生成的查詢規劃是由1到n個規劃節點構成的規劃樹,其中最底層的節點為表掃描節點,用于從數據表中返回檢索出的數據行。然而,不同的掃描節點類型代表著不同的表訪問模式,如:順序掃描、索引掃描,以及位圖索引掃描等。如果查詢仍然需要連接、聚集、排序,或者是對原始行的其它操作,那么就會在掃描節點"之上"有其它額外的節點。并且這些操作通常都有多種方法,因此在這些位置也有可能出現不同的節點類型。EXPLAIN將為規劃樹中的每個節點都輸出一行信息,顯示基本的節點類型和規劃器為執行這個規劃節點計算出的預計開銷值。第一行(最上層的節點)是對該規劃的總執行開銷的預計,這個數值就是規劃器試圖最小化的數值。
    這里有一個簡單的例子,如下:
 

復制代碼 代碼如下:

    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)并不是規劃節點處理/掃描的行數,通常會更少一些。一般而言,頂層的行預計數量會更接近于查詢實際返回的行數。
    現在我們執行下面基于系統表的查詢:
 
復制代碼 代碼如下:

    SELECT 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 = 358(磁盤頁面數) + 10000(行數) * 0.01(cpu_tuple_cost系統參數值)
    

     下面我們再來看一個帶有WHERE條件的查詢規劃。
 
復制代碼 代碼如下:

    EXPLAIN SELECT * FROM tenk1 WHERE unique1 7000;
   
                             QUERY PLAN
    ------------------------------------------------------------
     Seq Scan on tenk1  (cost=0.00..483.00 rows=7033 width=244)
       Filter: (unique1 7000)
   

    EXPLAIN的輸出顯示,WHERE子句被當作一個"filter"應用,這表示該規劃節點將掃描表中的每一行數據,之后再判定它們是否符合過濾的條件,最后僅輸出通過過濾條件的行數。這里由于WHERE子句的存在,預計的輸出行數減少了。即便如此,掃描仍將訪問所有10000行數據,因此開銷并沒有真正降低,實際上它還增加了一些因數據過濾而產生的額外CPU開銷。
    上面的數據只是一個預計數字,即使是在每次執行ANALYZE命令之后也會隨之改變,因為ANALYZE生成的統計數據是通過從該表中隨機抽取的樣本計算的。
    如果我們將上面查詢的條件設置的更為嚴格一些的話,將會得到不同的查詢規劃,如:
 
復制代碼 代碼如下:

    EXPLAIN SELECT * FROM tenk1 WHERE unique1 100;

                                      QUERY PLAN
    ------------------------------------------------------------------------------
     Bitmap Heap Scan on tenk1  (cost=2.37..232.35 rows=106 width=244)
       Recheck Cond: (unique1 100)
       ->  Bitmap Index Scan on tenk1_unique1  (cost=0.00..2.37 rows=106 width=0)
             Index Cond: (unique1 100)
   


    這里,規劃器決定使用兩步規劃,最內層的規劃節點訪問一個索引,找出匹配索引條件的行的位置,然后上層規劃節點再從表里讀取這些行。單獨地讀取數據行比順序地讀取它們的開銷要高很多,但是因為并非訪問該表的所有磁盤頁面,因此該方法的開銷仍然比一次順序掃描的開銷要少。這里使用兩層規劃的原因是因為上層規劃節點把通過索引檢索出來的行的物理位置先進行排序,這樣可以最小化單獨讀取磁盤頁面的開銷。節點名稱里面提到的"位圖(bitmap)"是進行排序的機制。

    現在我們還可以將WHERE的條件設置的更加嚴格,如:
 

復制代碼 代碼如下:

    EXPLAIN SELECT * FROM tenk1 WHERE unique1 3;

                                      QUERY PLAN
    ------------------------------------------------------------------------------
     Index Scan using tenk1_unique1 on tenk1  (cost=0.00..10.00 rows=2 width=244)
       Index Cond: (unique1 3)
   


    在該SQL中,表的數據行是以索引的順序來讀取的,這樣就會令讀取它們的開銷變得更大,然而事實上這里將要獲取的行數卻少得可憐,因此沒有必要在基于行的物理位置進行排序了。
    現在我們需要向WHERE子句增加另外一個條件,如:
 
復制代碼 代碼如下:

    EXPLAIN SELECT * FROM tenk1 WHERE unique1 3 AND stringu1 = 'xxx';
   
                                      QUERY PLAN
    ------------------------------------------------------------------------------
     Index Scan using tenk1_unique1 on tenk1  (cost=0.00..10.01 rows=1 width=244)
       Index Cond: (unique1 3)
       Filter: (stringu1 = 'xxx'::name)
   

    新增的過濾條件stringu1 = 'xxx'只是減少了預計輸出的行數,但是并沒有減少實際開銷,因為我們仍然需要訪問相同數量的數據行。而該條件并沒有作為一個索引條件,而是被當成對索引結果的過濾條件來看待。
    如果WHERE條件里有多個字段存在索引,那么規劃器可能會使用索引的AND或OR的組合,如:
 
復制代碼 代碼如下:

    EXPLAIN SELECT * FROM tenk1 WHERE unique1 100 AND unique2 > 9000;
    
                                         QUERY PLAN
    -------------------------------------------------------------------------------------
     Bitmap Heap Scan on tenk1  (cost=11.27..49.11 rows=11 width=244)
       Recheck Cond: ((unique1 100) AND (unique2 > 9000))
       ->  BitmapAnd  (cost=11.27..11.27 rows=11 width=0)
             ->  Bitmap Index Scan on tenk1_unique1  (cost=0.00..2.37 rows=106 width=0)
                   Index Cond: (unique1 100)
             ->  Bitmap Index Scan on tenk1_unique2  (cost=0.00..8.65 rows=1042 width=0)
                   Index Cond: (unique2 > 9000)
   

    這樣的結果將會導致訪問兩個索引,與只使用一個索引,而把另外一個條件只當作過濾器相比,這個方法未必是更優。
    現在讓我們來看一下基于索引字段進行表連接的查詢規劃,如:
 
復制代碼 代碼如下:

    EXPLAIN SELECT * FROM tenk1 t1, tenk2 t2 WHERE t1.unique1 100 AND t1.unique2 = t2.unique2;
     
                                          QUERY PLAN
    --------------------------------------------------------------------------------------
     Nested Loop  (cost=2.37..553.11 rows=106 width=488)
       ->  Bitmap Heap Scan on tenk1 t1  (cost=2.37..232.35 rows=106 width=244)
             Recheck Cond: (unique1 100)
             ->  Bitmap Index Scan on tenk1_unique1  (cost=0.00..2.37 rows=106 width=0)
                   Index Cond: (unique1 100)
       ->  Index Scan using tenk2_unique2 on tenk2 t2  (cost=0.00..3.01 rows=1 width=244)
             Index Cond: ("outer".unique2 = t2.unique2)
   

    從查詢規劃中可以看出(Nested Loop)該查詢語句使用了嵌套循環。外層的掃描是一個位圖索引,因此其開銷與行計數和之前查詢的開銷是相同的,這是因為條件unique1 100發揮了作用。 這個時候t1.unique2 = t2.unique2條件子句還沒有產生什么作用,因此它不會影響外層掃描的行計數。然而對于內層掃描而言,當前外層掃描的數據行將被插入到內層索引掃描中,并生成類似的條件t2.unique2 = constant。所以,內層掃描將得到和EXPLAIN SELECT * FROM tenk2 WHERE unique2 = 42一樣的計劃和開銷。最后,以外層掃描的開銷為基礎設置循環節點的開銷,再加上每個外層行的一個迭代(這里是 106 * 3.01),以及連接處理需要的一點點CPU時間。   
    如果不想使用嵌套循環的方式來規劃上面的查詢,那么我們可以通過執行以下系統設置,以關閉嵌套循環,如:
 
復制代碼 代碼如下:

    SET enable_nestloop = off;
    EXPLAIN SELECT * FROM tenk1 t1, tenk2 t2 WHERE t1.unique1 100 AND t1.unique2 = t2.unique2;
     
                                            QUERY PLAN
    ------------------------------------------------------------------------------------------
     Hash Join  (cost=232.61..741.67 rows=106 width=488)
       Hash Cond: ("outer".unique2 = "inner".unique2)
       ->  Seq Scan on tenk2 t2  (cost=0.00..458.00 rows=10000 width=244)
       ->  Hash  (cost=232.35..232.35 rows=106 width=244)
             ->  Bitmap Heap Scan on tenk1 t1  (cost=2.37..232.35 rows=106 width=244)
                   Recheck Cond: (unique1 100)
                   ->  Bitmap Index Scan on tenk1_unique1  (cost=0.00..2.37 rows=106 width=0)
                         Index Cond: (unique1 100)
   

    這個規劃仍然試圖用同樣的索引掃描從tenk1里面取出符合要求的100行,并把它們存儲在內存中的散列(哈希)表里,然后對tenk2做一次全表順序掃描,并為每一條tenk2中的記錄查詢散列(哈希)表,尋找可能匹配t1.unique2 = t2.unique2的行。讀取tenk1和建立散列表是此散列聯接的全部啟動開銷,因為我們在開始讀取tenk2之前不可能獲得任何輸出行。

    此外,我們還可以用EXPLAIN ANALYZE命令檢查規劃器預估值的準確性。這個命令將先執行該查詢,然后顯示每個規劃節點內實際運行時間,以及單純EXPLAIN命令顯示的預計開銷,如:
 

復制代碼 代碼如下:

    EXPLAIN ANALYZE SELECT * FROM tenk1 t1, tenk2 t2 WHERE t1.unique1 100 AND t1.unique2 = t2.unique2;     
                                                                QUERY PLAN
    ----------------------------------------------------------------------------------------------------------------------------------
     Nested Loop  (cost=2.37..553.11 rows=106 width=488) (actual time=1.392..12.700 rows=100 loops=1)
       ->  Bitmap Heap Scan on tenk1 t1  (cost=2.37..232.35 rows=106 width=244) (actual time=0.878..2.367 rows=100 loops=1)
             Recheck Cond: (unique1 100)
             ->  Bitmap Index Scan on tenk1_unique1  (cost=0.00..2.37 rows=106 width=0) (actual time=0.546..0.546 rows=100 loops=1)
                   Index Cond: (unique1 100)
       ->  Index Scan using tenk2_unique2 on tenk2 t2  (cost=0.00..3.01 rows=1 width=244) (actual time=0.067..0.078 rows=1 loops=100)
             Index Cond: ("outer".unique2 = t2.unique2)
     Total runtime: 14.452 ms
   

    注意"actual time"數值是以真實時間的毫秒來計算的,而"cost"預估值是以磁盤頁面讀取數量來計算的,所以它們很可能是不一致的。然而我們需要關注的只是兩組數據的比值是否一致。

    在一些查詢規劃里,一個子規劃節點很可能會運行多次,如之前的嵌套循環規劃,內層的索引掃描會為每個外層行執行一次。在這種情況下,"loops"將報告該節點執行的總次數,而顯示的實際時間和行數目則是每次執行的平均值。這么做的原因是令這些真實數值與開銷預計顯示的數值更具可比性。如果想獲得該節點所花費的時間總數,計算方式是用該值乘以"loops"值。
    EXPLAIN ANALYZE顯示的"Total runtime"包括執行器啟動和關閉的時間,以及結果行處理的時間,但是它并不包括分析、重寫或者規劃的時間。
    如果EXPLAIN命令僅能用于測試環境,而不能用于真實環境,那它就什么用都沒有。比如,在一個數據較少的表上執行EXPLAIN,它不能適用于數量很多的大表,因為規劃器的開銷計算不是線性的,因此它很可能對大些或者小些的表選擇不同的規劃。一個極端的例子是一個只占據一個磁盤頁面的表,在這樣的表上,不管它有沒有索引可以使用,你幾乎都總是得到順序掃描規劃。規劃器知道不管在任何情況下它都要進行一個磁盤頁面的讀取,所以再增加幾個磁盤頁面讀取用以查找索引是毫無意義的。

二、批量數據插入:

    有以下幾種方法用于優化數據的批量插入。

    1. 關閉自動提交:

    在批量插入數據時,如果每條數據都被自動提交,當中途出現系統故障時,不僅不能保障本次批量插入的數據一致性,而且由于有多次提交操作的發生,整個插入效率也會受到很大的打擊。解決方法是,關閉系統的自動提交,并且在插入開始之前,顯示的執行begin transaction命令,在全部插入操作完成之后再執行commit命令提交所有的插入操作。
    
    2. 使用COPY:

    使用COPY在一條命令里裝載所有記錄,而不是一系列的INSERT命令。COPY命令是為裝載數量巨大的數據行優化過的,它不像INSERT命令那樣靈活,但是在裝載大量數據時,系統開銷也要少很多。因為COPY是單條命令,因此在填充表的時就沒有必要關閉自動提交了。 
    
    3. 刪除索引:

    如果你正在裝載一個新創建的表,最快的方法是創建表,用COPY批量裝載,然后創建表需要的任何索引。因為在已存在數據的表上創建索引比維護逐行增加要快。當然在缺少索引期間,其它有關該表的查詢操作的性能將會受到一定的影響,唯一性約束也有可能遭到破壞。
    
    4. 刪除外鍵約束:
    和索引一樣,"批量地"檢查外鍵約束比一行行檢查更加高效。因此,我們可以先刪除外鍵約束,裝載數據,然后在重建約束。
    
    5. 增大maintenance_work_mem:
    在裝載大量數據時,臨時增大maintenance_work_mem系統變量的值可以改進性能。這個系統參數可以提高CREATE INDEX命令和ALTER TABLE ADD FOREIGN KEY命令的執行效率,但是它不會對COPY操作本身產生多大的影響。
    
    6. 增大checkpoint_segments:
    臨時增大checkpoint_segments系統變量的值也可以提高大量數據裝載的效率。這是因為在向PostgreSQL裝載大量數據時,將會導致檢查點操作(由系統變量checkpoint_timeout聲明)比平時更加頻繁的發生。在每次檢查點發生時,所有的臟數據都必須flush到磁盤上。通過提高checkpoint_segments變量的值,可以有效的減少檢查點的數目。
    
    7. 事后運行ANALYZE:
    在增加或者更新了大量數據之后,應該立即運行ANALYZE命令,這樣可以保證規劃器得到基于該表的最新數據統計。換句話說,如果沒有統計數據或者統計數據太過陳舊,那么規劃器很可能會選擇一個較差的查詢規劃,從而導致查詢效率過于低下。

您可能感興趣的文章:
  • PostgreSQL教程(一):數據表詳解
  • PostgreSQL教程(二):模式Schema詳解
  • PostgreSQL教程(三):表的繼承和分區表詳解
  • PostgreSQL教程(四):數據類型詳解
  • PostgreSQL教程(五):函數和操作符詳解(1)
  • PostgreSQL教程(六):函數和操作符詳解(2)
  • PostgreSQL教程(七):函數和操作符詳解(3)
  • PostgreSQL教程(八):索引詳解
  • PostgreSQL教程(九):事物隔離介紹
  • PostgreSQL教程(十一):服務器配置
  • PostgreSQL教程(十二):角色和權限管理介紹
  • PostgreSQL教程(十三):數據庫管理詳解
  • PostgreSQL教程(十四):數據庫維護

標簽:晉城 來賓 衡陽 珠海 烏海 錦州 蚌埠 株洲

巨人網絡通訊聲明:本文標題《PostgreSQL教程(十):性能提升技巧》,本文關鍵詞  PostgreSQL,教程,十,性能,提升,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PostgreSQL教程(十):性能提升技巧》相關的同類信息!
  • 本頁收集關于PostgreSQL教程(十):性能提升技巧的相關信息資訊供網民參考!
  • 推薦文章
    国产拍欧美日韩视频二区| 国产一区高清在线| 在线不卡中文字幕| 久久久999精品视频| 亚洲综合在线网站| 免费一级做a爰片久久毛片潮| 国产精品一区二区无线| 久久国产精品久久久| 最新中文字幕视频| 一区二区三区在线观看网站| 国产成+人+综合+亚洲欧洲| 日本一本二本在线观看| 日本欧美在线看| 精品亚洲va在线va天堂资源站| 国产福利视频在线播放| 亚洲国产精品久久人人爱| 日韩美女一区| 国产毛片毛片毛片毛片| 日韩一级二级三级精品视频| 久青草视频在线播放| 国产高清视频免费| 亚洲日本中文字幕| 古装做爰无遮挡三级聊斋艳谭| 国产成人综合在线观看| 国产精品91视频| 国产又粗又黄又爽视频| 日韩精品一区二区视频| 国产欧美一区二区三区在线观看视频| 亚洲国产电影在线观看| 国产精品国产三级欧美二区| 欧美a∨亚洲欧美亚洲| 精品日韩欧美在线| 欧美大黑帍在线播放| 国产一区二区女| 精品在线视频一区二区三区| 伊人免费在线观看| 日韩av网站导航| 五月婷婷深爱五月| 成人黄色网址在线观看| 国产99久久久欧美黑人| 国产性生活网站| 欧美伊人久久久久久久久影院 | 日韩欧美不卡在线观看视频| 成人av在线不卡| 国产精品久久看| 欧美日韩精品综合| 精品国产999久久久免费| 日韩暖暖在线视频| 可以免费观看的毛片| 日韩中文在线视频| 老熟妇一区二区| 亚洲成人精品av| 午夜影院免费版| 成人欧美一区二区三区| 欧美日韩一区二区三区在线视频| 九九视频精品免费| 亚洲直播在线一区| 少妇一级淫片免费放中国 | 日韩av电影天堂| 国产一区精品在线| 欧美自拍第一页| 日韩中文字幕不卡视频| 国产99久久久| 在线观看国产精品91| 99精品欧美一区二区| 欧美三级视频在线观看| 激情在线观看视频| 亚洲图片欧美一区| 亚洲激情图片| 日韩精品免费视频人成| 国产综合色香蕉精品| 国产绿帽一区二区三区| 国产精品自产拍在线观看| 综合激情网五月| 26uuu另类亚洲欧美日本老年| sm捆绑调教视频| 欧美午夜电影网| 国产综合精品在线| 国产亚洲精品一区二区| 久久这里有精品15一区二区三区| 欧美日韩电影一区二区| 精品av综合导航| 日韩欧美三级在线观看| 亚洲AV无码成人片在线观看| 日韩精品在线播放| 久久一区中文字幕| 艳妇乳肉亭妇荡乳av| 日韩一级片在线播放| av漫画在线观看| 亚洲欧美另类综合偷拍| 亚洲图片欧洲图片日韩av| 国产麻豆一精品一av一免费| 国产精品一色哟哟| 久久综合色婷婷| 亚洲一区三区| 亚洲mv大片欧洲mv大片精品| 特级西西444www| 欧美性做爰毛片| 日本在线视频播放| 91丝袜国产在线播放| 精品国产一区二区三区久久久久久 | av2014天堂网| 在线观看日韩视频| 久热re这里精品视频在线6| 国产小视频免费| 国产精品久久久久久久久晋中 | 一区二区三区欧美日韩| 菠萝菠萝蜜网站| 欧美va天堂va视频va在线| 成人黄色激情视频| 国产精品igao视频| 91看片淫黄大片一级在线观看| 亚洲不卡视频在线| 精品国产乱码久久久久久免费| 日本成人一级片| 激情视频一区二区| 中文字幕一区二区三区av| 久久久久久久毛片| 日本欧美一二三区| 国产色爱av资源综合区| 九九热免费精品视频| 日韩精品视频在线免费观看| 亚洲经典一区二区| 天堂av在线中文| 亚洲欧美国产毛片在线| 成人三级视频在线观看| 欧洲成人免费aa| 丝瓜av网站精品一区二区| 国产欧美123| 91麻豆精品久久久久蜜臀 | 日韩和一区二区| 亚洲精品理论电影| 国产精品二区一区二区aⅴ| 97色在线观看| 日韩成人伦理电影在线观看| 熟妇人妻va精品中文字幕 | 91福利视频网| 久久精品国产99久久6| 久久影院理伦片| 日产国产欧美视频一区精品| 久久亚洲精品无码va白人极品| 欧美成人vr18sexvr| 蜜臀av中文字幕| 日韩视频在线免费看| 麻豆国产va免费精品高清在线| 中文字幕国产在线观看| 91美女片黄在线观| 老熟妇高潮一区二区高清视频| 隔壁人妻偷人bd中字| 亚洲天堂视频在线观看| 亚洲国产日韩在线观看| 无码专区aaaaaa免费视频| 激情成人在线视频| 午夜影院黄色片| 99re在线播放| 综合久久久久久| 日日夜夜综合网| 国产日本欧美在线| 婷婷国产v国产偷v亚洲高清| 中文字幕理论片| 国产一级爱c视频| 日韩免费观看高清完整版在线观看| 国产精品羞羞答答在线| www.-级毛片线天内射视视| 欧美日韩一区二区欧美激情| 成年人网站91| 欧美 中文字幕| 丰满饥渴老女人hd| 国产精品高潮呻吟视频| www国产成人免费观看视频 深夜成人网| 一级片一级片一级片| 国产欧美日韩最新| 亚洲成人av中文| 亚洲国产福利视频| 中文字幕无人区二| 97热精品视频官网| 亚洲成人精品一区二区| 色欲久久久天天天综合网| 草草久久久无码国产专区| 国产小视频国产精品| 国产色产综合产在线视频| 亚洲高清视频免费观看| 五月婷婷六月合| 久久久亚洲福利精品午夜| 久久久蜜桃精品| 国产午夜精品理论片| 先锋影音日韩| 亚洲第一区中文字幕| av一区二区三区四区| 欧美成人精品欧美一级私黄| 7777免费精品视频| 日本高清免费不卡视频| 秋霞网一区二区| 亚洲色成人网站www永久四虎| 中国一级黄色录像| 久久66热这里只有精品| 91av国产在线| 亚洲国产日韩欧美在线动漫| 亚洲三级久久久| 中文字幕久久久久| 久久在线视频精品| 深夜做爰性大片蜜桃| 国产成人三级视频| 成人免费视频网址| 欧美精品123区| 久久久久久一级片| 久久精品二区三区| 中文字幕第4页| 自慰无码一区二区三区| 激情伦成人综合小说| 91tv亚洲精品香蕉国产一区7ujn| 欧美一区二区私人影院日本| 久久国产精品第一页| 国产无遮挡又黄又爽| 国产视频久久久久久| 91成人免费视频| 亚洲国产精品女人久久久| 亚洲午夜国产一区99re久久| 精品亚洲aⅴ乱码一区二区三区| 亚洲图片欧美另类| 日韩国产高清一区| 国产精品444| 亚洲最新中文字幕| 欧美视频中文一区二区三区在线观看| 久久蜜臀中文字幕| 轻轻草成人在线| 97人妻精品视频一区| 国产馆在线观看| 91精品国产毛片武则天| 欧美一区二区影院| 日韩一级黄色片| 亚洲激情六月丁香| 奇米色一区二区| 久久一区二区三区视频| 人人人妻人人澡人人爽欧美一区| 欧美精品成人网| 亚洲第一导航| 亚洲已满18点击进入在线看片| 欧美大荫蒂xxx| 欧美午夜一区二区| 日本一区二区三区四区| 免费观看30秒视频久久| 麻豆changesxxx国产| 九九热只有这里有精品| 精品国产乱码一区二区三区四区| 韩日欧美一区二区| 亚洲激情第一页| 在线视频国产一区| 国产91丝袜在线播放九色| 日韩一区二区三区四区在线| 中国男女全黄大片| 国产一区二区片| 久久久久久九九| 成人久久久久久久| 国产99久久久欧美黑人| 日韩在线视频免费观看高清中文| 精品国产成人系列| 91精品国产综合久久久久| 亚洲欧美日韩人成在线播放| 懂色av噜噜一区二区三区av| 四虎成人免费视频| 日韩精品一区二区三区色欲av| 欧美亚洲国产免费| 国产精品久久亚洲7777| 亚洲综合社区网| 成人午夜黄色影院| 欧美激情一区二区三区高清视频| 午夜精品福利一区二区三区蜜桃| 99久久99久久精品免费观看 | 亚洲美女又黄又爽在线观看| 欧美国产欧美综合| 91在线观看高清| 韩国精品一区二区| 久久激情中文| 久久免费黄色| 99久久精品国产一区色| 国产人妖在线播放| 亚洲天堂手机版| 女人18毛片毛片毛片毛片区二| jizz欧美性11| 99精品一级欧美片免费播放| 一区二区三区偷拍| 4388成人网| 欧美综合第一页| 国产精品劲爆视频| 欧美自拍大量在线观看| 国产成人精品综合| 国产美女精品视频| 18成人免费观看网站下载| 成人免费在线看片| 日本精品视频网站| 国产精品美女av| 久久久久久午夜| 日韩av电影手机在线观看| 国产精品久久久久久av福利| 97精品在线视频| 日本欧美黄网站| 国产精品久久久久久久久久免费 | 亚洲熟妇无码一区二区三区| 亚洲欧洲国产日韩精品| 亚洲不卡一卡2卡三卡4卡5卡精品| 欧美日韩在线免费观看视频| 丰满少妇久久久| 亚洲 国产 图片| 欧美a级黄色大片| www.-级毛片线天内射视视| 99在线免费视频观看| 中国黄色片免费看| 日本人dh亚洲人ⅹxx| 最近中文字幕免费视频| 免费观看污网站| 肉色超薄丝袜脚交69xx图片| 天天操天天摸天天干| 精品国精品国产自在久不卡| 国产丝袜视频在线观看| 日韩电影免费在线观看网站| 精品一区精品二区高清| 久久久亚洲高清| 日韩欧美高清在线视频| 久久这里都是精品| 亚洲精品乱码久久久久久日本蜜臀| 欧美午夜精品久久久久久浪潮| 日韩一区二区中文字幕| 亚洲成在人线av| 欧美国产视频一区二区| 91精品在线影院| 国产伦精品一区二区三区视频孕妇 | 国产亚洲欧美一区在线观看| 亚洲精品免费视频| 3d成人h动漫网站入口| 一区二区成人精品| 国产伦精品一区二区三区精品视频| 精品视频一区二区三区四区| 中国丰满熟妇xxxx性| 无码人妻精品一区二区三区99不卡| 9191在线视频| 伊人365影院| 首页欧美精品中文字幕| 国产精品三级av| 日韩欧美综合一区| 最近中文字幕日韩精品 | 国产精品一区二区黑人巨大| 日韩在线视频第一页| 国产精品亚洲成人| 18欧美亚洲精品| 精品成人一区二区三区| 日韩中文字幕在线精品| 亚洲精品一区二区在线| 日韩av手机在线| 最新av在线免费观看| 亚洲精品免费一区亚洲精品免费精品一区 | 亚洲精品久久久久avwww潮水| 97久久精品人人做人人爽| 亚洲一区二区综合| 中文一区二区视频| 日韩一区二区在线视频| 成人自拍爱视频| 美女在线视频一区二区| 精品一区二区三区四| 蜜乳av一区二区三区| 午夜精品影院在线观看| 亚洲男人天堂视频| 国产精品裸体一区二区三区| 五月婷婷深爱五月| 国产成人无码精品亚洲| 久久91精品久久久久久秒播 | 欧美高清视频不卡网| 欧美整片在线观看| 这里只有精品66| 精品无码人妻一区二区免费蜜桃| 亚洲永久精品一区| 视频在线在亚洲| 日本一区二区三区dvd视频在线 | 欧美性猛交bbbbb精品| 不卡的av电影在线观看| 欧美va在线播放| 999热视频在线观看| 人人爽人人av| 久久精品偷拍视频| 91视频观看视频| 精品999久久久| y111111国产精品久久婷婷| 亚洲免费黄色网| 1级黄色大片儿| 狠狠色丁香九九婷婷综合五月| 在线观看视频91| 97涩涩爰在线观看亚洲| 国产精品专区在线| 妺妺窝人体色www在线下载| 国产69精品久久99不卡| 精品av久久707| 亚洲影院在线看| 在线观看日本一区二区| 91国内精品视频| 亚洲精品免费看| 欧美老少配视频| 91免费国产网站| 色网站在线视频| 午夜激情在线视频| ww亚洲ww在线观看国产| 亚洲无亚洲人成网站77777| 麻豆成人在线播放| 亚洲色图 激情小说| 青草国产精品久久久久久| 欧美日韩成人综合天天影院| 国内精品久久久久久久| 欧美亚洲视频一区| 欧美另类z0zx974| 国产精品资源网站| 亚洲精品少妇网址|