国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

MySQL 的 join 功能弱爆了?

共 3281字,需瀏覽 7分鐘

 ·

2020-11-20 20:36

今天我們來學習和吐槽一下 MySQL 的 Join 功能。


關(guān)于MySQL 的 join,大家一定了解過很多它的“軼事趣聞”,比如兩表 join 要小表驅(qū)動大表,阿里開發(fā)者規(guī)范禁止三張表以上的 join 操作,MySQL 的 join 功能弱爆了等等。這些規(guī)范或者言論亦真亦假,時對時錯,需要大家自己對 join 有深入的了解后才能清楚地理解。


下面,我們就來全面的了解一下 MySQL 的 join 操作。


正文


在日常數(shù)據(jù)庫查詢時,我們經(jīng)常要對多表進行連表操作來一次性獲得多個表合并后的數(shù)據(jù),這是就要使用到數(shù)據(jù)庫的 join 語法。join 是在數(shù)據(jù)領(lǐng)域中十分常見的將兩個數(shù)據(jù)集進行合并的操作,如果大家了解的多的話,會發(fā)現(xiàn) MySQL,Oracle,PostgreSQL 和 Spark 都支持該操作。本篇文章的主角是 MySQL,下文沒有特別說明的話,就是以 MySQL 的 join 為主語。而 Oracle ,PostgreSQL 和 Spark 則可以算做將其吊打的大boss,其對 join 的算法優(yōu)化和實現(xiàn)方式都要優(yōu)于 MySQL。


MySQL 的 join 有諸多規(guī)則,可能稍有不慎,可能一個不好的 join 語句不僅會導致對某一張表的全表查詢,還有可能會影響數(shù)據(jù)庫的緩存,導致大部分熱點數(shù)據(jù)都被替換出去,拖累整個數(shù)據(jù)庫性能。


所以,業(yè)界針對 MySQL 的 join 總結(jié)了很多規(guī)范或者原則,比如說小表驅(qū)動大表和禁止三張表以上的 join 操作。下面我們會依次介紹 MySQL join 的算法,和 Oracle 和 Spark 的 join 實現(xiàn)對比,并在其中穿插解答為什么會形成上述的規(guī)范或者原則。


對于 join 操作的實現(xiàn),大概有 Nested Loop Join (循環(huán)嵌套連接),Hash Join(散列連接) 和 Sort Merge Join(排序歸并連接) 三種較為常見的算法,它們各有優(yōu)缺點和適用條件,接下來我們會依次來介紹。

MySQL 中的 Nested Loop Join 實現(xiàn)

Nested Loop Join 是掃描驅(qū)動表,每讀出一條記錄,就根據(jù) join 的關(guān)聯(lián)字段上的索引去被驅(qū)動表中查詢對應(yīng)數(shù)據(jù)。它適用于被連接的數(shù)據(jù)子集較小的場景,它也是 MySQL join 的唯一算法實現(xiàn),關(guān)于它的細節(jié)我們接下來會詳細講解。

MySQL 中有兩個 Nested Loop Join 算法的變種,分別是 Index Nested-Loop Join 和 Block Nested-Loop Join。

Index Nested-Loop Join 算法


下面,我們先來初始化一下相關(guān)的表結(jié)構(gòu)和數(shù)據(jù)


CREATE TABLE `t1` (
`id` int(11) NOT NULL,
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `a` (`a`)
) ENGINE=InnoDB;

delimiter ;;
# 定義存儲過程來初始化t1
create procedure init_data()
begin
declare i int;
set i=1;
while(i<=10000)do
? insert into t1 values(i, i, i);
? set i=i+1;
end while;
end;;
delimiter ;
# 調(diào)用存儲過來來初始化t1
call init_data();
# 創(chuàng)建并初始化t2
create table t2 like t1;
insert into t2 (select * from t1 where id<=500)

有上述命令可知,這兩個表都有一個主鍵索引 id 和一個索引 a,字段 b 上無索引。存儲過程 init_data 往表 t1 里插入了 10000 行數(shù)據(jù),在表 t2 里插入的是 500 行數(shù)據(jù)。


為了避免 MySQL 優(yōu)化器會自行選擇表作為驅(qū)動表,影響分析 SQL 語句的執(zhí)行過程,我們直接使用 straight_join 來讓 MySQL 使用固定的連接表順序進行查詢,如下語句中,t1是驅(qū)動表,t2是被驅(qū)動表。

select * from t2 straight_join t1 on (t2.a=t1.a);

使用我們之前文章介紹的 explain 命令查看一下該語句的執(zhí)行計劃。

從上圖可以看到,t1 表上的 a 字段是由索引的,join 過程中使用了該索引,因此該 SQL 語句的執(zhí)行流程如下:

  • 從 t2 表中讀取一行數(shù)據(jù) L1;

  • 使用L1 的 a 字段,去 t1 表中作為條件進行查詢;

  • 取出 t1 中滿足條件的行, 跟 L1組成相應(yīng)的行,成為結(jié)果集的一部分;

  • 重復執(zhí)行,直到掃描完 t2 表。

這個流程我們就稱之為 Index Nested-Loop Join,簡稱 NLJ,它對應(yīng)的流程圖如下所示。



需要注意的是,在第二步中,根據(jù) a 字段去表t1中查詢時,使用了索引,所以每次掃描只會掃描一行(從explain結(jié)果得出,根據(jù)不同的案例場景而變化)。


