国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

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

運(yùn)維 數(shù)據(jù)庫(kù)運(yùn)維
數(shù)據(jù)庫(kù)性能優(yōu)化最主要的就是SQL優(yōu)化,SQL優(yōu)化的關(guān)鍵離不開(kāi)三點(diǎn):表的連接方式、訪問(wèn)路徑和執(zhí)行順序,本文重點(diǎn)介紹幾種常見(jiàn)的連接方式。

[[415934]]

本文轉(zhuǎn)載自微信公眾號(hào)「數(shù)倉(cāng)寶貝庫(kù)」,作者葉樺 等。轉(zhuǎn)載本文請(qǐng)聯(lián)系數(shù)倉(cāng)寶貝庫(kù)公眾號(hào)。

數(shù)據(jù)庫(kù)性能優(yōu)化最主要的就是SQL優(yōu)化,SQL優(yōu)化的關(guān)鍵離不開(kāi)三點(diǎn):表的連接方式、訪問(wèn)路徑和執(zhí)行順序,本文重點(diǎn)介紹幾種常見(jiàn)的連接方式。

多表關(guān)聯(lián)查詢,查詢優(yōu)化器的執(zhí)行步驟具體如下。

1)訪問(wèn)路徑:查詢語(yǔ)句中涉及多個(gè)對(duì)象,可以基于成本確定每一個(gè)對(duì)象數(shù)據(jù)的檢索方式,是選擇全表掃描還是索引訪問(wèn)等。

2)連接方式:結(jié)果集之間的關(guān)聯(lián)方式,主要包括嵌套循環(huán)、哈希連接、排序合并連接等。優(yōu)化器對(duì)結(jié)果集之間連接方式的判斷尤為重要,因?yàn)榕袛嘟Y(jié)果將會(huì)直接影響SQL的執(zhí)行效率。

3)關(guān)聯(lián)順序:當(dāng)關(guān)聯(lián)對(duì)象超過(guò)2個(gè)時(shí),首先選取兩個(gè)對(duì)象關(guān)聯(lián)得到的結(jié)果集,再與第三個(gè)結(jié)果集相關(guān)聯(lián)。

下面我們重點(diǎn)介紹幾種常見(jiàn)的連接方式。

01嵌套循環(huán)連接

圖1所示的是嵌套循環(huán)連接示意圖。

圖1 嵌套循環(huán)連接示意圖

嵌套循環(huán)查詢流程具體如下。

1)兩表關(guān)聯(lián),優(yōu)化器首先會(huì)確定驅(qū)動(dòng)表,也稱外部表(outer table),另一張則是被驅(qū)動(dòng)的表,也稱為內(nèi)部表(inner table)。一般情況下,優(yōu)化器會(huì)把數(shù)據(jù)量小的定義為驅(qū)動(dòng)表,執(zhí)行計(jì)劃中,驅(qū)動(dòng)表在上,被驅(qū)動(dòng)表在下。

2)驅(qū)動(dòng)表確認(rèn)之后,會(huì)從其中提取一行有效數(shù)據(jù),在被驅(qū)動(dòng)表(內(nèi)部表)中查找和匹配有效數(shù)據(jù)并提取。

3)將數(shù)據(jù)返回給客戶端。

從以上步驟中我們可以看出,驅(qū)動(dòng)表返回的行數(shù)直接影響了被驅(qū)動(dòng)表的訪問(wèn)次數(shù),比如,驅(qū)動(dòng)表根據(jù)篩選條件最終返回了10行有效數(shù)據(jù),每返回一條就會(huì)傳值給被驅(qū)動(dòng)表進(jìn)行匹配,驅(qū)動(dòng)表一共需要循環(huán)訪問(wèn)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為驅(qū)動(dòng)表,Starts為1,說(shuō)明只訪問(wèn)1次,返回2行有效數(shù)據(jù)(A-Rows為實(shí)際返回的行數(shù)),EMPLOYEES為被驅(qū)動(dòng)表,Starts為2,說(shuō)明訪問(wèn)2次。

