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

詳解SQL中幾種常用的表連接方式

運維 數據庫運維
數據庫性能優化最主要的就是SQL優化,SQL優化的關鍵離不開三點:表的連接方式、訪問路徑和執行順序,本文重點介紹幾種常見的連接方式。

[[415934]]

本文轉載自微信公眾號「數倉寶貝庫」,作者葉樺 等。轉載本文請聯系數倉寶貝庫公眾號。

數據庫性能優化最主要的就是SQL優化,SQL優化的關鍵離不開三點:表的連接方式、訪問路徑和執行順序,本文重點介紹幾種常見的連接方式。

多表關聯查詢,查詢優化器的執行步驟具體如下。

1)訪問路徑:查詢語句中涉及多個對象,可以基于成本確定每一個對象數據的檢索方式,是選擇全表掃描還是索引訪問等。

2)連接方式:結果集之間的關聯方式,主要包括嵌套循環、哈希連接、排序合并連接等。優化器對結果集之間連接方式的判斷尤為重要,因為判斷結果將會直接影響SQL的執行效率。

3)關聯順序:當關聯對象超過2個時,首先選取兩個對象關聯得到的結果集,再與第三個結果集相關聯。

下面我們重點介紹幾種常見的連接方式。

01嵌套循環連接

圖1所示的是嵌套循環連接示意圖。

圖1 嵌套循環連接示意圖

嵌套循環查詢流程具體如下。

1)兩表關聯,優化器首先會確定驅動表,也稱外部表(outer table),另一張則是被驅動的表,也稱為內部表(inner table)。一般情況下,優化器會把數據量小的定義為驅動表,執行計劃中,驅動表在上,被驅動表在下。

2)驅動表確認之后,會從其中提取一行有效數據,在被驅動表(內部表)中查找和匹配有效數據并提取。

3)將數據返回給客戶端。

從以上步驟中我們可以看出,驅動表返回的行數直接影響了被驅動表的訪問次數,比如,驅動表根據篩選條件最終返回了10行有效數據,每返回一條就會傳值給被驅動表進行匹配,驅動表一共需要循環訪問10次。示例代碼如下:

  1. SQL> SELECT /*+ USE_NL(e d) */ e.first_name, e.last_name, e.salary, d.department_name 
  2.  
  3.   FROM hr.employees e, hr.departments d 
  4.  
  5.  WHERE d.department_name IN ('Marketing''Sales'
  6.  
  7.    AND e.department_id = d.department_id; 
  8.  
  9.  
  10.  
  11. SQL>  select * from table(dbms_xplan.DISPLAY_CURSOR(nullnull'ALLSTATS LAST')); 
  12.  
  13. SQL_ID  3nsqhdh150bx5, child number 0 
  14.  
  15. ------------------------------------- 
  16.  
  17. SELECT /*+ USE_NL(e d) */ e.first_name, e.last_name, e.salary, 
  18.  
  19. d.department_name   FROM hr.employees e, hr.departments d  WHERE 
  20.  
  21. d.department_name IN ('Marketing''Sales')    AND e.department_id = 
  22.  
  23. d.department_id 
  24.  
  25.  
  26.  
  27. Plan hash value: 2968905875 
  28.  
  29. ------------------------------------------------------------------------------------- 
  30.  
  31. | Id  | Operation          |Name       |Starts|E-Rows|A-Rows |   A-Time   | Buffers | 
  32.  
  33. ------------------------------------------------------------------------------------- 
  34.  
  35. |   0 | SELECT STATEMENT   |           |    1 |      |    36 |00:00:00.01 |      23 | 
  36.  
  37. |   1 |  NESTED LOOPS      |           |    1 |  19  |    36 |00:00:00.01 |      23 | 
  38.  
  39. |*  2 |   TABLE ACCESS FULL|DEPARTMENTS|    1 |  2   |     2 |00:00:00.01 |      8 | 
  40.  
  41. |*  3 |   TABLE ACCESS FULL|EMPLOYEES  |    2 |  10  |    36 |00:00:00.01 |     15 | 
  42.  
  43. ------------------------------------------------------------------------------------- 

從上述示例代碼中我們可以看出,DEPARTMENTS為驅動表,Starts為1,說明只訪問1次,返回2行有效數據(A-Rows為實際返回的行數),EMPLOYEES為被驅動表,Starts為2,說明訪問2次。

學過C++編程的同學應該記得,C++中的嵌套循環與下面的循環有些類似:

  1. #include <stdio.h> 
  2.  
  3. int main () 
  4.  
  5.  
  6.    int i, j; 
  7.  
  8.    for(i=1; i<100; i++) { 
  9.  
  10.       for(j=1; j <= 100; j++) 
  11.  
  12.         if(!(i%j)) break; 
  13.  
  14.       if(j > (i/j)) printf("%d \n", i); 
  15.  
  16.    } 
  17.  
  18.    return 0; 
  19.  

j的循環次數取決于i的取值范圍,我們可以將i看作驅動表,j看作被驅動表。

  • 嵌套循環連接性能主要受限于以下幾點。
  • 驅動表的返回行數。
  • 被驅動表的訪問方式:如果被驅動表的連接列基數小且選擇性差,會導致全表掃描的訪問方式,其效率變得非常低,所以我們建議連接列存在索引,且基數大選擇性高。
  • 驅動表篩選后將返回少量數據。
  • 被驅動表關聯字段需要有索引(連接列基數較大或選擇性較高)。
  • 兩表關聯后將返回少量數據。
  • 適合于OLTP系統。

Tips

如果優化器選擇了錯誤的連接方式,那么我們可以使用提示(hint)強制執行使用嵌套循環的連接方式:“/*+ USE_NL(TABLE1,TABLE2) LEADING(TABLE1) */”,其中TABLE1和TABLE2為關聯表的別名,LEADING(TABLE1)用于將TABLE1指定為驅動表。

02哈希連接

圖2所示的是哈希連接示意圖。

圖2 哈希連接示意圖

嵌套循環連接適用于兩表關聯后將返回少量數據的情況,那么返回大量數據時該采用哪種連接方式呢?答案是采用哈希連接。

哈希連接的查詢流程具體如下。

1)兩表等值關聯。

