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

MySQL 的 join 功能弱爆了?

共 3281字,需瀏覽 7分鐘

 ·

2020-11-27 22:58

今天我們來(lái)學(xué)習(xí)和吐槽一下 MySQL 的 Join 功能。

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

下面,我們就來(lái)全面的了解一下 MySQL 的 join 操作。

正文

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


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


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


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

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

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

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

Index Nested-Loop Join 算法

下面,我們先來(lái)初始化一下相關(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 ;;
# 定義存儲(chǔ)過(guò)程來(lái)初始化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)用存儲(chǔ)過(guò)來(lái)來(lái)初始化t1
call init_data();
# 創(chuàng)建并初始化t2
create table t2 like t1;
insert into t2 (select * from t1 where id<=500)

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


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

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

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

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

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

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

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

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

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

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


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


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

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

Block Nested-Loop Join

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

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

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

比如下面這條 SQL

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

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

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

主要注意的是,第一步中,并不是將表 t2 中的所有數(shù)據(jù)都放入 join_buffer,而是根據(jù)具體的 SQL 語(yǔ)句,而放入不同行的數(shù)據(jù)和不同的字段比如下面這條 join 語(yǔ)句則只會(huì)將表 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 并不是無(wú)限大的,由 join_buffer_size 控制,默認(rèn)值為 256K。當(dāng)要存入的數(shù)據(jù)過(guò)大時(shí),就只有分段存儲(chǔ)了,整個(gè)執(zhí)行過(guò)程就變成了:

  • 掃描表 t2,將符合條件的數(shù)據(jù)行存入 join_buffer,因?yàn)槠浯笮∮邢?,存?00行時(shí)滿了,則執(zhí)行第二步;

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

  • 清空 join_buffer;

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

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


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

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


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

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

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


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

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


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

Hash Join 算法

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

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

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

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

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

不過(guò)由于 hash 的特性,該算法只能適用于等值連接的場(chǎng)景,其他的連接場(chǎng)景均無(wú)法使用該算法。

Sorted Merge Join 算法

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

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

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

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

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

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


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


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

對(duì)于 Join 操作的理解

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

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

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

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

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

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


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

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