學(xué)過(guò)C++編程的同學(xué)應(yīng)該記得,C++中的嵌套循環(huán)與下面的循環(huán)有些類似:

  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的循環(huán)次數(shù)取決于i的取值范圍,我們可以將i看作驅(qū)動(dòng)表,j看作被驅(qū)動(dòng)表。

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

Tips

如果優(yōu)化器選擇了錯(cuò)誤的連接方式,那么我們可以使用提示(hint)強(qiáng)制執(zhí)行使用嵌套循環(huán)的連接方式:“/*+ USE_NL(TABLE1,TABLE2) LEADING(TABLE1) */”,其中TABLE1和TABLE2為關(guān)聯(lián)表的別名,LEADING(TABLE1)用于將TABLE1指定為驅(qū)動(dòng)表。

02哈希連接

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

圖2 哈希連接示意圖

嵌套循環(huán)連接適用于兩表關(guān)聯(lián)后將返回少量數(shù)據(jù)的情況,那么返回大量數(shù)據(jù)時(shí)該采用哪種連接方式呢?答案是采用哈希連接。

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

1)兩表等值關(guān)聯(lián)。

2)優(yōu)化器將數(shù)據(jù)量小的表作為驅(qū)動(dòng)表,在PGA的SQL 工作區(qū)域(work areas)中,將驅(qū)動(dòng)表的連接列構(gòu)建成一張哈希表。

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

4)將數(shù)據(jù)返回給客戶端。

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

  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為驅(qū)動(dòng)表,Starts為1,說(shuō)明訪問(wèn)1次,返回105行有效數(shù)據(jù)(A-Rows為實(shí)際返回的行數(shù)),ORDER_ITEMS為被驅(qū)動(dòng)表,Starts也為1,說(shuō)明僅訪問(wèn)1次。其中,OMem、1Mem為執(zhí)行所需的PGA評(píng)估值,Used-Mem為實(shí)際執(zhí)行時(shí)PGA中SQL工作區(qū)域消耗的內(nèi)存(即發(fā)生磁盤交換的次數(shù)),當(dāng)驅(qū)動(dòng)表較大,PGA的SQL 工作區(qū)域無(wú)法完全容納時(shí),就會(huì)溢出到臨時(shí)表空間產(chǎn)生磁盤交互,進(jìn)而影響性能。

哈希連接性能主要受限于以下兩點(diǎn)。

  • 等值連接。
  • PGA SQL工作區(qū)域較小,且驅(qū)動(dòng)表為大表時(shí),容易出現(xiàn)性能問(wèn)題。

當(dāng)同時(shí)滿足以下條件時(shí),哈希連接方式將會(huì)非常有用。

  • 兩表等值關(guān)聯(lián)后返回大量數(shù)據(jù)。
  • 不同于嵌套循環(huán)連接,哈希連接被驅(qū)動(dòng)表的連接字段時(shí)不需要有索引。

Tips

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

03排序合并連接

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

圖3 排序合并連接示意圖

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

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

  • 兩表非等值關(guān)聯(lián)(>、>=、<、<=、<>)。
  • 數(shù)據(jù)源自身有序。
  • 不必額外執(zhí)行排序操作。

排序合并連接方式中沒(méi)有驅(qū)動(dòng)表的概念,連接查詢流程具體如下。

1)兩表根據(jù)關(guān)聯(lián)列各自排序。

2)在內(nèi)存中進(jìn)行合并處理。

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

  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. ------------------------------------------------------------------------------------------------------------ 

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

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

Tips

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

04笛卡爾連接

當(dāng)一個(gè)或多個(gè)表連接沒(méi)有任何連接條件時(shí),數(shù)據(jù)庫(kù)將使用笛卡兒連接。優(yōu)化器將一個(gè)數(shù)據(jù)源的每一行與另一個(gè)數(shù)據(jù)源的每一行連接在一起,以創(chuàng)建兩組數(shù)據(jù)集的笛卡兒積。示例代碼如下:

  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. ----------------------------------------------------------------------------------------------- 