2)優化器將數據量小的表作為驅動表,在PGA的SQL 工作區域(work areas)中,將驅動表的連接列構建成一張哈希表。

3)讀取大表,對連接列進行哈希運算(檢查哈希表,以查找連接的行)。

4)將數據返回給客戶端。

從以上步驟中我們可以看出,通過哈希值進行匹配的方式,更適用于兩表等值關聯。示例代碼如下:

  1. SQL> SELECT /*+ USE_HASH(o l) */o.customer_id, l.unit_price * l.quantity 
  2.  
  3.   2    FROM oe.orders o, oe.order_items l 
  4.  
  5.   3   WHERE l.order_id = o.order_id; 
  6.  
  7.  
  8. SQL> select * from table(dbms_xplan.DISPLAY_CURSOR(nullnull'ALLSTATS LAST')); 
  9.  
  10. SQL_ID  cu980xxpu0mmq, child number 0 
  11.  
  12. ------------------------------------- 
  13.  
  14. SELECT /*+ USE_HASH(o l) */o.customer_id, l.unit_price * l.quantity 
  15.  
  16. FROM oe.orders o, oe.order_items l  WHERE l.order_id = o.order_id 
  17.  
  18.  
  19. Plan hash value: 864676608 
  20.  
  21. ------------------------------------------------------------------------------------------------------------- 
  22.  
  23. | Id  | Operation          |Name       |Starts|E-Rows|A-Rows|A-Time      |Buffers|Reads|OMem |1Mem |Used-Mem| 
  24.  
  25. ------------------------------------------------------------------------------------------------------------- 
  26.  
  27. |   0 | SELECT STATEMENT   |           |   1  |      | 665  |00:00:00.04 |   57  |   5 |     |     |         | 
  28.  
  29. |*  1 |  HASH JOIN         |           |   1  |  665 | 665  |00:00:00.04 |   57  |   5 |1888K|1888K|1531K (0)| 
  30.  
  31. |   2 |   TABLE ACCESS FULL|ORDERS     |   1  |  105 | 105  |00:00:00.04 |   6   |   5 |     |     |         | 
  32.  
  33. |   3 |   TABLE ACCESS FULL|ORDER_ITEMS|   1  |  665 | 665  |00:00:00.01 |   51  |   0 |     |     |         | 
  34.  
  35. ------------------------------------------------------------------------------------------------------------- 