假設(shè)驅(qū)動表的行數(shù)是N,被驅(qū)動表的行數(shù)是 M。因為在這個 join 語句執(zhí)行過程中,驅(qū)動表是走全表掃描,而被驅(qū)動表則使用了索引,并且驅(qū)動表中的每一行數(shù)據(jù)都要去被驅(qū)動表中進行索引查詢,所以整個 join 過程的近似復雜度是 N2log2M。顯然,N 對掃描行數(shù)的影響更大,因此這種情況下應(yīng)該讓小表來做驅(qū)動表。


當然,這一切的前提是 join 的關(guān)聯(lián)字段是 a,并且 t1 表的 a 字段上有索引。

如果沒有索引時,再用上圖的執(zhí)行流程時,每次到 t1 去匹配的時候,就要做一次全表掃描。這也導致整個過程的時間復雜度編程了 N * M,這是不可接受的。所以,當沒有索引時,MySQL 使用 Block Nested-Loop Join 算法。

Block Nested-Loop Join

Block Nested-Loop Join的算法,簡稱 BNL,它是 MySQL 在被驅(qū)動表上無可用索引時使用的 join 算法,其具體流程如下所示:

  • 把表 t2 的數(shù)據(jù)讀取當前線程的 join_buffer 中,在本篇文章的示例 SQL 沒有在 t2 上做任何條件過濾,所以就是講 t2 整張表 放入內(nèi)存中;

  • 掃描表 t1,每取出一行數(shù)據(jù),就跟 join_buffer 中的數(shù)據(jù)進行對比,滿足 join 條件的,則放入結(jié)果集。

比如下面這條 SQL

select * from t2 straight_join t1 on (t2.b=t1.b);

這條語句的 explain 結(jié)果如下所示??梢钥闯?/span>

可以看出,這次 join 過程對 t1 和 t2 都做了一次全表掃描,并且將表 t2 中的 500 條數(shù)據(jù)全部放入內(nèi)存 join_buffer 中,并且對于表 t1 中的每一行數(shù)據(jù),都要去 join_buffer 中遍歷一遍,都要做 500 次對比,所以一共要進行 500 * 10000 次內(nèi)存對比操作,具體流程如下圖所示。


主要注意的是,第一步中,并不是將表 t2 中的所有數(shù)據(jù)都放入 join_buffer,而是根據(jù)具體的 SQL 語句,而放入不同行的數(shù)據(jù)和不同的字段比如下面這條 join 語句則只會將表 t2 中符合 b >= 100 的數(shù)據(jù)的 b 字段存入 join_buffer。

select t2.b,t1.b from t2 straight_join t1 on (t2.b=t1.b) where t2.b >= 100;

join_buffer 并不是無限大的,由 join_buffer_size 控制,默認值為 256K。當要存入的數(shù)據(jù)過大時,就只有分段存儲了,整個執(zhí)行過程就變成了:

  • 掃描表 t2,將符合條件的數(shù)據(jù)行存入 join_buffer,因為其大小有限,存到100行時滿了,則執(zhí)行第二步;

  • 掃描表 t1,每取出一行數(shù)據(jù),就跟 join_buffer 中的數(shù)據(jù)進行對比,滿足 join 條件的,則放入結(jié)果集;

  • 清空 join_buffer;

  • 再次執(zhí)行第一步,直到全部數(shù)據(jù)被掃描完,由于 t2 表中有 500行數(shù)據(jù),所以一共重復了 5次

這個流程體現(xiàn)了該算法名稱中 Block 的由來,分塊去執(zhí)行 join 操作。因為表 t2 的數(shù)據(jù)被分成了 5 次存入 join_buffer,導致表 t1 要被全表掃描 5次。



全部存入分5次存入
內(nèi)存操作10000 * 50010000 * (100 * 5)
掃描行數(shù)10000 + 50010000 * ?5 + 500


如上所示,和表數(shù)據(jù)可以全部存入 join_buffer 相比,內(nèi)存判斷的次數(shù)沒有變化,都是兩張表行數(shù)的乘積,也就是 10000 * 500,但是被驅(qū)動表會被多次掃描,每多存入一次,被驅(qū)動表就要掃描一遍,影響了最終的執(zhí)行效率。


基于上述兩種算法,我們可以得出下面的結(jié)論,這也是網(wǎng)上大多數(shù)對 MySQL join 語句的規(guī)范。

  • 被驅(qū)動表上有索引,也就是可以使用Index Nested-Loop Join 算法時,可以使用 join 操作。

  • 無論是Index Nested-Loop Join 算法或者 Block Nested-Loop Join 都要使用小表做驅(qū)動表。


因為上述兩個 join 算法的時間復雜度至少也和涉及表的行數(shù)成一階關(guān)系,并且要花費大量的內(nèi)存空間,所以阿里開發(fā)者規(guī)范所說的嚴格禁止三張表以上的 join 操作也是可以理解的了。

但是上述這兩個算法只是 join 的算法之一,還有更加高效的 join 算法,比如 Hash Join 和 Sorted Merged join。可惜這兩個算法 MySQL 的主流版本中目前都不提供,而 Oracle ,PostgreSQL 和 Spark 則都支持,這也是網(wǎng)上吐槽 MySQL 弱爆了的原因(MySQL 8.0 版本支持了 Hash join,但是8.0目前還不是主流版本)。