從以上執(zhí)行計(jì)劃中我們可以看出,先對(duì)表order_items進(jìn)行排序,然后進(jìn)行兩表的笛卡兒乘積操作,由于沒(méi)有過(guò)濾條件,當(dāng)數(shù)據(jù)量很大的時(shí)候,返回的行數(shù)將會(huì)非常多,因此若無(wú)特殊情況,不建議使用沒(méi)有任何連接條件的查詢。

本文摘編于《DBA攻堅(jiān)指南:左手Oracle,右手MySQL》,經(jīng)出版方授權(quán)發(fā)布。

 

責(zé)任編輯:武曉燕 來(lái)源: 數(shù)倉(cāng)寶貝庫(kù)
相關(guān)推薦

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方式提權(quán)

2020-04-27 10:00:53

負(fù)載均衡互聯(lián)網(wǎng)架構(gòu)

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臨時(shí)表數(shù)據(jù)庫(kù)

2020-09-23 07:47:14

Java方式類型

2010-09-17 16:17:13

SQL內(nèi)連接

2022-08-15 19:25:56

Android音頻PCM

2009-04-20 15:54:04

SQL Server重復(fù)行

2010-01-27 13:37:05

Oracle臨時(shí)表

2010-08-31 09:46:23

C#

2024-04-01 11:30:57

C#拷貝

2013-03-27 11:33:32

iOS開(kāi)發(fā)iOSjson解析方式

2012-06-04 09:36:50

2009-01-14 09:28:12

OracleSQL10g

2010-03-03 10:50:22

Python字典應(yīng)用方
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

