成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > PostgreSQL 對(duì)IN,EXISTS,ANY/ALL,JOIN的sql優(yōu)化方案

PostgreSQL 對(duì)IN,EXISTS,ANY/ALL,JOIN的sql優(yōu)化方案

熱門(mén)標(biāo)簽:江蘇400電話辦理官方 天津開(kāi)發(fā)區(qū)地圖標(biāo)注app 移動(dòng)外呼系統(tǒng)模擬題 電銷(xiāo)機(jī)器人能補(bǔ)救房產(chǎn)中介嗎 地圖標(biāo)注要花多少錢(qián) 廣州電銷(xiāo)機(jī)器人公司招聘 電話機(jī)器人怎么換人工座席 400電話申請(qǐng)客服 濟(jì)南外呼網(wǎng)絡(luò)電話線路

測(cè)試環(huán)境:

postgres=# select version();       
                         version                        
---------------------------------------------------------------------------------------------------------
 PostgreSQL 11.9 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
(1 row) 
postgres=#

數(shù)據(jù)準(zhǔn)備:

$ pgbench -i -s 10
postgres=# \d
       List of relations
 Schema |    Name    | Type | Owner 
--------+------------------+-------+----------
 public | pgbench_accounts | table | postgres
 public | pgbench_branches | table | postgres
 public | pgbench_history | table | postgres
 public | pgbench_tellers | table | postgres
(4 rows)
 
postgres=# select * from pgbench_accounts limit 1;
 aid | bid | abalance |                    filler                    
-----+-----+----------+--------------------------------------------------------------------------------------
  1 |  1 |    0 |                                          
(1 row)
 
postgres=# select * from pgbench_branches limit 1;
 bid | bbalance | filler
-----+----------+--------
  1 |    0 |
(1 row)
 
postgres=# select * from pgbench_history limit 1;
 tid | bid | aid | delta | mtime | filler
-----+-----+-----+-------+-------+--------
(0 rows)
 
postgres=# select * from pgbench_tellers limit 1;
 tid | bid | tbalance | filler
-----+-----+----------+--------
  1 |  1 |    0 |
(1 row)
 
postgres=# select * from pgbench_branches;
 bid | bbalance | filler
-----+----------+--------
  1 |    0 |
  2 |    0 |
  3 |    0 |
  4 |    0 |
  5 |    0 |
  6 |    0 |
  7 |    0 |
  8 |    0 |
  9 |    0 |
 10 |    0 |
(10 rows)
 
postgres=# update pgbench_branches set bbalance=4500000 where bid in (4,7);
UPDATE 2
postgres=#

IN語(yǔ)句

查詢(xún)要求:找出那些余額(balance)大于0的每個(gè)分支(branch)在表在pgbench_accounts中有多少個(gè)賬戶

1.使用IN子句 

SELECT
  count( aid ),bid
FROM
  pgbench_accounts
WHERE
  bid IN ( SELECT bid FROM pgbench_branches WHERE bbalance > 0 )
GROUP BY
  bid;
 

2.使用ANY子句

SELECT
  count( aid ),bid
FROM
  pgbench_accounts
WHERE
  bid = ANY ( SELECT bid FROM pgbench_branches WHERE bbalance > 0 )
GROUP BY
  bid;

  

3.使用EXISTS子句

SELECT
  count( aid ),bid
FROM
  pgbench_accounts
WHERE
  EXISTS ( SELECT bid FROM pgbench_branches WHERE bbalance > 0 AND pgbench_accounts.bid = pgbench_branches.bid )
GROUP BY
  bid;

  

4.使用INNER JOIN

SELECT
  count( aid ),a.bid
FROM
  pgbench_accounts a
  JOIN pgbench_branches b ON a.bid = b.bid
WHERE
  b.bbalance > 0
GROUP BY
  a.bid;

在完成這個(gè)查詢(xún)要求的時(shí)候,有人可能會(huì)假設(shè)exists和inner join性能可能會(huì)更好,因?yàn)樗麄兛梢允褂脙杀磉B接的邏輯和優(yōu)化。而IN和ANY子句需要使用子查詢(xún)。