從上述示例代碼中我們可以看出,ORDERS為驅動表,Starts為1,說明訪問1次,返回105行有效數據(A-Rows為實際返回的行數),ORDER_ITEMS為被驅動表,Starts也為1,說明僅訪問1次。其中,OMem、1Mem為執行所需的PGA評估值,Used-Mem為實際執行時PGA中SQL工作區域消耗的內存(即發生磁盤交換的次數),當驅動表較大,PGA的SQL 工作區域無法完全容納時,就會溢出到臨時表空間產生磁盤交互,進而影響性能。

哈希連接性能主要受限于以下兩點。

  • 等值連接。
  • PGA SQL工作區域較小,且驅動表為大表時,容易出現性能問題。

當同時滿足以下條件時,哈希連接方式將會非常有用。

  • 兩表等值關聯后返回大量數據。
  • 不同于嵌套循環連接,哈希連接被驅動表的連接字段時不需要有索引。

Tips

同樣,我們也可以使用提示強制執行使用哈希連接的方式:“/*+ USE_HASH (TABLE1,TABLE2) LEADING(TABLE1) */”。

03排序合并連接

圖3所示的是排序合并連接示意圖。

圖3 排序合并連接示意圖

哈希連接適用于兩表等值關聯后返回大量數據的情況,那么非等值關聯返回大量數據的情況又該采用哪種連接方式呢?答案是排序合并連接。

同時滿足以下條件時,排序合并連接的性能要比哈希連接得好。

  • 兩表非等值關聯(>、>=、<、<=、<>)。
  • 數據源自身有序。
  • 不必額外執行排序操作。

排序合并連接方式中沒有驅動表的概念,連接查詢流程具體如下。

1)兩表根據關聯列各自排序。

2)在內存中進行合并處理。

從以上實現步驟中我們可以看出,由于匹配的對象是連接列各自排序后的值,因此排序合并連接方式更適用于兩表非等值關聯的情形,示例代碼如下:

  1. SQL> SELECT o.customer_id, l.unit_price * l.quantity 
  2.  
  3.   FROM oe.orders o, oe.order_items l 
  4.  
  5.  WHERE l.order_id > o.order_id; 
  6.  
  7. 32233 rows selected.. 
  8.  
  9. SQL> select * from table(dbms_xplan.DISPLAY_CURSOR(nullnull'ALLSTATS LAST')); 
  10.  
  11. SQL_ID  ajyppymnhwfyf, child number 1 
  12.  
  13. ------------------------------------- 
  14.  
  15. SELECT o.customer_id, l.unit_price * l.quantity   FROM oe.orders o, 
  16.  
  17. oe.order_items l  WHERE l.order_id > o.order_id 
  18.  
  19.  
  20.  
  21. Plan hash value: 2696431709 
  22.  
  23. ----------------------------------------------------------------------------------------------------------- 
  24.  
  25. | Id  | Operation         |Name       |Starts| E-Rows | A-Rows | A-Time     |Buffers|OMem |1Mem | Used-Mem | 
  26.  
  27. ----------------------------------------------------------------------------------------------------------- 
  28.  
  29. |   0 | SELECT STATEMENT  |           |    1 |        |  32233 |00:00:00.10 |  21   |     |     |          | 
  30.  
  31. |   1 | MERGE JOIN        |           |    1 | 3 4580 |  32233 |00:00:00.10 |  21   |     |     |          | 
  32.  
  33. |   2 | SORT JOIN         |           |    1 |    105 |    105 |00:00:00.01 |   4   |11264|11264|10240  (0)| 
  34.  
  35. |   3 | TABLE ACCESS FULL |ORDERS     |    1 |    105 |    105 |00:00:00.01 |   4   |     |     |          | 
  36.  
  37. |*  4 | SORT JOIN         |           |  105 |    665 |  32233 |00:00:00.05 |  17   |59392|59392|53248  (0)| 
  38.  
  39. |   5 | TABLE ACCESS FULL |ORDER_ITEMS|    1 |    665 |    665 |00:00:00.01 |  17   |     |     |          | 
  40.  
  41. ------------------------------------------------------------------------------------------------------------ 