其實阿里開發(fā)者規(guī)范也是在從 Oracle 遷移到 MySQL 時,因為 MySQL 的 join 操作性能太差而定下的禁止三張表以上的 join 操作規(guī)定的 。


Hash Join 算法


Hash Join 是掃描驅(qū)動表,利用 join 的關(guān)聯(lián)字段在內(nèi)存中建立散列表,然后掃描被驅(qū)動表,每讀出一行數(shù)據(jù),并從散列表中找到與之對應(yīng)數(shù)據(jù)。它是大數(shù)據(jù)集連接操時的常用方式,適用于驅(qū)動表的數(shù)據(jù)量較小,可以放入內(nèi)存的場景,它對于沒有索引的大表和并行查詢的場景下能夠提供最好的性能??上贿m用于等值連接的場景,比如 on a.id = where b.a_id。


還是上述兩張表 join 的語句,其執(zhí)行過程如下


  • 將驅(qū)動表 t2 中符合條件的數(shù)據(jù)取出,對其每行的 join 字段值進行 hash 操作,然后存入內(nèi)存中的散列表中;

  • 遍歷被驅(qū)動表 t1,每取出一行符合條件的數(shù)據(jù),也對其 join 字段值進行 hash 操作,拿結(jié)果到內(nèi)存的散列表中查找匹配,如果找到,則成為結(jié)果集的一部分。


可以看出,該算法和 Block Nested-Loop Join 有類似之處,只不過是將無序的 Join Buffer 改為了散列表 hash table,從而讓數(shù)據(jù)匹配不再需要將 join buffer 中的數(shù)據(jù)全部遍歷一遍,而是直接通過 hash,以接近 O(1) 的時間復雜度獲得匹配的行,這極大地提高了兩張表的 join 速度。

不過由于 hash 的特性,該算法只能適用于等值連接的場景,其他的連接場景均無法使用該算法。


Sorted Merge Join 算法


Sort Merge Join 則是先根據(jù) join 的關(guān)聯(lián)字段將兩張表排序(如果已經(jīng)排序好了,比如字段上有索引則不需要再排序),然后在對兩張表進行一次歸并操作。如果兩表已經(jīng)被排過序,在執(zhí)行排序合并連接時不需要再排序了,這時Merge Join的性能會優(yōu)于Hash Join。Merge Join可適于于非等值Join(>,<,>=,<=,但是不包含!=,也即<>)。


需要注意的是,如果連接的字段已經(jīng)有索引,也就說已經(jīng)排好序的話,可以直接進行歸并操作,但是如果連接的字段沒有索引的話,則它的執(zhí)行過程如下圖所示。


  • 遍歷表 t2,將符合條件的數(shù)據(jù)讀取出來,按照連接字段 a 的值進行排序;

  • 遍歷表 t1,將符合條件的數(shù)據(jù)讀取出來,也按照連接字段 a 的值進行排序;

  • 將兩個排序好的數(shù)據(jù)進行歸并操作,得出結(jié)果集。


Sorted Merge Join 算法的主要時間消耗在于對兩個表的排序操作,所以如果兩個表已經(jīng)按照連接字段排序過了,該算法甚至比 Hash Join 算法還要快。在一邊情況下,該算法是比 Nested Loop Join 算法要快的。


下面,我們來總結(jié)一下上述三種算法的區(qū)別和優(yōu)缺點。



Nested Loop JoinHash JoinSorted Merge Join
連接條件適用于任何條件只適用于等值連接(=)等值或非等值連接(>,<,=,>=,<=),‘<>’除外
主要消耗資源CPU、磁盤I/O內(nèi)存、臨時空間內(nèi)存、臨時空間
特點當有高選擇性索引或進行限制性搜索時效率比較高,能夠快速返回第一次的搜索結(jié)果當缺乏索引或者索引條件模糊時,Hash Join 比 Nested Loop 有效。通常比 Merge Join 快。在數(shù)據(jù)倉庫環(huán)境下,如果表的紀錄數(shù)多,效率高當缺乏索引或者索引條件模糊時,Sort Merge Join 比 Nested Loop 有效。當連接字段有索引或者提前排好序時,比 hash join 快,并且支持更多的連接條件
缺點無索引或者表記錄多時效率低建立哈希表需要大量內(nèi)存,第一次的結(jié)果返回較慢所有的表都需要排序。它為最優(yōu)化的吞吐量而設(shè)計,并且在結(jié)果沒有全部找到前不返回數(shù)據(jù)
需要索引是(沒有索引效率太差)


對于 Join 操作的理解


講完了 Join 相關(guān)的算法,我們這里也聊一聊對于 join 操作的業(yè)務(wù)理解。

在業(yè)務(wù)不復雜的情況下,大多數(shù)join并不是無可替代。比如訂單記錄里一般只有訂單用戶的 user_id,返回信息時需要取得用戶姓名,可能的實現(xiàn)方案有如下幾種:

  1. 一次數(shù)據(jù)庫操作,使用 ?join 操作,訂單表和用戶表進行 join,連同用戶名一起返回;

  2. 兩次數(shù)據(jù)庫操作,分兩次查詢,第一次獲得訂單信息和 user_id,第二次根據(jù) user_id 取姓名,使用代碼程序進行信息合并;

  3. 使用冗余用戶名稱或者從 ES 等非關(guān)系數(shù)據(jù)庫中讀取。