然而,PostgreSQL(10版本之后)已經(jīng)智能的足以對(duì)上面四種寫(xiě)法產(chǎn)生相同的執(zhí)行計(jì)劃!

所有上面的寫(xiě)法都會(huì)產(chǎn)生相同的執(zhí)行計(jì)劃:

                                      QUERY PLAN                                      
------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Finalize GroupAggregate (cost=23327.73..23330.26 rows=10 width=12) (actual time=97.199..99.014 rows=2 loops=1)
  Group Key: a.bid
  -> Gather Merge (cost=23327.73..23330.06 rows=20 width=12) (actual time=97.191..99.006 rows=6 loops=1)
     Workers Planned: 2
     Workers Launched: 2
     -> Sort (cost=22327.70..22327.73 rows=10 width=12) (actual time=93.762..93.766 rows=2 loops=3)
        Sort Key: a.bid
        Sort Method: quicksort Memory: 25kB
        Worker 0: Sort Method: quicksort Memory: 25kB
        Worker 1: Sort Method: quicksort Memory: 25kB
        -> Partial HashAggregate (cost=22327.44..22327.54 rows=10 width=12) (actual time=93.723..93.727 rows=2 loops=3)
           Group Key: a.bid
           -> Hash Join (cost=1.14..22119.10 rows=41667 width=8) (actual time=24.024..83.263 rows=66667 loops=3)
              Hash Cond: (a.bid = b.bid)
              -> Parallel Seq Scan on pgbench_accounts a (cost=0.00..20560.67 rows=416667 width=8) (actual time=0.023..43.151 rows=333333 loops=3)
              -> Hash (cost=1.12..1.12 rows=1 width=4) (actual time=0.027..0.028 rows=2 loops=3)
                 Buckets: 1024 Batches: 1 Memory Usage: 9kB
                 -> Seq Scan on pgbench_branches b (cost=0.00..1.12 rows=1 width=4) (actual time=0.018..0.020 rows=2 loops=3)
                    Filter: (bbalance > 0)
                    Rows Removed by Filter: 8
 Planning Time: 0.342 ms
 Execution Time: 99.164 ms
(22 rows)

那么,我們是否可以得出這樣的結(jié)論:我們可以隨意地編寫(xiě)查詢(xún),而PostgreSQL的智能將會(huì)處理其余的問(wèn)題?!

等等!

如果我們考慮排除情況,事情會(huì)變得不同。

排除查詢(xún)

查詢(xún)要求:找出那些余額(balance)不大于0的每個(gè)分支(branch)在表在pgbench_accounts中有多少個(gè)賬戶

1.使用NOT IN

SELECT
  count( aid ),bid
FROM
  pgbench_accounts
WHERE
  bid NOT IN ( SELECT bid FROM pgbench_branches WHERE bbalance > 0 )
GROUP BY
  bid;

執(zhí)行計(jì)劃:

                                    QUERY PLAN                                    
----------------------------------------------------------------------------------------------------------------------------------------------------------
 Finalize GroupAggregate (cost=23645.42..23647.95 rows=10 width=12) (actual time=128.606..130.502 rows=8 loops=1)
  Group Key: pgbench_accounts.bid
  -> Gather Merge (cost=23645.42..23647.75 rows=20 width=12) (actual time=128.598..130.490 rows=24 loops=1)
     Workers Planned: 2
     Workers Launched: 2
     -> Sort (cost=22645.39..22645.42 rows=10 width=12) (actual time=124.960..124.963 rows=8 loops=3)
        Sort Key: pgbench_accounts.bid
        Sort Method: quicksort Memory: 25kB
        Worker 0: Sort Method: quicksort Memory: 25kB
        Worker 1: Sort Method: quicksort Memory: 25kB
        -> Partial HashAggregate (cost=22645.13..22645.23 rows=10 width=12) (actual time=124.917..124.920 rows=8 loops=3)
           Group Key: pgbench_accounts.bid
           -> Parallel Seq Scan on pgbench_accounts (cost=1.13..21603.46 rows=208333 width=8) (actual time=0.078..83.134 rows=266667 loops=3)
              Filter: (NOT (hashed SubPlan 1))
              Rows Removed by Filter: 66667
              SubPlan 1
               -> Seq Scan on pgbench_branches (cost=0.00..1.12 rows=1 width=4) (actual time=0.020..0.021 rows=2 loops=3)
                  Filter: (bbalance > 0)
                  Rows Removed by Filter: 8
 Planning Time: 0.310 ms
 Execution Time: 130.620 ms