從上述示例所示的執行計劃中我們可以看出,ID=3的ORDERS表Starts為1,說明訪問1次,返回105行有效數據(A-Rows為實際返回行數),ORDER_ITEMS表的Starts為1,說明也只訪問1次,但ID=4的SORT JOIN表Starts為105,說明在內存中進行了105次匹配。其中,OMem、1Mem為執行排序操作所需的PGA評估值,Used-Mem為實際執行時PGA中SQL工作區域消耗的內存(即發生磁盤交換的次數)。

從以上步驟中我們可以看出,由于比較對象是兩張表的連接列order_id,所以需要各自的連接列先完成排序(ID=2和ID=4),之后再進行匹配。如果此時連接列上存在索引,那么索引返回的數據就是有序的,此時不需要再進行額外的排序操作。

Tips

同樣,我們也可以使用提示強制執行選擇排序合并連接的方式:“/*+ USE_MERGE(TABLE1,TABLE2) */”。

04笛卡爾連接

當一個或多個表連接沒有任何連接條件時,數據庫將使用笛卡兒連接。優化器將一個數據源的每一行與另一個數據源的每一行連接在一起,以創建兩組數據集的笛卡兒積。示例代碼如下:

  1. SQL> SELECT o.customer_id, l.unit_price * l.quantity 
  2.  
  3.   FROM oe.orders o, oe.order_items l; 
  4.  
  5. 69825 rows selected. 
  6.  
  7.  
  8. SQL> select * from table(dbms_xplan.DISPLAY_CURSOR(nullnull'ALLSTATS LAST')); 
  9.  
  10. SQL_ID  d3xygy88uqzny, child number 0 
  11.  
  12. ------------------------------------- 
  13.  
  14. SELECT o.customer_id, l.unit_price * l.quantity   FROM oe.orders o, 
  15.  
  16. oe.order_items l 
  17.  
  18. Plan hash value: 2616129901 
  19.  
  20. ----------------------------------------------------------------------------------------------- 
  21.  
  22. | Id  | Operation            | Name      |Starts | E-Rows | Buffers |  OMem |  1Mem | Used-Mem | 
  23.  
  24. ----------------------------------------------------------------------------------------------- 
  25.  
  26. |   0 | SELECT STATEMENT     |           |     1 |        |     125 |       |       |          | 
  27.  
  28. |   1 |  MERGE JOIN CARTESIAN|           |     1 |  69825 |     125 |       |       |          | 
  29.  
  30. |   2 |   TABLE ACCESS FULL  |ORDERS     |     1 |    105 |     108 |       |       |          | 
  31.  
  32. |   3 |   BUFFER SORT        |           |   105 |    665 |      17 | 27648 | 27648 |24576  (0)| 
  33.  
  34. |   4 |    TABLE ACCESS FULL |ORDER_ITEMS|     1 |    665 |      17 |       |       |          | 
  35.  
  36. ----------------------------------------------------------------------------------------------- 

從以上執行計劃中我們可以看出,先對表order_items進行排序,然后進行兩表的笛卡兒乘積操作,由于沒有過濾條件,當數據量很大的時候,返回的行數將會非常多,因此若無特殊情況,不建議使用沒有任何連接條件的查詢。

本文摘編于《DBA攻堅指南:左手Oracle,右手MySQL》,經出版方授權發布。

 

責任編輯:武曉燕 來源: 數倉寶貝庫
相關推薦

2010-09-25 14:48:55

SQL連接

2010-09-28 09:08:40

Oracle

2010-11-24 09:56:20

mysql拷貝表

2021-01-06 08:04:30

Linux方式提權

2020-04-27 10:00:53

負載均衡互聯網架構

2017-06-13 10:30:20

oracle連接命名

2009-09-28 10:52:33

Hibernate主鍵主鍵生成

2010-07-16 13:41:08

SQL Serverl

2010-09-08 16:03:57

SQL臨時表數據庫

2020-09-23 07:47:14

Java方式類型

2010-09-17 16:17:13

SQL內連接

2022-08-15 19:25:56

Android音頻PCM

2009-04-20 15:54:04

SQL Server重復行

2010-01-27 13:37:05

Oracle臨時表

2010-08-31 09:46:23

C#

2024-04-01 11:30:57

C#拷貝

2013-03-27 11:33:32

iOS開發iOSjson解析方式

2009-01-14 09:28:12

OracleSQL10g

2012-06-04 09:36:50

2010-03-03 10:50:22

Python字典應用方
點贊
收藏

51CTO技術棧公眾號