上述方案都能解決數(shù)據(jù)聚合的問題,而且基于程序代碼來處理,比數(shù)據(jù)庫 join 更容易調(diào)試和優(yōu)化,比如取用戶姓名不從數(shù)據(jù)庫中取,而是先從緩存中查找。


當然, join 操作也不是一無是處,所以技術(shù)都有其使用場景,上邊這些方案或者規(guī)則都是互聯(lián)網(wǎng)開發(fā)團隊總結(jié)出來的,適用于高并發(fā)、輕寫重讀、分布式、業(yè)務(wù)邏輯簡單的情況,這些場景一般對數(shù)據(jù)的一致性要求都不高,甚至允許臟讀。


但是,在金融銀行或者財務(wù)等企業(yè)應(yīng)用場景,join 操作則是不可或缺的,這些應(yīng)用一般都是低并發(fā)、頻繁復雜數(shù)據(jù)寫入、CPU密集而非IO密集,主要業(yè)務(wù)邏輯通過數(shù)據(jù)庫處理甚至包含大量存儲過程、對一致性與完整性要求很高的系統(tǒng)。


—————END—————

更多精彩:
Java實戰(zhàn)項目視頻,給需要的讀者,收藏!
Centos7搭建k8s環(huán)境教程,一次性成功!
看看人家那后端API接口寫得,那叫一個優(yōu)雅!
一款開源的視頻彈幕功能項目,不用重復造輪子了!
一款開源 SpringBoot 后端管理系統(tǒng),代碼開源了!
開源 SpringBoot 商城系統(tǒng),真香!
關(guān)注公眾號,查看更多優(yōu)質(zhì)文章

最近,整理一份Java資料Java從0到1,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。
獲取方式:關(guān)注公眾號并回復?Java?領(lǐng)取,更多Java內(nèi)容陸續(xù)奉上。

好文章,我在看??