(21 rows)
 
postgres=#

2.使用>ALL

SELECT
  count( aid ),bid
FROM
  pgbench_accounts
WHERE
  bid > ALL ( SELECT bid FROM pgbench_branches WHERE bbalance > 0 )
GROUP BY
  bid;

執(zhí)行計(jì)劃:

                                     QUERY PLAN                                    
------------------------------------------------------------------------------------------------------------------------------------------------------------
 Finalize GroupAggregate (cost=259581.79..259584.32 rows=10 width=12) (actual time=418.220..419.913 rows=8 loops=1)
  Group Key: pgbench_accounts.bid
  -> Gather Merge (cost=259581.79..259584.12 rows=20 width=12) (actual time=418.212..419.902 rows=24 loops=1)
     Workers Planned: 2
     Workers Launched: 2
     -> Sort (cost=258581.76..258581.79 rows=10 width=12) (actual time=413.906..413.909 rows=8 loops=3)
        Sort Key: pgbench_accounts.bid
        Sort Method: quicksort Memory: 25kB
        Worker 0: Sort Method: quicksort Memory: 25kB
        Worker 1: Sort Method: quicksort Memory: 25kB
        -> Partial HashAggregate (cost=258581.50..258581.60 rows=10 width=12) (actual time=413.872..413.875 rows=8 loops=3)
           Group Key: pgbench_accounts.bid
           -> Parallel Seq Scan on pgbench_accounts (cost=0.00..257539.83 rows=208333 width=8) (actual time=0.054..367.244 rows=266667 loops=3)
              Filter: (SubPlan 1)
              Rows Removed by Filter: 66667
              SubPlan 1
               -> Materialize (cost=0.00..1.13 rows=1 width=4) (actual time=0.000..0.001 rows=2 loops=1000000)
                  -> Seq Scan on pgbench_branches (cost=0.00..1.12 rows=1 width=4) (actual time=0.001..0.001 rows=2 loops=337880)
                     Filter: (bbalance > 0)
                     Rows Removed by Filter: 8
 Planning Time: 0.218 ms
 Execution Time: 420.035 ms
(22 rows) 
postgres=#

3.使用NOT EXISTS

SELECT
  count( aid ),bid
FROM
  pgbench_accounts
WHERE
  NOT EXISTS ( SELECT bid FROM pgbench_branches WHERE bbalance > 0 AND pgbench_accounts.bid = pgbench_branches.bid )
GROUP BY
  bid;

執(zhí)行計(jì)劃:

                                      QUERY PLAN                                     