點(diǎn)個(gè)在看支持我吧,轉(zhuǎn)發(fā)就更好了
瀏覽 11
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 日韩乱伦毛片| 无码一页| 无码啪啪| 日韩精品区| 精品免费国产一区二区三区四区| 91艹逼| 免费的AV网站| 国产性交网站| 俺去日| 人妻熟妇乱子伦精品无码专区毛片| 俺也来最新色视频| 2021狠狠操| 亚洲欧美日韩黑料吃瓜在线观看| 午夜成人av| 中文无码日本一级A片人| 国产精品久久久久久久久借妻 | 8050午夜网| 日本熟妇一区二区三区| 精品久久一区二区三区四区| 91av在线电影| 丰满无码| 麻豆传媒在线观看| 男人的天堂黄色| 99这里有精品| 欧美特大黄| 成人777777免费视频色| 伊人啪啪| 黄色精品久久| 自慰喷水流白浆中文字幕| 无码免费在线视频| 欧美一级A片免费看| 91亚洲国产成人久久精品麻豆| 天天透天天干| 狼人综合影院| 操极品美女| 手机av在线| 无码免费视频在线观看| 欧美一级黄色大片| 黄a无码| 在线黄色视频网站| 99久久久久久久久久| 国产熟女一区二区三区五月婷| 天天爽天天操| 777久久久| 天天日天天添| 久久久久久久久久国产| 亚洲无码高清在线视频| 骚色综合| AV婷婷在线| 国产g蝌蚪| 欧美日韩中文| 91精品一区| 重庆美女揉BBBB搡BBBB| 中文无码日韩欧美久久| 超小超嫩国产合集六部| 亚洲.无码.制服.日韩.中文字幕| 欧美一级黃色A片免费看蜜桃熟了| 无码视频日韩| 人人干人| 国产A片免费视频| 精品无码产区一区二| 江苏妇搡BBBB搡BBBB| 狠狠干大香蕉| 好色婷婷| 亚洲无码不卡视频| 99re这里| 日韩欧美精品| 黑人一区二区| 欧美性爱在线播放| 亚洲男女啪啪视频| 久久无码人妻精品一区二区三区| 日韩免费性爱视频| 老鸭窝久久久| 天天色图片| 先锋影音一区二区三区| 中文字幕你懂的在线三级| 91亚洲国产| 免费看操逼视频| 日韩在线视频网站| 超碰人人艹| 草莓视频在线播放| 久久停停| 91探花视频在线观看| 一本久久精品一区二区| av在线免费观看网址| 青春草在线免费视频| 国产无码AV成在线| 日韩不卡一区二区三区| 精品免费一区二区三区四区| 国产思思99re99在线观看| 欧美天天性| 波多野结衣被操| 一区无码免费| 大香蕉免费中文| 欧美成人视频电影无码高清| 国产精品久久777777是什么意思| 亚洲人妻视频| 91精品无码| 国产免费自拍| 操比视频| 国产福利视频在线观看| 久久国产精品波多野结衣AV | 天天日天天射天天操| 亚洲视频成人| 国产情侣在线视频| AV东方在线| 农村老太HD肉HD| 蜜臀99久久精品久久久懂爱| 亚洲国产成人91精品| 国产v在线观看| 18禁污网站| 国产成人AV免费无码| www.人人摸| 一线毛片| 91av免费在线观看| 亚久久| 又大又粗又爽| 日韩有码一区| 丁香五月婷婷六月| 美女肏逼| 亚洲午夜无码| 嘿嘿午夜| 欧美a视频| 国产免费久久| 中文字幕在线观看网站| a无码| 你懂的在线视频| 大香蕉99| 成人三级AV在线| 一级免费a片| 人妻公日日澡久久久| 中国女人如毛片| 麻豆疯狂做受XXXX高潮视频| 中文字幕精品综合| 国产一级AA片| 欧产日产国产swag| 亚洲欧洲精品视频| 亚洲精品国产AV婷婷| 久久精品久久久久久久| 无码中文字幕在线视频| 超碰久操| 色综合久久天天综合网| 91精品国自产在线观看| 中文字幕人妻无码| 欧美成人无码片免费看A片秀色| 黄色成人18| 91视频免费在线观看| 丰臀肥逼高清视频电影播放| 黄色免费a级片一级片| 一本色道精品久久一区二区三区 | 久久99精品国产.久久久久久| 免费毛片在线| 人人澡超碰碰| 久久精品夜色噜噜亚洲A∨| 五月天开心网| 久久99精品久久久久久| 欧美在线不卡| 在线观看无码| 久久婷婷久久| 北条麻妃无码视频在线| 中文字幕日韩美| 日韩欧美成人片| 人妻天天爽夜夜爽| 国产精品免费一区二区三区都可以| 亚洲视频成人| av黄色在线观看| 91精品电影18| 国产日韩欧美综合精品在线观看| 又粗又硬又爽18级A片| 日韩操比视频| 色吧超碰| 精品视频网| 亚洲视频一区二区三区四区娇小视频在线观看视频 | 爱操AV| 撸一撸成人在线做爱视频。| 特级西西444WWW高清大视频 | 亚洲国产成人AV| 中文字幕一二三区| 永久免费看片视频| 日韩高清不卡| 婷婷激情五月| 91麻豆国产福利精品| 成人毛片视频网站| 国产男人天堂| 黄色免费看| 九九精品久久| 操逼动漫| 中日美朝美女一级片免费看| 亚洲欧美日韩不卡| 免费播放黄色成人片| 国产三级免费观看| 2025AV天堂网| 亚洲中文字幕免费观看| 亚洲欧美在线观看| 色老板在线精品免费观看| 伊人久久AV| 国产在线一| 亚洲成人在线一区| 国产无码一二三区| 久久精品在线播放| 99久久99久久| www.91久久| 国产一级黄色电影| 久久久女女女女999久久| 人妻熟女在线视频| 日木毛片| 最近中文字幕mv第三季歌词| 亚洲久操| 麻豆91网站| 婷婷丁香花| 无码人妻少妇| 日韩中文字幕高清| 人人干人人爽| 大香蕉大香蕉大香蕉| 一级特黄大片录像i| 超碰人人操97| 日韩AV中文字幕在线| 99视频网| AV三级无码| 黄色片网站视频| 99久热在线精品视频| 视频一区二区三区在线观看| 人人操人人摸人人干| 久久99精品国产麻豆婷婷洗澡| 中国熟睡妇BBwBBw| 天天爽天天摸| 日本在线小视频| 人人草人人干| 玖玖热在线视频| 黄色一级片在线| 亚洲区欧美区| 91站街农村熟女露脸| 大香蕉福利视频导航| 成年人免费公开视频| 日韩欧美在中文| 九色PORNY9l原创自拍| 久热精品视频| 欧美日韩加勒比| 久久久久999| 中日韩免费视频| 丰滿老婦BBwBBwBBw| 日逼操| 精品人妻一区二区免费蜜桃| 无码囯无精品毛片大码| 黄色片网站| 国产一级免费观看| 成熟的国模冰莲[2]| 久久亭亭| a片在线免费观看| 欧美色一级| 一级二级三级毛片| 色色视频在线观看| 一区二区亚洲| 黄色美女毛片| 91成人视频在线免费观看| 亚洲AV电影网| A片观看视频| 一级黄色片免费观看| 久草国产视频| 东京热精品视频| 中文字幕在线欧美| 欧美国产综合| 欧美黑吊大战白妞欧美大片| www.青青草视频| 美女被操网站免费| 成人免看一级a一片A片| 欧美一区二区三区四区视频| 国产人妻中文字幕| 黄色A片电影| 免费一二区| 你懂的久久| 可以免费看av的网站| 国产精品久久精品| 色撸AⅤ| 九七AV| 日韩精品视频一区二区| 影音先锋资源| 免费三级怡红院| 国产AV资源网| 色婷婷在线播放| 操久在线| 人人澡人人澡人人| 天天肏| 大香蕉伊人视频在线观看| 翔田千里無碼破解| 日韩AV免费| 中文字幕一级片| 丁香五月婷婷五月天| 人人插人人| 蜜桃免费网站| 天堂а√在线中文在线新版| 日逼网址| 91无码精品国产AⅤ| 91人妻无码精品蜜桃| 亚洲免费观看| 蜜臀av网| AV一级片| 夜夜夜久久久| 色色一区二区| 一区二区三区四区精品| 黄色av网站免费| 波多野结衣国产| 日韩成人无码全裸视频| 久久青青操| www.男人天堂| 国产A片免费视频| 蝌蚪窝久久| 欧美a视频| XX熟女HD| 91足浴店按摩漂亮少妇| 麻豆三级片| 成人午夜天堂| 怡红院男人的天堂| 性欧美一区二区| 黄色无遮挡| 日韩国产欧美| 久久五月亭亭| 国产Av一区二区三区| 亚洲AV无码日韩AV无码导航| 成人午夜在线观看| 国产免费无码| 色资源在线观看| 无码人妻精品一区二区三| a片视频免费观看| 日韩不卡视频在线| 综合伊人| 久久激情av| 国产精品网站在线观看| 美女少妇激情BBBB| 18久久| 青青草免费在线视| 中文字幕高清| 99热这里只有精品9| 欧美粗大| 国模吧一区| 久久你懂的| 91足浴店按摩漂亮少妇| 一本一道久久a久久精品综合| 色婷婷久久综合| 青青伊人网| 日韩黄色片在线观看| 免费看一区二区三区| 天天天天天天天天干| 狠狠av| 亚洲无码人妻| 无码AV网| 免费国产视频| 四川少BBB搡BBB爽爽爽| 麻豆免费视频| 国产精品美女久久久| 老熟女-ThePorn| 99精品一区二区三区| 亚洲AV无码成人| 国产变态另类| 国产无码二区| 88海外华人免费一区| 一本无码中文字幕| 97爱爱| 黄色视频免费在线观看网站| 五月天婷婷激情| 亚洲欧洲天堂| 国产人妖视频| 色情小电影免费网站观看网址在线播| 日韩福利在线观看| 影音先锋三级资源| 欧美丰满少妇人妻精品| 日本日逼网| 少妇搡BBBB搡BBB搡造水爽| av影音先锋| 激情五月天丁香| 精品中文一区二区三区| 高潮国产视频| 国产一级A片视频| 毛片在线观看视频| 欧美一级特黄AAAAAA片在线视频| 欧美一区二区在线视频| 亚洲一区免费| 天天视频黄色| 亚洲俺去了| 九九热超碰| 男女啪网站| 亚洲免费视频播放| 免费观看的av| 日韩操操| 日韩加勒比在线| 婷婷五月天激情小说| 国产精品一区二区免费| 中文字幕在线观看视频www| 国产成人视频免费在线观看| 嫩草视频在线观看| 婷婷色五月激情| 日韩无码毛片| 国产伦子伦一级A片在线| 欧美城综合在线观看网| 97日日| 日本一区二区三区四区| 91丨国产丨熟女熟女| 四川揉BBB搡BBB| 97超碰在| 人人操人人看人人| av在线精品| 婷婷国产成人精品视频| 欧洲精品码一区二区三区免费看| 精品视频在线观看免费| 亚洲国产精品自在自线| 一道本一区二区三区| 大香蕉伊人网在线| 午夜男女福利| 中文字幕精品三区无码| 91蝌蚪丨人妻丨丝袜| 91x色| 在线看片a| 日本高清视频免费观看| 天天爽夜夜爽AA片免费| 美女91视频网站| 天天草网| 五月婷婷深深爱| 欧美大黄视频| 亚洲一区av| 亚洲无码视频专区| 91熟女首页| 黄色视频一级| 狠狠色狠狠撸| 少妇大战28厘米黑人| 亚洲天堂视频在线播放| 特黄特色免费大片| 欧美日韩在线电影| 亚洲国产精品成人综合色在线婷婷 | 日韩AV无码专区亚洲AV紧身裤| 熟妇人妻中文AV| 大香蕉偷拍视频| 狠狠地操| 久久久久麻豆V国产精华液好用吗 色噜噜狠狠一区二区三区牛牛影视 | 国产精品成人无码a无码| 97免费在线观看视频| 国产精品无码一区二区在线欢| 亚洲中文无码电影| 亚洲国产高清在线观看视频| 国产—a毛—a毛A免费看图| 婷婷黄色网| 麻豆精品久久久久久久99蜜桃| 怡春院视频| 91麻豆精品A片国产在线观看| 99视频在线看| 日韩熟妇人妻中文字幕| 波多野结衣一区| 高潮免费视频| 久久理论电影| 四虎黄色网| 国产成人精品免费看视频| 国精品无码人妻一区二区三区免费 | 免费看黄色视频的网站| 免费中文字幕视频| 欧美日韩日逼| 中文字幕无码影院| 丝瓜视频污APP| 国产乱妇乱子伦视频免费观看让女人 | 88在线无码精品秘入口九色| AV你懂得| 日本无码高清| 91欧美精品成人综合在线观看| 黄片视频免费看| 欧洲成人在线观看| 精品成人网| 成人精品鲁一鲁一区二区| 中文字幕欧美视频| 一区二区av在线| 91人妻人人澡人人爽| 四色永久成人网站| 操美女91| 日韩性视频| 在线看片A| 国产精品自在线| 天天日天天干天天射| 日韩亚洲欧美在线观看| 欧美午夜影院| 男人色天堂| 美女日屄| 大香蕉做爱视频| 亚洲色在线播放| 97激情| 一本到免费视频| 午夜av免费| 国产a√| 午夜偷拍| 自慰在线观看网站| 日韩中文字幕在线| 国产成人高潮毛片| 国产成人自拍偷拍视频| 高潮喷水AⅤ| 亚洲午夜视频在线观看| 中国免费XXXX18| 加勒比久久88| 天天精品| 蜜桃Av噜噜一区二区三| 91久久无码一区人妻A片蜜桃| 日本人妻中出| 日韩操操| 午夜福利国产| AAA久久久| 亚洲无码人妻| 成人做爰100部免费网站| 中文字幕欧美激情| 亚洲精品乱码久久久久久蜜桃欧美| 激情综合五月天| 9999国产精品| 日韩二三区| 日韩A片免费| 欧美国产综合| 天堂网在线观看| 亚洲加勒比久久88色综合| 躁BBB躁BBB躁BBBBBB日| ThePorn人妻白浆| va婷婷在线免费观看| 国产香蕉在线播放| 三级A片| 精品一二区| 日韩第1页| 久久综合伊人7777777| 99热在线播放| 人人射人人操| 青娱乐在线视频精品| 高清无码小视频| 欧美国产综合在线| 水蜜桃一曲二区| 玖玖资源站中文字幕| 日韩二三区| 黑人Av在线| 日本免费在线| 国产又爽又黄免费网站在线看| 97国产精品手机| 亚洲Av在线观看| 深爱激情五月天| 五月激情六月丁香| 免费视频无码| 国产精品国产三级囯产普通话2 | 强伦人妻一区二区三区视频| 欧美激情无码炮击| 无码一道本| 成全在线观看高清的| 可以免费看av的网站| 国产美女激情视频| 午夜操日在线| 肏屄免费视频| 狠狠操在线观看| 精品码A片18| 久久久久久久久免费视频| 欧美高清在线综合| 久久视频免费看| 熟女嗷嗷叫高潮合集91| 免费无码在线视频| 欧美成人在线免费| 欧美性爱永久| 美女被操免费网站| 欧美成人免费网站| ThePorn-成人网站入口| yjizz视频网| 国产精品欧美综合亚洲| 婷婷伊人綜合中文字幕小说| 人妻无码在线视频| 操逼视频网址| 色国产在线视频| 91香蕉视频在线看| 在线免费人成视频| 亚洲免费观看视频| 日韩人妻在线观看| 嫩BBB槡BBBB槡BBBB视频-百度| 日韩熟妇无码| 无码草| 久久99影院| 日韩人妻中文字幕| 翔田千里AV在线| 91丨熟女丨对白| 色老板在线观看视频| 六月婷婷在线| 欧美V视频| 日本操逼在线播放| 手机av在线| www.亚洲成人| 任我操在线视频| 成人免费黄色片| 成人69AV| 在线免费观看av片| 亚洲人妻免费视频| 亚洲日色| 国产又粗又长| 亚洲天堂一区二区| 成人大香蕉网站精品免费| 国产成人无码精品| 91久久无码一区人妻A片蜜桃 | 在线观看免费视频黄| 国产精品秘国产精品88| 日韩天堂在线播放| 麻豆91网站| 国产av一区二区三区| 日韩视频在线观看免费| 黄色成人网站免费在线观看| 91久久综合| 天天搞天天搞| 天堂网婷婷| 国产亚洲精品久久久波多野结衣| 学生妹作爱片| 久久久精品电影91| 日韩99| 久久久久久久久久久高清毛片一级| 中文字幕麻豆| 免费超碰在线| 操逼视频网址| 日本理论片一道本| 国产成人在线视频免费| 久久久久久久久久久国产精品 | 乱伦激情视频| 亚洲精品aaa| 一级日韩一级欧美| 黄色大片中国一级片-免费看特一级片-亚洲黄色AV | 欧美色图亚洲另类| 麻豆91网站| 无码射精电影| 五月天婷婷影院| 国产一级婬片A片| 亚洲,制服,综合,中文| 91在线| 亚洲成人娱乐网| 91黄色视频网站| 伊人网av| 久艹大香蕉| 国产精品久久久久久久久借妻 | 按摩性高湖婬AAA片A片中国| 中文字幕高清在线中文字幕中文字幕 | 欧美精品在线播放| 狠狠五月| 92丨九色丨偷拍老熟女| 亚洲专区中文字幕| 天天日天天搞| 四虎成人免费视频| 中文字幕一区二区三区在线观看 | 好吊一区二区三区| 最近中文字幕免费MV第一季歌词十| 日韩第一页| 国产在线a| 国产欧美性爱| 青青草原在线| 国产精品三级在线观看| 台湾成人综合网| 911精品国产一区二区在线| 一级片av| www九九热| 91首页| 日本中文字幕网站| 国产肏屄| 12—13女人毛片毛片| 日韩中文字幕在线人成网站| 一级少女免费播放电视剧韩剧TV | 亚洲成人黄色| 91日韩| 欧美一级在线| 99视频免费看| 一级爱爱| wwwA片| 免费看成人747474九号视频在线观看 | 久久人妻免费视频| 亚洲综合免费观看高清完整版在线 | 国产最新在线视频| 天堂8在线19| 久久这里有精品视频| 懂色一区二区三区免费| 国产黄片自拍| 手机在线成人视频| 黄网在线观看视频| 午夜大黄片| 日逼操| 国产黄色片网站| 另类视频区| 天天搞搞| 国产欧美一区二区三区特黄手机版| 91av在线免费播放| 97精品人人A片免费看| 欧美日韩三级在线| 夜夜天天人人| 国产suv精品一区二区6精华液| 狼人综合视频| a天堂在线| 精品日韩中文字幕| 人人人人人人操| 欧美后门菊门交3p、| 午夜福利100理论片| 日本做爱视频| 成人性生活片| 中文在线字幕免费观看| 十八禁无码网站在线观看| 日韩中文字幕高清| 日本综合久久| 西西444WWW无码大胆| 91精品丝袜久久久久久久久久粉嫩 | 成人福利| 久久成人精品| 69视频在线观看| 日韩群交| 麻豆免费版在线观看| 日本在线一级片| 欧美色一级| 51一区二区三区| 男女啪网站| 波多野结衣av一区| 操逼免费视频网站| 99久久国产热无码精品免费| 久热免费| 高h网站| 天天插天天狠天天透| 黄色激情视频网站| 国产1区2区| 8050午夜网| 黄色电影免费看| a色视频| 99久久精品一区二区成人| 大鸡巴日小逼| 丁香婷婷社区| 91九色蝌蚪91POR成人| 91超碰在线播放| 久久成人三级片| 青春草在线观看国产| 哪里可以看毛片| 日韩人妻一区二区三区| 亚洲无码第一页| 91成人情欲影视网| 亚洲乱码一区| 婷婷乱伦| 亚洲热在线视频| 波多野结衣一二三区| 人人干人人干人人干| 99视频在线看| 久久成人毛片| 欧美性爱小说| 手机看片午夜福利网| 黄色一级aa片| 俺去啦俺去也| 亚洲免费黄色片| 国产九九在线视频| 欧美成人视屏| 中文字幕在线观| 色欲AV在线| 操逼视频免费看| 丁香五月亚洲综合| 国产精品在线免费| BBw日本熟妇BBwHD| 加勒比日韩| 中文字幕不卡一区| 亚洲视频播放| 大香蕉久| 搡BBBB搡BBB搡五十粉嫩| av色欲| 日韩欧美三级在线| 一本无码中文字幕| 精品国产精品| 国产在线a| 浙江妇搡BBBB搡BBBB| 午夜老司机福利| 日韩极品在线观看| 欧美熟妇搡BBBB搡BBBBB| 国产做受91一片二片老头| 一级a片免费观看| 日韩欧美在线视频观看| 久久成人电影| 自拍一区在线观看| 成人做爰100片免费视频| 国产又爽又黄免费| 黄色综合网| 日韩无码AV电影| 日韩大香蕉| 九月丁香| 操老女人逼视频| 国产精品不卡一区二区三区| 日韩黄色电影网址| 日本中文字幕无码| 日本特级黄色毛片| 婷色五月| 大香蕉综合网站| 久久国产激情| 国产色情在线| 亚洲无码免费观看| 国产ts视频| 91久久久久久久久久久久18| 亚洲AV中文无码| 亚洲无aV在线中文字幕| 精品无码一区二区三区爱与| 亚洲AAAAAA| 成人A片免费在线观看| 日本中文视频| 日本高潮视频| 人人妻人人摸| 俺去吔| 啊v视频在线| 日韩不卡在线观看| 操大香蕉| 高颜值呻吟给力| 久碰人妻人妻人妻| 一本色道久久| 91女人18片女毛片60分钟| 亚洲最大成人网站| 欧美撸一撸| 免费看黄色片视频| 亚洲欧美影院| 一道本一区| 国产又爽又黄免费视频免费观看| 国产一级A片在线观看| 西西WWW888大胆无码| 日韩精品免费观看| 玖玖资源在线| 成人123区| 9I成人免费版视频| 日韩不卡一区| 精品人妻一区| 91亚洲精品久久久久蜜桃| 婷婷五月六月| 99精品无码视频| 久久视频免费| 激情婷婷 | 欧美日韩国产一区二区| 亚洲婷婷三级成人网| 高清无码高潮| 午夜AV福利| 日韩AV高清| 在线观看av网站中文字幕| 日韩69视频| 成人黄色性爱视频| 91亚洲精品视频| 丰满人妻一区二区三区视频在线不卡| 大香蕉大香蕉免费网| 无码欧洲| 亚洲精品一区二三区不卡| 香蕉国产AV| 日韩欧美在线一区| 欧美性夜黄A片爽爽免费视频 | 亚洲国产成人va| 国产精品美女在线观看| 国产麻豆三级片| 欧美成人精品欧美一级乱黄| 无码一级A片| 安徽妇搡BBBB搡BBBB按摩| 超碰在线看| 韩国高清无码60.70.80| 国产女人十八水真多| 欧美日韩激情视频| 黃色一级A片一級片| 天堂在线视频免费| 一区二区无码av| 青春草在线视频观看| 91探花足浴店按摩店| 欧美激情一区二区A片成人牛牛| 日本少妇做爱| 黃色一级A片一級片| 麻豆疯狂做受XXXX高潮视频| 91性爱视频在线观看| 黑人人妻黑人ThePorn| 精品视频在线观看| 六十路老熟女码视频| 亚洲一区二区在线视频| 99久久综合| 亚洲91无码精品一区在线播放| 国产成人精品一区二| 狠狠操网站| 精品人妻一区二区乱码一区二区| 91干干| 五月天激情影院| 狠狠躁日日躁夜夜躁A片视频| 中文字幕在线码| 大香伊人中文字幕精品| 人妻japanesewoman| 精品国内视频| 亚洲免费观看高清完整版在va线| 日韩免费在线| 国精品无码一区二区三区在线秋菊 | 人妻av中文无码| 亚洲精品一区二区三区在线观看| 成人精品一区二区三区视频| 国内精品久久久久久久久久变脸| 黄骗免费网站| 91精品婷婷国产| 99久久婷婷国产综合精品| 中文字幕人妻一区| 九热大香蕉| 亚洲午夜成人精品一区二区| 免费看黄片的网站| 在线不卡免费Av| av网站在线播放| 一本色道久久综合无码人妻| 四虎无码丰满人妻| 中文字幕牛牛婷婷| 国产黃色AAA片| 亚洲无人禁区| 三级片免费网址| a国产| 中文字幕一级片| 国内自拍无码| 日本中文字幕在线观看| 免费三级怡红院| 五月天狠狠操| 伊人久久AV诱惑悠悠| jizz日韩| 最近中文字幕免费|