波多野结衣在线播放一区| 精品久久久久久久久久久下田| 国产欧美综合色| 欧美不卡在线视频| 国产又粗又长又爽视频| 成人免费高清| 久久综合色一综合色88| 欧美精品与人动性物交免费看| 国产成人精品福利| 中文字幕一区二区三区在线播放| 欧美一区视久久| 国产精品免费大片| 亚洲国产人成综合网站| 欧美日韩精品久久| 欧美综合另类| 亚洲欧美自拍偷拍色图| 久久久久久久久亚洲| 在线国产日本| 久久精品视频免费| 日本丰满少妇黄大片在线观看| 天天做天天爱天天综合网| 精品国产精品三级精品av网址| 永久免费网站视频在线观看| 精品69视频一区二区三区Q| 国产成人+综合亚洲+天堂| 一区二区网站| 自拍偷拍亚洲在线| 牛牛精品一区二区| 精品视频一区二区不卡| 美女无遮挡网站| 国产成人啪免费观看软件| 九色91国产| 欧美精品一区二区三区精品| 不卡av在线网站| 日本高清成人vr专区| 在线亚洲欧美专区二区| 欧美精品三级日韩久久| 久草在线资源视频在线观看| 日韩美女啊v在线免费观看| 天堂…中文在线最新版在线| 国产在线不卡一卡二卡三卡四卡| 亚洲午夜精品久久久久久浪潮| 亚洲美洲欧洲综合国产一区| 国产aaa精品| 豆花视频一区二区| 色小说视频一区| 天堂av最新在线| 欧美日韩中国免费专区在线看| 九色91popny| 亚洲乱码日产精品bd| 女人黄色片免费| 一级精品视频在线观看宜春院 | 国产精区一区二区| 欧美极品另类videosde| 美脚丝袜脚交一区二区| 免费精品视频在线| 欧美成人蜜桃| 丝袜美腿亚洲一区二区图片| 日韩电影天堂视频一区二区| 911久久香蕉国产线看观看| 国产免费一区二区三区在线观看| 女人天堂亚洲aⅴ在线观看| 成人国产亚洲精品a区天堂华泰 | 深夜福利一区二区| 国产成人免费9x9x人网站视频| 久久影视电视剧免费网站清宫辞电视 | 韩国一区二区三区美女美女秀 | 久久亚洲综合色| a√免费观看在线网址www| 亚洲欧洲另类国产综合| 1234区在线观看视频免费| 日韩欧美一区二区三区久久| 在线观看av网| 5566中文字幕一区二区电影| 国产www视频在线观看| 亚洲人成亚洲人成在线观看| 在线成人av电影| 轻轻草成人在线| 国产av熟女一区二区三区| 卡一卡二国产精品| www久久99| 噜噜噜在线观看免费视频日韩| 在线观看视频黄色| 99re热这里只有精品视频| 免费在线观看日韩视频| 26uuu欧美| 一起操在线观看| 欧洲精品一区二区| 91黄色在线看| 久久福利影视| 国产成人三级视频| 亚洲欧美激情视频在线观看一区二区三区 | 在线成人午夜影院| 欧美理论影院| 国产精品一区二区久久| 狠狠色丁香九九婷婷综合五月| 国产美女在线一区| 亚洲女女做受ⅹxx高潮| av免费在线观| 午夜精品一区二区三区在线视频 | 午夜a一级毛片亚洲欧洲| 精品日本一区二区三区| 国产一区二区不卡老阿姨| wwwxxx黄色片| 欧美少妇bbb| 给我免费播放日韩视频| 精品国产制服丝袜高跟| 欧美一级免费播放| 成人三级伦理片| 色老板亚洲精品一区| 色综合久久久久综合体 | 国产精品三级av| 你懂的视频在线播放| 久久久久久久国产精品视频| 国产一本一道久久香蕉| 男女人搞j网站| 亚洲女成人图区| 日韩精品一卡| 日本免费a视频| 新版的欧美在线视频| 伊人久久大香线蕉无限次| 亚洲欧美久久234| 欧美日韩国产一中文字不卡| www.日韩| 亚洲 国产 欧美一区| 亚洲黄色性网站| 麻豆网站在线| 欧美在线免费视频| 久久久精品在线视频| 欧美日韩免费看| 亚洲精品**不卡在线播he| 免费看黄在线看| 中文日韩在线视频| 亚洲日本国产| 在线a人片免费观看视频| 7777精品久久久大香线蕉| 欧洲亚洲一区二区三区| 日韩国产美国| 国产精品普通话对白| 色网站在线看| 日本在线高清视频一区| 日韩免费高清视频| 国产精品激情电影| 狠狠色伊人亚洲综合网站色| 亚洲午夜免费电影| 欧美va天堂在线| 免费一级在线观看播放网址| 91精品国产综合久久香蕉的用户体验| 亚洲综合999| 色135综合网| 在线观看麻豆视频| 国产高清精品一区| 日韩女优制服丝袜电影| 成人av在线一区二区三区| 国产精品xx| 国产成人精品三级| 国产精品-区区久久久狼| 在线观看国产91| 国产精品五区| 新版的欧美在线视频| 国产精品久久..4399| 久久影院资源网| 亚洲aaa级| 青青草超碰在线| 国产一区二区三区色淫影院| 欧美精品一区二区三区四区| 国产精品一级黄| 天堂俺去俺来也www久久婷婷| 欧美日韩国产中文字幕在线| 欧美国产综合视频| 亚洲视频一区二区三区| 国产欧美精品国产国产专区| 欧美电影一区| 69精品丰满人妻无码视频a片| 尤物tv国产一区| 亚洲一区在线看| 天堂久久一区二区三区| jizzjizz少妇亚洲水多| 色播五月综合网| 国产精品一区在线播放| 国产91丝袜在线播放九色| 在线观看欧美| 精品国产网站地址| 日本在线不卡视频一二三区| 中文字幕日韩亚洲| 成人a视频在线| 国产一区不卡在线观看| 国产一区二区三区久久精品 | 奇米影视亚洲色图| 国产精品99导航| 日韩午夜电影av| 久久精品视频一区二区| 亚洲欧洲美洲一区二区三区| 超碰aⅴ人人做人人爽欧美| av最新网址| 免费看成人片| 欧美激情视频一区| 精品国产电影一区二区| 中文字幕亚洲在| 另类小说欧美激情|