----------------------------------------------------------------------------------------------------------------------------------------------------------------
 Finalize GroupAggregate (cost=28327.72..28330.25 rows=10 width=12) (actual time=152.024..153.931 rows=8 loops=1)
  Group Key: pgbench_accounts.bid
  -> Gather Merge (cost=28327.72..28330.05 rows=20 width=12) (actual time=152.014..153.917 rows=24 loops=1)
     Workers Planned: 2
     Workers Launched: 2
     -> Sort (cost=27327.70..27327.72 rows=10 width=12) (actual time=147.782..147.786 rows=8 loops=3)
        Sort Key: pgbench_accounts.bid
        Sort Method: quicksort Memory: 25kB
        Worker 0: Sort Method: quicksort Memory: 25kB
        Worker 1: Sort Method: quicksort Memory: 25kB
        -> Partial HashAggregate (cost=27327.43..27327.53 rows=10 width=12) (actual time=147.732..147.737 rows=8 loops=3)
           Group Key: pgbench_accounts.bid
           -> Hash Anti Join (cost=1.14..25452.43 rows=375000 width=8) (actual time=0.134..101.884 rows=266667 loops=3)
              Hash Cond: (pgbench_accounts.bid = pgbench_branches.bid)
              -> Parallel Seq Scan on pgbench_accounts (cost=0.00..20560.67 rows=416667 width=8) (actual time=0.032..45.174 rows=333333 loops=3)
              -> Hash (cost=1.12..1.12 rows=1 width=4) (actual time=0.036..0.037 rows=2 loops=3)
                 Buckets: 1024 Batches: 1 Memory Usage: 9kB
                 -> Seq Scan on pgbench_branches (cost=0.00..1.12 rows=1 width=4) (actual time=0.025..0.027 rows=2 loops=3)
                    Filter: (bbalance > 0)
                    Rows Removed by Filter: 8
 Planning Time: 0.322 ms
 Execution Time: 154.040 ms
(22 rows) 
postgres=#

4.使用LEFT JOIN和IS NULL

SELECT
  count( aid ),a.bid
FROM
  pgbench_accounts a
  LEFT JOIN pgbench_branches b ON a.bid = b.bid AND b.bbalance > 0
WHERE
  b.bid IS NULL
GROUP BY
  a.bid;

執(zhí)行計(jì)劃:

                                      QUERY PLAN                                      
------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Finalize GroupAggregate (cost=28327.72..28330.25 rows=10 width=12) (actual time=145.298..147.096 rows=8 loops=1)
  Group Key: a.bid
  -> Gather Merge (cost=28327.72..28330.05 rows=20 width=12) (actual time=145.288..147.083 rows=24 loops=1)
     Workers Planned: 2
     Workers Launched: 2
     -> Sort (cost=27327.70..27327.72 rows=10 width=12) (actual time=141.883..141.887 rows=8 loops=3)
        Sort Key: a.bid
        Sort Method: quicksort Memory: 25kB
        Worker 0: Sort Method: quicksort Memory: 25kB
        Worker 1: Sort Method: quicksort Memory: 25kB
        -> Partial HashAggregate (cost=27327.43..27327.53 rows=10 width=12) (actual time=141.842..141.847 rows=8 loops=3)
           Group Key: a.bid
           -> Hash Anti Join (cost=1.14..25452.43 rows=375000 width=8) (actual time=0.087..99.535 rows=266667 loops=3)
              Hash Cond: (a.bid = b.bid)
              -> Parallel Seq Scan on pgbench_accounts a (cost=0.00..20560.67 rows=416667 width=8) (actual time=0.025..44.337 rows=333333 loops=3)
              -> Hash (cost=1.12..1.12 rows=1 width=4) (actual time=0.026..0.027 rows=2 loops=3)
                 Buckets: 1024 Batches: 1 Memory Usage: 9kB
                 -> Seq Scan on pgbench_branches b (cost=0.00..1.12 rows=1 width=4) (actual time=0.019..0.020 rows=2 loops=3)
                    Filter: (bbalance > 0)
                    Rows Removed by Filter: 8
 Planning Time: 0.231 ms
 Execution Time: 147.180 ms
(22 rows) 
postgres=#

NOT IN 和 > ALL生成執(zhí)行計(jì)劃都包含了一個(gè)子查詢(xún)。他們是各自獨(dú)立的。

而NOT EXISTS和LEFT JOIN生成了相同的執(zhí)行計(jì)劃。

這些hash連接(或hash anti join)是完成查詢(xún)要求的最靈活的方式。這也是推薦exists或join的原因。因此,推薦使用exists或join的經(jīng)驗(yàn)法則是有效的。