瀏覽 39
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 天天插天天狠| 成人黄网免费观看视频| 亚洲成人精品一区二区| 超碰永久| 国产手机AV在线| 亚洲www啪成人一区二区麻豆| 国产精品77777| japanese在线观看| 老熟女--91XX| 97人妻精品黄网站| 在线中文字幕网站| 狠狠五月| JULIA超乳JULIA无码| 深夜福利一区二区| 五月天黄色电影网站| 成人网肏逼视频| 国产精品扒开腿做爽爽爽A片唱戏 中文字幕一区二区三区精华液 | 国产一级做a爱免费视频| Al激情欧美| 无码群交东京热| 欧美日韩精品一区二区| 91精品人妻少妇无码影院| 超碰蜜桃| 亚洲精品无码一区| 国产天堂视频| 大鸡巴网站| 91在线无码精品秘入口| 日韩色区| 成人午夜在线| 国产午夜激情视频| 色五月欧美| 人妻丰满熟妇| 一区无码免费| 韩国高清无码60.70.80| 久久精品福利| 日韩视频在线观看免费| 三级久久久| 国产熟女一区二区| 久久成人国产| 少妇4p| 无码直播| 看免费黄色录像| 日韩高清久久| 欧美色视频在线观| 成人视频免费观看18| 欧美色图在线播放| 色色免费视频| 丰满人妻一区二区三区精品高| 麻豆成人网| 成熟的国模冰莲[2]| 国产欧美综合三级伦| 中文字幕69| 日本黄色影视| 曰本中文字幕在线视频| 亚洲AV免费在线观看| 成人欧美大片黄18| 日逼黄色| 操日本逼| 五月婷婷激情综合| 亚洲AV性爱| 国产高清成人| 91麻豆视频在线观看| 97人妻精品一区二区三区软件 | 黄色一级片免费看| 午夜a片| 91在线无码精品秘入口国战 | av在线资源网站| 国产精品无毛五区六区| www.操逼| 激情黄色五月天| 水蜜桃一区| 良妇露脸15P| 久操视频免费| 人妻成人网| 人人草人人澡| 国产精品久久无码| 亚洲欧美日韩色图| 亚洲日韩中文在线| 久久国际精品| 内射免费网站| 日本成人电影在线观看| 99久久精品国产一区二区三区| 中文字幕无码观看| 十八禁网站在线播放| 热久久国产| 欧美老女人逼| 超碰午夜| 久久草视频在线播放| 午夜av免费| 色臀av| 欧美,日韩,中文字幕| 天天视频狠狠狠狠| 天天爽夜夜爽精品成人免费| 亚洲性爱片| 人人操人人爱人人拍| 看国产AA免费| 色欲影视插综合一区二区三区| 日韩成人无码毛片| 黄网站在线观看| 最新中文字幕在线观看| 一本道无码在线| 一本在线| 麻豆性爱| 狠狠综合| 色图在线观看| 亚洲国产一区二区三区四区| 国产成人一级| 性色a| 国产老熟女高潮毛片A片仙踪林| 91无码一区二区三区在线| 午夜精品久久久久久不卡8050| 一级a片激情啪啪免费观| 99热精品免费在线观看| 三级片日本在线| 999精品视频在线| 亚洲国产精品久久久久婷婷老年 | 欧美一级婬片AAAA毛片| 91豆花成人网站| 麻豆A∨在线| 国产成人小视频| 精品国产乱码久久久久久郑州公司| 波多野结衣亚洲| 熟女一区二区| 伊人网成人| 九一精品| 亚洲天堂网站| 在线观看高清无码中文字幕 | 性爱一区| 男女精品一区| 国产精品一级二级三级| 色大香蕉伊人| 无码人妻一区二区三区三| 日韩在线观看免| 亚洲中文无码av| 日韩v片| 国产精品久久毛片| 欧美成人视频网| 中文字幕成人A片| www.午夜| 亚洲三级视频在线观看| 不卡中文字幕| 97毛片| 日韩在线不卡| 欧美色色色网| 欧美成人精品A片免费一区99| 福利视频导航自拍| 人妻九九九| 72成人网| 无码福利导航| 日日日操| 无码91| 三级网站免费| 国产无码一区| 国内成人精品网站| 一级a在线| 999在线视频| A级免费视频| 超碰伊人大香蕉| 香蕉AV777XXX色综合一区| 精品国产欧美一区二区三区成人| 免费的操逼视频| 老熟女乱伦| 久久久成人网| 欧美精品一区二区少妇免费A片| 国偷自产视频一区二区久| 久久国产高清视频| 黄色一级片在线| 骚逼黄片| 成人视频在线观看黄色18| 国产色情在线| 91人人| 丝袜制服中文字幕无码专区| 视频一区二区免费| 免费无码国产在线| 日本电影一区二区| 黄片免费视频观看| 欧美亚洲成人在线| 一本在线| 国产美女网站| 一本色道久久综合亚洲怎么玩| 日韩永久免费| 牛牛精品一区二区| 亚洲AV无码免费| 91偷拍视频| 成人片成人片| 亚洲精品鲁一鲁一区二区三区 | 老女人的逼| 88AV视频| 国产精品精品| 人人看人人澡| 亚洲高清成人动漫| 国产精品A片守望| 97超碰碰| 操逼视频国产91| 九色蝌蚪9l视频蝌蚪9l视频成人熟妇| 欧美成人看片黄a免费看| 午夜精品视频在线观看| 国产精品成人午夜福利| 激情99| 六月丁香久久| 免费一区视频| 国产一片黑夜内射| 天美精东蜜桃91| 国产黄色免费网站| 韩国午夜福利视频| 人人妻人人躁人人DVD| 色婷婷在线影院| 中文字幕在线观看高清| 无码三级片在线观看| 亚洲AV黄片| 成人激情视频网| 国产高清精品软件丝瓜软件| 少妇在厨房| 久久精品无码一区二区无码性色| 欧美国产高清| 国产人人色| 内射视频在线观看| 大香伊人蕉| 青娱乐亚洲视频在线| 色婷婷六月| 国产精品二区高清在线苍井空| 婷婷99| 菊花插综合网| 懂色av懂色av粉嫩av| 国内精品一区二区三区| 亚洲AV男人天堂| 蜜桃在线视频| WWW亚洲视频| 国产精品久久久久久精| 亚洲加勒比在线| 久久久一区二区| 欧美啪啪视频| 久一久久| 中文字幕在线观看网址最新地址| 亚洲秘无码一区二区三区观看| 欧美精品无码久久久精品酒店| 久久久91人妻无码精品蜜桃ID| 天天超碰| 无码一区二区三区在线| 三级AV在线免费观看| 香蕉91| 日韩AV一级| 欧美大黑逼| 亚洲无码一级电影| 天天舔九色婷婷| 懂色av懂色av粉嫩av无码| 国产精品福利视频| www,操逼| 亚洲五月丁香婷婷| 日韩免费一级| 久艹| 国产精品嫩草久久久久yw193| 亚洲成人视频在线免费观看| 成人在线视频播放| 欧美怕怕怕| 日本黄色直播| 波多野结衣av在线播放| 老熟女17页一91| 黑人精品XXX一区一二区| 在线观看日韩av| 国产AV三级片| 国产午夜精品视频| 大香蕉日| 男女无码| 成人欧美一区二区三区白人| 色色操| 成人黄网免费观看视频| 中文字幕在线观看福利视频| 粉嫩99精品99久久久久久特污| 成人毛片100免费观看| 在线免费观看黄色| 三级毛片网站| 精品国产久| 怡红院AV| 亚洲国产成人av| 天天操天天射天天日| 丁香五月中文字幕| 国产一二三区在线| 精品www| 狠狠操在线视频| 99久久久久久久无码| 久久婷婷五月综合伊人| 婷婷av在线| JIZZJIZZ国产精品喷水| 国产熟女露脸普通话对白| 毛片毛片毛片毛片| 老司机午夜电影| 大奶AV| 免费无码在线观看| 丰满人妻一区二区三区精品高清 | 午夜91| 国产伊人大香蕉| 东京热无码高清| 一级在线播放| 欧美日本黄色| 黄色高清视频在线观看| 九色PORN视频成人蝌蚪自拍 | 久激情内射婷内射蜜桃欧美一级 | 成人毛片在线观看| 国产美女被| 久久久久久久久久国产| 婷婷视频| chinese高潮老女人| 免费黄色视频观看| 国产AV无遮挡| 久久久久久免费毛片精品| 欧美不卡一区| 欧美激情亚洲无码| 久草中文网| 俺来也官网欧美久久精品| 风流老熟女一区二区三区| 不卡av在线| 熟女人妻一区二区三区免费看| 一级黄色在线| 欧美干| 密桃视频网站| 欧美成人性爱视频| 黄色污污污网站| 亚洲AV性爱| 翔田千里无码| 成人做爰黄片视频免费| 91爱爱视频| 五月婷婷俺也去| 成人激情综合| 一道本一区二区三区免费视频| 大帝av| 毛片在线视频| 日韩欧美高清无码| 国产一级a毛一级a毛视频在线网站| 欧美性爱XXXX| 精东AV| 欧美一区| 亚洲尤物| 波多野结衣AV无码| 三级无码在线播放| 亚洲爱爱视频| 久久久久久久极品内射| 国产在线观看无码免费视频| 亚洲福利一区二区| 无码专区在线观看| 亚洲任你操超碰在线| www.日韩AV| 亚洲高清免费视频| 成人一区二区在线观看| 亚洲日韩中文字幕在线| 999成人网| 欧美在线色图| 北条麻妃精品视频| 欧美三级片在线视频| 国产欧美视频在线| 嫰BBB槡BBBB槡BBBB| av逼网| 亚洲综合中文字幕在线| 操逼视频在线观看| 国产女人18毛片水真多成人如厕| 77777色婷婷| 91妻人人澡人人爽人人精品| 日韩欧美色| 亚洲av小说| www.911国产| 国产内射久久| 久久综合电影| 亚洲色婷婷在线| 不卡av在线| 欧美色图色就是色| 自拍偷拍在线视频| 777米奇视频| 国产—a毛—a毛A免费| 91成全在线| 一区二区色| 成人黄网站在线观看| 成人特级毛片| 尹人大香蕉网| 男人天堂V| 九色丨蝌蚪丨老版熟女| 性爱视频免费网站| 黄色视频免费观看国产| 97国产在线视频| 久久97人妻AⅤ无码一区| 91精品人妻一区二区三区| 久久亚洲AV成人无码国产野外| 日本黄色视频免费观看| 免费黄色一级视频| 丰滿老婦BBwBBwBBw| 国产一区二区视频在线| 日韩国产在线观看| 久热亚洲| 日本特级黄色毛片| 成人精品一区二区三区中文字幕| 大香蕉网站在线观看| 国产综合婷婷| 五月亭亭在线视频| 中文在线字幕免费观看电视剧大全| 人妖无码| 男女www| 精品精品精品| 日本免费A片| 一线毛片| 欧美AAAAAA视频| 久久免费国产视频| 日本一级片中文字幕| 日本乱伦中文字幕| 精品久久免费一区二区三区| A片一级片| yw尤物视频| 亚洲不卡| 一本久久精品一区二区| 丰满人妻一区二区三区Av猛交| 加勒比精品在线| 51嘿嘿嘿国产精品伦理| 日韩无码激情| 中文字幕牛牛婷婷| 巨乳国产一区| 淫荡人妻视频| 91传媒在线免费观看| 操老女人的逼| 国内无码自拍| 日韩综合在线| 初尝人妻滑进去了莹莹视频| 另类色| 婷婷五月天黄色| 在线播放一区二区三区| 无码精品ThePorn| 人人妻人人澡人人爽人人爽| 国产精品乱码毛片在线人与| 免费操逼视频在线观看| 亚洲四房播| 久久久久久久国产精品| 狼人综合网| 九九色网| 安微妇搡BBBB搡BBBB日| 国产精品成人无码免费| 日本一级婬片免费放| 久久91人妻无码精品蜜桃HD| 精品免费国产一区二区三区四区| 无套内射在线播放| 性爱综合网| 强伦轩人妻一区二区三区四区| 在线免费观看国产视频| 成人黄片免费看| 中文字幕日韩成人| 安徽妇搡BBBB搡BBB| 精品无码秘人妻一区二区三区| 91丨九色丨老熟女探花| 肏逼黄色一级| 中文字幕-区二区三区四区视频中国| 国产无码观看| 国产做受精品网站在线观看| 国产精品无码白浆高潮| 伊人青青操| 四川少妇搡bbbb搡bbbb| 人妻精品一区二区三区| 骚逼www| 韩日无码| aa免费视频| 欧美射图| 大香蕉操逼| 天天搞天天搞| 久久艹艹| 久久久久网站| 色婷婷一区二区三区久久| 欧美色图1| 人人妻人人澡人人爽久久av| www.99视频| 亚洲免费一级片| 午夜神马51| 亚洲福利电影| 成人国产AV精| 超碰人人操97| 97人人操人人干| 精品内射| 亚洲AV无码免费| 97精品欧美91久久久久久久| 亚洲中文免费| 91一区| 久久e热| 国产伦子伦一级A片在线| 水蜜桃视频在线播放| 国产又爽又黄A片| 免费观看AV| av黄色网址| 无套内射在线免费观看| 欧美日韩成人电影| 成人国产精品视频| 久久肉| 成人伊人AV| 三级片自拍| 你懂的在线网站| 亚洲无码视频在线免费观看| 亚洲午夜精品久久久久久APP| 青青草无码视频| 色婷婷AV一区二区三区之e本道| 中文字幕中文字幕无码| 伊人在线成人视频| 亚洲激情五月天| 免费观看一区二区三区| 日韩久久精品视频| 秋霞网一区二区| 国产美女自拍| 日本一区二区不卡| 91热在线| 一本到无码| 9l视频自拍九色9l视频成人| 精品中文字幕视频| 日韩一级爱爱| 欧美三级在线| 女人天堂AV| 亚洲天堂一区二区三区| 欧洲成人在线观看| 一二三久久| 色五月网站| 成年无码| 国产精品久久久久的角色| avav无码| 亚洲人妻av| www.91久久| 水密桃网站| 国产AV一二三区| 人人看人人爱| 停停五月天| 米奇狠狠干| 99视频在线免费播放| 日逼导航| 久久激情国产| 韩国色情中文字幕| 丁香五月在线| www.bbbb| 久久人妻熟女中文字幕av蜜芽| 国产在线观看AV| 九色PORNY蝌蚪视频| 怡春院亚洲| 操日本少妇| 亚洲第九页| 五月天三级片| 美女网站黄色| XXXX国产| 国产精品999999| 99三级片| 日韩一区二区视频在线观看| 一级无码在线| 五月丁香婷婷成人| 91香蕉国产在线观看| 国产三级性爱| 中日美朝美女一级片免费看| 91九色丨国产丨爆乳| 奇米久久| 精品福利在线观看| 国产一级二级三级| 日本无码一区二区三区| 亚洲成人在线网站| 国产成人A| 欧美成人在线观看视频| 日逼综合| 亚洲天堂一区二区三区| 欧美级毛片一夜| 日韩在线高清| 一区高清无码| 东京热一区二区三区| 日本丰满老熟妇乱子伦| 久久九九国产| 北条麻妃日B视频| 亚洲一级黄色视频| www.日韩欧美| 最新AV在线| 俄女兵一级婬片A片| 在线免费看毛片| 日本A级视频| 人妻中文无码| 久久久久久国产| 俺来也操逼| 久久99影院| 亚洲成人a片| 人人操天天| 无码综合| 亚洲AV无码成人精品一区| 亚洲无码精品专区| 日本男人天堂| 婷婷性爱五月天| 国产精品a久久久久| 国产毛片网| 日韩免费观看视频| 欧美性69| 91成人免费| 国产ts在线| 人妻少妇精品视频| 无码人妻一区二区三区四区老鸭窝| 免费黄片网站| S28AV| 中文字幕88页| 思思精品在线| 91人妻中文字幕| 色黄网站在线观看| 日韩人妻丝袜中文字幕| 99精品视频免费| 亚洲免费一区二区| 亚洲无码三区| 麻豆一区二区| 伊人久综合| 大色鬼在线天堂精品| 欧美性猛交ⅩXXX乱大交| 黄在观看线| 久久538| 在线免费看AV| 99热国产在线| 日本精品电影| 国产第八页| 日韩人成| 香蕉伊人视频| 超碰在线天天干| xxxx国产| 亚洲三级免费| 中文字幕免费在线看一区七区| 综合插插| 欧美日韩无| 97视频国产| 亚洲一区三区| 久久久久亚洲AV成人网人人软件| 特级西西人体大胆无码| 日韩一级视频| 中字幕视频在线永久在线观看免费 | 色播视频在线观看| 国产三级网址| 免费的毛片| 成人一级A片| 欧美亚洲系列| 色欲AV秘无码一区二区三区| 青在线视频| av黄色在线| 黄色一级网站| 毛片黄色片| 樱桃性爱视频| 一区二区三区四区在线播放| 婷婷一区二区三区| 国产一级美女操逼视频免费播放| 黄色成人视频网站在线观看| 五月婷婷视频在线观看| 免费无码在线播放| www.人人操| 国产嫩草久久久一二三久久免费观看 | 国产激情视频在线观看| 成人乱码一区二区三区| 色综合久久88色综合| 亚洲国产日本| 亚洲a视频| 蜜臀99| 亚洲成人在线观看视频| 黄片网站在线看| 亚洲在线免费| 国产精品视频久久久久| 96久久| 一区二区三区精品视频| 国产激情久久| 无码中文综合成熟精品AV电影 | www天天日| 天天日天天摸| 婷婷av在线| 青草久在线| 中文字幕在线观看有码| 亚洲视频中文字幕在线观看| 亚洲女人天堂| 亚洲综合二区| 日韩黄片免费看| 97一区二区| 婷婷亚洲五月色综合| 狠狠躁18三区二区一区免费人| 日韩一区二区三区视频| 52妺嘿嘿午夜福利在线| 国产精品揄拍100视频| 成人片网址| 巨爆乳肉感一区二区三区视频 | 久久99老妇伦国产熟女| 日韩乱伦毛片| 男女无套在线观看免费| 91资源在线| 97男人的天堂| 无码乱码在线观看| 免费一级黄色| 日韩在线视频不卡| 免费十无码| 欧美性爱小说| 黄色免费视频网站| 亚洲欧美日韩一区| 正在播放李彩斐被洋老外| 日本黄A三级三级三级| 青娱乐毛片| 欧美一区三区视频z| 亚洲婷婷网| 人人看人人摸人人操| 成年片免费观看网站免费观看,亚洲+欧... | av日韩无码| 专肏老妇人大逼| 各国熟女HD合集| 强奸校花到高潮| 东北操逼视频| 国产视频中文字幕| av电影在线免费观看| 爱搞搞网| 蜜桃av秘无码一区二区三| 亚洲精品ww| 久热精品视频| 国产卡一卡二在线| AAA片| 成人在线日韩| 天天综合天天干| 国产精品久久77777| 波多野结衣在线网站| 99久久婷婷国产综合精品青牛牛 | 屁屁影院CCYYCOM发布地| 人人妻人人爽人人澡人人精品| 国产免费高清无码| 免费69视频| 黄色视频网站亚洲| 北条麻妃精品| 国产男女av| 91成人无码视频| 竹菊影视一区二区三区| 最新中文字幕在线观看视频| 亚洲中文av| 国产酒店自拍| 韩国无码精品| 香蕉综合在线| 欧美激情在线| 18害羞勿进网站国产| 中文字字幕在线中文乱码| 波多野吉衣av| 亚洲av观看| 亚洲免费AV在线| www.久久99| 蜜臀久久精品久久久久| 天堂网在线视频| 欧美激情国产精品| 九九偷拍视频| 99久热在线精品| 无码人妻丰满熟妇bbbb| 欧美女人日逼视频| 人人妻人人澡人人爽| 欧美成人中文字幕在线| 国产黄色录像| 欧美亚洲图区| 欧美国产在线观看综合| 一级特黄色| 久久这里有精品视频| 一区二区三区黄色| 手机无码在线播放| 做爱无码| 台湾精品一区二区三区| 中文字幕在线观看一区| 日韩爱爱免费视频| 欧美A视频在线观看| 91超碰人人操| 最新久欠一区二区免费看| AV无码免费一区二区三区不卡| 在线中文字幕在线观看| 一道本无码在线播放| 无码日韩av| 大香蕉性爱| 欧美一级成人| 国产欧美激情| 波多野结衣无码AV在线| 在线观看AV网站| 蜜桃传媒一区二区| 久久久久久97| 色五月视频在线| 色五月综合| 国产精品一区二区在线播放| 国产无码高清| 人妻熟女在线| 午夜3D动漫AV| 91成人看片| 国产精品黄视频| 综合网亚洲| 久久精品苍井空免费一区二| 国产精品AV片| 丰满欧美熟妇免费视频| 国产日韩一区二区三区| 欧美熟女一区二区| 91免费视频在线| 亚洲男人天堂视频| 西西4444www大胆无吗| xxxx国产| 中文字幕+乱码+中文乱码视频在线观看 | 丝瓜视频| 一本到免费视频| 青娱乐亚洲精品视频| 亚洲无码免费在线| 日本A片在线免费观看| 在线看片a| 尤物91| 国产成人视频在线播放| 91av| 一级日逼视频| 日本不卡在线观看| 一道本在线视频| 2025精品视频| 欧美日韩北条麻妃视频在线观看| 国产免费视频| 青青草在线免费视频| 免费在线性爱视频| 日本免费中文字幕| 黄色a级片| 国产1区在线观看| 欧美视频免费| 激情无码国产| 性BBW| 操www| 黄色无码视频| 亚洲欧美日韩久久| 少妇搡BBBB搡BBB搡HD(| AAA一区二区三区| 中文人妻| 久久久久久免费视频| 夜夜夜叫天天天做| 日韩欧美性爱视频| 大黑逼网| 人妻中文无码| 日本三级中文字幕| 在线免费看黄视频| 国产精品AV一区| 懂色中文字幕| 成人在线一区二区| 在线观看无码av| 五月大香蕉| 成人一区二区电影| 骚逼视频聊天记录| 亚洲无码免费在线| 久久久久电影| 日韩日韩日韩日韩| 老太色HD色老太HD.| 亚洲婷婷三级成人网| 伊人无码视频| 2014AV天堂网| 爆乳一区二区三区| 精品色播| 手机看片1024久久| 久久青青婷婷| 久久在线视频| 亚洲视频二区| 热99re69精品8在线播放| 人人干日日干| 这里精品| 久久久久久亚洲AV黄床| 天天插天天爽| 99久热| 黄色小电影在线观看| 成人日韩欧美| 日本操b| 一本到无码| 大炕上公让我高潮了六次| 骚逼自拍| 在线播放毛片| 久久成人18免费网站波多野结衣| 日本中文字幕在线| 91无码精品一区二区| www.色五月| 古装一级无遮挡A片| 9797色色| 无码草逼| 久久天堂AV综合合色蜜桃网| 噜噜色小说| 天天看天天色| 日韩激情视频在线观看| 国产欧美日韩三级| 韩国中文字幕HD久久精品| 国产午夜激情| 中国女人操逼视频| 成人做爰A片一区二区app| 综合五月| 最新在线中文字幕| 欧美日韩在线视频观看| 天堂中文资源库| 亚洲一级视频在线观看| 欧美黄色性爱| 日本69视频| 日韩在线三级片| 中文字幕在线成人| 日韩精品无码AV| 青青草狠狠干| 国产1级片| 在线黄色视频网站| 狠狠色五月| 波多野结衣在线精品| 超碰1999| 操逼超碰| 一区二区三区四区| 日屄电影| 国产精品v欧美精品v日韩| 人妻无码中文字幕蜜桃| 18禁网站在线播放| 11一12周岁女毛片| 亚洲欧美在线视频免费| 2018天天日天天操| 天天草天天草| 艹逼91| 中文字幕AV第一页| 亚洲三级毛片| 久久无码一区二区| 久久国产精品一区二区三区| 日韩成人精品在线| 拍真实国产伦偷精品| 安徽妇搡BBBB搡BBBB|