亚洲国产精品女人| 日本乱人伦a精品| 久久久久久国产精品日本| 黄页网站大全在线免费观看| 91麻豆免费在线观看| 国产成人久久精品| 欧美做爰啪啪xxxⅹ性| 精品国产午夜肉伦伦影院| 欧美亚洲国产怡红院影院| 久久免费视频2| 偷拍自拍在线视频| 久久爱www久久做| 97人人做人人爱| 一级性生活免费视频| 久久aimee| 欧美精品aⅴ在线视频| 麻豆tv在线播放| 毛片在线播放a| 91在线丨porny丨国产| 国产剧情日韩欧美| 亚洲免费在线视频观看| 91精品国产91久久综合| 日韩电影中文字幕av| 日本中文字幕观看| 久久电影tv| 一区二区免费视频| 最新国产精品久久| 国际av在线| 岛国精品在线播放| 国产在线观看精品一区二区三区| 国产又黄又粗又爽| 欧美日韩国产高清| 久久久久www| 色屁屁草草影院ccyy.com| 国产suv精品一区| 欧美欧美欧美欧美| wwww.国产| 在线免费日韩片| 亚洲va欧美va人人爽午夜| 中文字幕剧情在线观看一区| 美女做暖暖视频免费在线观看全部网址91 | 欧美日韩破处视频| 色综合 综合色| 尤物av无码色av无码| 四虎亚洲成人| 亚洲欧美视频一区| 性做爰过程免费播放| 超碰免费97在线观看| 国产亚洲1区2区3区| 久久婷婷人人澡人人喊人人爽| 亚洲精品久久久久久久久久久久久久| 久久国产精品72免费观看| 国产精品手机播放| 亚洲综合精品国产一区二区三区| 老**午夜毛片一区二区三区| 奇米成人av国产一区二区三区| xxxxxx国产| 国产欧美日韩综合一区在线播放| 97精品国产97久久久久久春色| 久久久久香蕉视频| 99热精品在线观看| 欧美有码在线视频| 无码免费一区二区三区| 日本美女一区二区三区视频| 国产精品18久久久久久麻辣| 中文字幕欧美人妻精品一区蜜臀| 免费观看日韩电影| 国产一区二区在线播放| 国产露脸91国语对白| 狠狠色综合播放一区二区| 亚洲自拍偷拍第一页| 成人黄色在线观看视频| 成人国产一区二区三区精品| 久久99精品久久久久子伦 | 亚洲精品大全| 欧美一区二区免费| 亚州av综合色区无码一区| 欧美三级午夜理伦三级小说| 亚洲天堂av电影| 女教师淫辱の教室蜜臀av软件| 希岛爱理一区二区三区| 色综合91久久精品中文字幕 | 久久婷婷一区| 国产精品视频一| 国产成人三级在线播放| 99精品久久免费看蜜臀剧情介绍| 欧美日韩在线一区二区三区| 麻豆视频在线| 午夜视频一区二区三区| 欧美黑人又粗又大又爽免费| 经典三级久久| 日韩av在线影院| 亚欧精品视频一区二区三区| 欧美福利在线| 国产成人精品一区二区| a网站在线观看| 久久亚洲精华国产精华液 | 无码人妻aⅴ一区二区三区69岛| 成人久久一区| 韩国精品久久久999| 中文字幕永久在线视频| 成人午夜电影小说| 亚洲精品乱码久久久久久蜜桃91| 黄网在线免费看| 欧美一a一片一级一片| 韩国三级hd中文字幕有哪些| 激情综合网站| 欧美精品电影在线| 亚洲天堂中文在线| 成人av第一页| 国产亚洲精品久久久久久久| 欧美精品高清| 亚洲国产精品女人久久久| 登山的目的在线| 国产精品一区亚洲| 国产精品果冻传媒潘| 一级毛片视频在线| 一本色道亚洲精品aⅴ| 无码国产精品一区二区高潮| 国产在视频线精品视频www666| 欧美国产乱视频| 国产伦精品一区二区三区视频痴汉| 久久久久久9999| 免费拍拍拍网站| 玖玖玖电影综合影院| 最好看的2019的中文字幕视频| 六月丁香激情综合| 不卡av电影在线播放| 一二三四中文字幕| 四虎影视国产精品| 中文字幕日韩精品在线| 午夜久久久久久久久久影院| 97se亚洲国产综合在线| 日韩在线观看a| 国产不卡精品| 久久成人18免费网站| 久久国产香蕉视频| 国产日产欧美一区| av网址在线观看免费| 色婷婷av一区二区三区丝袜美腿| 国精产品一区一区三区有限在线| 99精品免费观看| 亚洲欧美另类小说视频| 在线看免费毛片| 青青草国产免费一区二区下载| 日本三级韩国三级久久| 男人天堂亚洲二区| 日本电影亚洲天堂一区| 亚洲国产天堂av| 日本亚洲最大的色成网站www| 蜜桃久久影院| 亚洲人免费短视频| 中文字幕精品一区久久久久| 亚洲一区二区三区网站| 亚洲日本电影在线| 少妇性l交大片7724com| 欧美喷水视频| 国产伦视频一区二区三区| 国产资源在线观看入口av| 国产婷婷97碰碰久久人人蜜臀| 五月婷婷亚洲综合| 国产欧美一区二区精品久导航| 97超碰青青草| 成人激情开心网| 91九色视频导航| 美女精品导航| 亚洲激情久久久| 久久精品无码av| 国产精品污网站| 在线免费黄色小视频| 尹人成人综合网| 免费成人在线观看av| 97精品国产综合久久久动漫日韩| 日韩在线观看免费全| 99er热精品视频| 午夜精品久久久久久久99樱桃| 国产精品九九九九九| 日韩成人av影视| 国产免费xxx| 日韩av中文字幕一区| 国产精品九九久久久久久久| 国产激情在线| 日韩精品视频免费在线观看| 中日韩在线观看视频| 亚洲欧美乱综合| 中文字字幕码一二三区| 寂寞少妇一区二区三区| 97视频在线免费| 精品一区二区三区在线 | 亚洲免费专区| 国产视频999| 在线中文字幕播放| 久久亚洲精品毛片| 青青草手机在线| 51精品久久久久久久蜜臀| 久热这里只有精品6| 中文字幕在线观看一区| 中文字幕免费在线播放| 久久草av在线| 黄色国产精品视频| 亚洲中无吗在线| 日本一区高清不卡| 一区二区三区免费在线看| 国产精品wwwwww| www在线看| 精品国产欧美一区二区三区成人| 污污视频在线免费看| 欧美日韩高清一区二区| 特黄视频免费看| 一区二区三区欧美亚洲| 少妇愉情理伦三级| 99精品久久免费看蜜臀剧情介绍| 亚洲天堂网站在线| 久久久夜夜夜| 欧美精品久久久久久久自慰| 亚洲情侣在线| 先锋影音网一区| 欧美天堂社区| 国产精品一区视频网站| 国产成人久久精品一区二区三区| 国产精品久久久久久久久久尿 | 国产精品第二页| а√天堂资源官网在线资源 | 三妻四妾的电影电视剧在线观看| 久久久成人的性感天堂| av大片在线看| 亚洲欧洲在线视频| 亚洲色图欧美视频| 欧美精品一区二区三区在线| 亚洲av无码乱码国产精品| 欧美久久婷婷综合色| 中文字幕乱码在线观看| 91福利社在线观看| 综合激情网五月| 精品久久久久久久大神国产| 国产一级做a爱免费视频| 亚洲免费资源在线播放| 欧美老熟妇一区二区三区| 国产精品进线69影院| 极品美妇后花庭翘臀娇吟小说| 国产精品私人自拍| 免费成人深夜蜜桃视频| 欧美激情一区二区三区四区| 欧美偷拍一区二区三区| 久久精品夜色噜噜亚洲aⅴ| 久久av无码精品人妻系列试探| 99精品国产99久久久久久白柏| 色天使在线视频| 91视频xxxx| 日韩在线免费观看av| 久久精子c满五个校花| 久久久久久久久久久久| 亚洲国产高清aⅴ视频| 色噜噜噜噜噜噜| 中文字幕一区二区三区不卡 | 亚洲欧美伊人| 国产精品免费看久久久无码| 国产精品红桃| 福利视频一区二区三区四区| 日韩午夜精品| 亚洲国产精品毛片av不卡在线| 日韩国产欧美视频| 亚洲精品20p| 国产不卡一区视频| 国产又黄又粗又猛又爽的视频| 久久综合久久综合九色| 一级黄色录像毛片| 中文字幕一区二区三区视频| 91视频免费在线看| 欧美日韩性视频在线| 99re热视频| 91精品视频网| 日本精品久久久久| 亚洲午夜性刺激影院| 男女啪啪在线观看| 欧美激情一二三| 亚洲精品mv| 成人两性免费视频| 成人性生交大片免费看96| 欧美国产一区二区在线| 久久在线播放| 精品一区二区三区无码视频| 视频一区免费在线观看| 日韩av.com| 91久色porny| 视频国产一区二区| 天天av天天翘天天综合网| 中文字幕av影视| 欧美精品一区视频| 欧美精品日韩少妇| 91成人福利在线| 午夜不卡一区| 免费一区二区三区| 欧美激情一区| 五月婷婷狠狠操| 成人99免费视频| 黄色精品视频在线观看| 欧美视频在线观看免费| 精品人妻无码一区二区三区蜜桃一| 亚洲毛片在线免费观看| 在线免费观看a视频| 国产精品电影久久久久电影网| 亚洲日本va午夜在线电影| 日本一区二区三区免费看| 欧美三级小说| 午夜xxxxx| 国产精品人人做人人爽人人添| 欧美福利视频一区二区| 欧美一卡2卡三卡4卡5免费| 国产日韩精品在线看| 国内精品国产三级国产在线专| 国模私拍国内精品国内av| 国产综合欧美在线看| 国产精品豆花视频| 精品人妻一区二区三| 国产精品网友自拍| 男人天堂av在线播放| 亚洲第一精品夜夜躁人人躁| 老司机午夜在线| 国产噜噜噜噜噜久久久久久久久| 国产精品午夜一区二区三区| 欧美一级欧美一级| 粉嫩在线一区二区三区视频| 97成人资源站| 91.成人天堂一区| 黄在线免费观看| 国产又爽又黄的激情精品视频| 精品国产乱码久久久久久1区2匹 | 麻豆成人免费电影| 一级黄色片大全| 精品久久久久久亚洲国产300| 亚洲精品一区二区三区不卡| 久久激情视频久久| 亚洲伦理一区二区| 在线不卡视频一区二区| 日本不卡一二三区黄网| 亚洲av成人无码久久精品| 色婷婷国产精品久久包臀| 日本人妖在线| 欧美专区在线播放| 亚洲国产合集| 欧美一级片中文字幕| 久久久久久久久久美女| 亚洲天堂男人av| 国产一区二区三区18| 成人性片免费| 伊人狠狠色丁香综合尤物| 久久er精品视频| 一级片一级片一级片| 69堂国产成人免费视频| av免费网站在线| 成人在线资源网址| 亚洲精品欧洲| 国产精品久久久免费观看| 日韩欧美精品免费在线| 二区三区在线播放| 国产精品一区av| 最新国产精品久久久| 日本人妻一区二区三区| 精品美女国产在线| 欧美女v视频| 国产裸体写真av一区二区 | 欧美福利视频在线| 久久久亚洲欧洲日产| 国产福利视频在线播放| 国产欧美精品一区| 国产美女精品视频国产| 欧美精品videosex极品1| 私拍精品福利视频在线一区| 波多野结衣天堂| 亚洲欧美另类小说视频| 婷婷色在线观看| 国产精品第3页| 欧美日韩国产色综合一二三四| 女尊高h男高潮呻吟| 欧美日韩五月天| 欧美xxxx视频| 热舞福利精品大尺度视频| 精品一区二区免费| 国产真实乱偷精品视频| 国产亚洲欧洲高清一区| 国产精品igao视频网网址不卡日韩| 无码日本精品xxxxxxxxx| 久久亚洲精精品中文字幕早川悠里| 中文字幕乱码中文字幕| 国模精品视频一区二区三区| 国内精品久久久久久99蜜桃| 宇都宫紫苑在线播放| 欧美日韩一区二区精品| 好操啊在线观看免费视频| 久久国产精品一区二区三区四区| 精品一区二区三区影院在线午夜| 精品一级少妇久久久久久久| 国产亚洲一区精品| 一区二区三区四区精品视频| 白嫩少妇丰满一区二区| 亚洲资源中文字幕| 欧美激情办公室videoshd| 久久久久一区二区| 国产一区不卡在线|