但是,我們繼續(xù)往下看! 即使有了子查詢(xún)執(zhí)行計(jì)劃,NOT IN子句的執(zhí)行時(shí)間也會(huì)更好?

是的。PostgreSQL做了出色的優(yōu)化,PostgreSQL將子查詢(xún)計(jì)劃進(jìn)行了hash處理。因此PostgreSQL對(duì)如何處理IN子句有了更好的理解,這是一種邏輯思維方式,因?yàn)楹芏嗳藘A向于使用IN子句。子查詢(xún)返回的行很少,但即使子查詢(xún)返回幾百行,也會(huì)發(fā)生同樣的情況。

但是,如果子查詢(xún)返回大量行(幾十萬(wàn)行)怎么辦?讓我們嘗試一個(gè)簡(jiǎn)單的測(cè)試:

CREATE TABLE t1 AS
SELECT * FROM generate_series(0, 500000) id;
 
CREATE TABLE t2 AS
SELECT (random() * 4000000)::integer id
FROM generate_series(0, 4000000);
 
ANALYZE t1;
ANALYZE t2;
 
EXPLAIN SELECT id
FROM t1
WHERE id NOT IN (SELECT id FROM t2);

執(zhí)行計(jì)劃:

    QUERY PLAN                 
--------------------------------------------------------------------------------
 Gather (cost=1000.00..15195064853.01 rows=250000 width=4)
  Workers Planned: 1
  -> Parallel Seq Scan on t1 (cost=0.00..15195038853.01 rows=147059 width=4)
     Filter: (NOT (SubPlan 1))
     SubPlan 1
      -> Materialize (cost=0.00..93326.01 rows=4000001 width=4)
         -> Seq Scan on t2 (cost=0.00..57700.01 rows=4000001 width=4)
(7 rows)
 
postgres=#

這里,執(zhí)行計(jì)劃將子查詢(xún)進(jìn)行了物化。代價(jià)評(píng)估變成了15195038853.01。(PostgreSQL的默認(rèn)設(shè)置,如果t2表的行低于100k,會(huì)將子查詢(xún)進(jìn)行hash)。這樣就會(huì)嚴(yán)重影響性能。因此,對(duì)于那種子查詢(xún)返回的行數(shù)很少的場(chǎng)景,IN子句可以起到很好的作用。

其它注意點(diǎn)

有的!在我們用不同的方式寫(xiě)查詢(xún)的時(shí)候,可能有數(shù)據(jù)類(lèi)型的轉(zhuǎn)換。

比如,語(yǔ)句:

EXPLAIN ANALYZE SELECT * FROM emp WHERE gen = ANY(ARRAY['M', 'F']);

就會(huì)發(fā)生隱式的類(lèi)型轉(zhuǎn)換:

Seq Scan on emp (cost=0.00..1.04 rows=2 width=43) (actual time=0.023..0.026 rows=3 loops=1)
 Filter: ((gen)::text = ANY ('{M,F}'::text[]))

這里的(gen)::text就發(fā)生了類(lèi)型轉(zhuǎn)換。如果在大表上,這種類(lèi)型轉(zhuǎn)換的代價(jià)會(huì)很高,因此,PostgreSQL對(duì)IN子句做了更好的處理。

EXPLAIN ANALYZE SELECT * FROM emp WHERE gen IN ('M','F');
 
 Seq Scan on emp (cost=0.00..1.04 rows=3 width=43) (actual time=0.030..0.034 rows=3 loops=1)
  Filter: (gen = ANY ('{M,F}'::bpchar[]))

將IN子句轉(zhuǎn)換成了ANY子句,沒(méi)有對(duì)gen列進(jìn)行類(lèi)型轉(zhuǎn)換。而是將M\F轉(zhuǎn)成了bpchar(內(nèi)部等價(jià)于char)

總結(jié)

簡(jiǎn)單來(lái)說(shuō),exists和直接join表通常比較好。

很多情況下,PostgreSQL將IN子句換成被hash的子計(jì)劃。在一些特殊場(chǎng)景下,IN可以獲得更好的執(zhí)行計(jì)劃。

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

您可能感興趣的文章:
  • PostgreSQL利用遞歸優(yōu)化求稀疏列唯一值的方法
  • PostgreSQL刪除更新優(yōu)化操作
  • Postgresql排序與limit組合場(chǎng)景性能極限優(yōu)化詳解
  • postgresql通過(guò)索引優(yōu)化查詢(xún)速度操作
  • postgresql關(guān)于like%xxx%的優(yōu)化操作

標(biāo)簽:杭州 海西 濮陽(yáng) 榆林 辛集 溫州 寶雞 昭通

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PostgreSQL 對(duì)IN,EXISTS,ANY/ALL,JOIN的sql優(yōu)化方案》,本文關(guān)鍵詞  PostgreSQL,對(duì),EXISTS,ANY,ALL,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PostgreSQL 對(duì)IN,EXISTS,ANY/ALL,JOIN的sql優(yōu)化方案》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于PostgreSQL 對(duì)IN,EXISTS,ANY/ALL,JOIN的sql優(yōu)化方案的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产成人激情小视频| 亚洲电影成人成人影院| 蜜臀av一区二区三区有限公司| 亚洲精品国产无天堂网2021| 五月天福利视频| 亚洲成人在线观看视频| 亚洲国产aⅴ天堂久久| 国产精品网站在线观看| 国产精品欧美性爱| 97久久超碰| 四虎影视免费永久在线| 麻豆传媒视频在线观看| 一级片免费网址| 大桥未久女教师av一区二区| 2023国产一二三区日本精品2022| 日本а中文在线天堂| 欧美日韩性视频一区二区三区| www黄com| 中文字幕在线观看视频免费| 国产欧美一区二区三区在线老狼| 草草视频在线免费观看| 精品一区二区三区视频| 日韩欧美亚洲国产一区| 九九精品在线观看| 在线天堂中文www视软件| 免费高清成人在线| 日韩国产成人无码av毛片| 黄色成人在线免费| 国产无遮挡又黄又爽又色| 国产嫩bbwbbw高潮| 国产情侣免费视频| a在线欧美一区| 国产一级做a爰片久久毛片男| 亚洲资源在线| 欧美1o一11sex性hdhd| 香蕉视频官网在线观看日本一区二区| 亚洲AV无码精品自拍| 摸bbb搡bbb搡bbbb| 一本岛在线视频| 红杏一区二区三区| 国产精品一区二区三区毛片淫片| 亚洲综合一区在线| 日韩av在线天堂网| 国产精品久久久久久久久久久久久久久| www.浪潮av.com| 亚洲人成电影在线观看天堂色| 精品久久免费看| 在线日本制服中文欧美| 免费短视频成人日韩| 精品国产亚洲一区二区三区在线观看| 国产精品日韩精品欧美精品| 日本伊人精品一区二区三区介绍| 亚洲国产婷婷香蕉久久久久久99| av手机在线看| 午夜私人影院久久久久| 成人亚洲一区二区一| 欧美又黄又嫩大片a级| 丝袜美腿一区二区三区动态图| 成人高清视频免费观看| 国产精品中文字幕制服诱惑| 91蜜桃在线视频| 亚洲精品久久久久久久久久久久久| 亚洲精美色品网站| 极品av少妇一区二区| 亚洲自拍小视频免费观看| 如如影视在线观看经典| 日韩免费观看在线观看| 中日韩午夜理伦电影免费| 国产精品久久久久久久7电影| 欧美电影在线免费观看| 国产亚洲美州欧州综合国| 中文字幕在线影院| 裸体av在线| 91高清视频免费观看| 久久精品一区二区三区不卡牛牛| 久久这里精品| 一呦二呦三呦国产精品| 日本亚洲欧洲无免费码在线| 欧美1区3d| 免费观看91视频大全| 国产精品对白一区二区三区| 欧美激情精品久久久久久小说| 91香蕉在线视频| 亚洲高清无码久久| 欧美午夜精品久久久久免费视| 成人在线视频区| 2014亚洲片线观看视频免费| 91国产精品视频在线观看| 日韩欧美福利视频| 免费91麻豆精品国产自产在线观看| 欧美激情中文字幕一区二区| 久久久免费高清电视剧观看| 国精品日韩欧美一区二区三区| 91高清免费看| 伊人久久久久久久久久久久| www成人啪啪18软件| 成人在线影视| 欧美人一级淫片a免费播放| 国产一区二区三区播放| 暖暖在线中文免费日本| 亚洲18私人小影院| 91青青草视频| 手机在线观看你懂的| 国产精品国产三级国产aⅴ中文| 欧美日韩视频第一区| 97精品视频在线观看自产线路二| 成人毛片18女人毛片| 亚洲视频第二页| 日本在线观看天堂男亚洲| 欧美视频在线一区| 影音先锋中文字幕在线视频| 国产午夜精品一区二区三区欧美| 日本午夜精品理论片a级app发布| 国产在线免费视频| 免费观看一区二区三区毛片| 亚洲视频一区| 欧美一区二区三区四| 亚洲人的天堂男人爽爽爽| 成人黄色免费网址| 中文字幕一区不卡| 要久久爱电视剧全集完整观看| 国产精品久久久久久久久久久久| 黄色片视频免费观看| 99精品久久只有精品| 茄子视频成人免费观看| 日韩欧美亚洲日产国产| 国产综合一区二区| 亚洲av无码片一区二区三区| 精品对白一区国产伦| 久久无码人妻精品一区二区三区| 久久男人av资源站| 亚洲字幕久久| 国产乱子伦三级在线播放| www黄com| xxxwww国产| 国产偷亚洲偷欧美偷精品| 国产情侣在线播放| 黄色av免费在线播放| 老司机午夜免费精品视频| 人人妻人人玩人人澡人人爽| 亚洲色图一二三区| 一区在线视频| 国产伦精品一区二区三区视频青涩| 欧美大片免费看| 中文字幕av在线| 欧美jizzhd精品欧美巨大免费| 国产suv精品一区二区| 天堂在线资源网| 婷婷六月激情| 欧美精品一区二区三区在线四季| 免费电影网站在线视频观看福利| 久久手机视频| 亚洲成人一区在线| 99热这里只有精品66| 免费毛片在线播放| 亚洲精品一区二区三区蜜桃久| 日本不卡高清| 欧美日韩精品欧美日韩精品一综合| 特级西西444www大精品视频| 黄色免费成人| 亚洲香蕉成人av网站在线观看| 日韩在线你懂得| 精品一区二区三区的国产在线播放| 国产一区二区三区四区五区加勒比| 久久精品91| 欧美人与禽猛交乱配| 一区免费视频| 加勒比av中文字幕| 一级成人黄色片| 战狼4完整免费观看在线播放版| 欧美娇小性xxxx| 精品久久久网| 精品成人国产在线观看男人呻吟| 国产一级在线免费观看| 中文区中文字幕免费看| 国产日韩高清一区二区三区在线| 手机看片国产1024| 热国产热中文视频二区| 久久久精品三级| 成人影院午夜久久影院| 国产精品人成在线观看免费| 亚洲最大色综合成人av| 91看片淫黄大片91| 7777女厕盗摄久久久| 一个人免费观看日本www视频| 亚洲网站视频在线观看| 亚洲精品网站在线播放gif| 男人的天堂网av| 亲子伦视频一区二区三区| 丁香花高清电影在线观看完整版| 青青草99啪国产免费| 欧美富婆性猛交| 最新电影电视剧在线观看免费观看| 国产精品久久久久久免费| 成人欧美在线视频| 三级一区在线视频先锋| 欧美激情 国产精品| 香蕉成人app免费看片| 超碰最新在线| 最新av电影网站| 九色国产蝌蚪视频| 成人动漫视频在线| 国产精选在线| а√天堂资源地址在线下载| 国产日韩精品综合网站| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 国产成人免费在线观看视频| 嫩草视频在线免费观看| 全部毛片永久免费看| 91麻豆精品在线| 黄色xxxx| 欧美xxxx免费虐| 欧美88888| 狠狠狠色丁香婷婷综合久久五月| 极品av在线| 欧美妇乱xxxxx视频| 中文天堂在线观看| 福利一区三区| 国产成人免费高清| 国产精品久久综合| 黄色性生活一级片| 黄色片免费在线观看视频| 日韩成人在线看| 亚洲第一天堂影院| 国产色在线播放| 婷婷综合在线视频| 国产99久久精品一区二区永久免费| 欧美国产日韩一区二区三区| 国产超级va在线视频| 九色精品视频在线观看| 电影久久久久久| 亚洲va在线va天堂va偷拍| 成人免费电影网址| 久久艹在线视频| 精品久久久久中文字幕小说| jizzjizzjizz中国| 欧美剧在线免费观看网站| 天海翼视频在线观看| av漫画网站在线观看| 一级做a爱片久久毛片| 黄页视频在线播放| 成人影视免费观看| 日本欧美肥老太交大片| 9l亚洲国产成人精品一区二三| 国产精品迅雷| 懂色一区二区三区| 欧美 日韩 国产 成人 在线 91| 欧美性视频网站| 国产米奇在线777精品观看| 三级小视频在线观看| 日本成人黄色网址| 亚洲欧洲综合另类在线| 日韩av网站在线| 国新精品乱码一区二区三区18| 天天操夜夜操夜夜操| 亚洲精品自产拍在线观看app| 国产午夜福利片| 男女激情片在线观看| 一区二区在线观看免费视频| 国产黄色片免费观看| 亚洲妇熟xxxx妇色黄| 久久九九免费| 白虎精品一区| 亚洲欧洲一区二区三区在线观看| 啊啊啊啊啊啊啊视频在线播放| 久久精品国内一区二区三区水蜜桃| 国产免费一区二区三区最新6| 久久手机在线视频| 日本午夜精品视频在线观看| 国产jizzjizz一区二区| 亚洲欧美日韩一区二区| 久久超碰97人人做人人爱| 久久久久久九九九九| 黄色动漫在线| 日韩精品一区二区在线视频| 天堂蜜桃91精品| 日韩精品一区中文字幕| 亚洲激情欧美| 无需播放器亚洲| 韩国av在线免费观看| 国产精成人品2018| 蜜桃av噜噜一区二区三| 免费成人三级| 国产精品久久久久野外| 亚洲精品成av人片天堂无码| 香蕉网站在线观看| 91亚洲精品久久久久久久久久久久| 亚洲在线观看视频| 少妇免费毛片久久久久久久久| 91理论电影在线观看| 日本a一级在线免费播放| 精品一区91| 欧美gay囗交囗交| 午夜精品视频一区二区三区在线看| 人人精品亚洲| 极品一线天粉嫩虎白馒头| 在线国产福利网站| a级黄色一级片| 久久 天天综合| 国产精品久久久久久久免费| 精品人妻一区二区三区潮喷在线| 色综合久久五月天| 精品极品在线| 波多野结衣 作品| 美女又爽又黄免费视频| 国产精品羞羞答答在线| 欧美日韩国产一级二级| 日韩视频在线免费看| 国产福利在线看| av污在线观看| 亚洲精品第三页| 99视频都是精品热在线播放| 激情综合五月婷婷| 国产在成人精品线拍偷自揄拍| 91久久一区二区| 亚洲综合色婷婷在线观看| japan高清日本乱xxxx| 欧美大秀在线观看| 免费日韩视频在线观看| 北条麻妃在线观看| 欧美国产精品一区| 精品国产免费av| 国产精品白嫩初高中害羞小美女| www.久久国产| 麻豆成人综合网| 成人激情视频小说免费下载| 18av在线播放| 在线亚洲不卡|