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

問各位小可愛一個問題:MySQL 中 B 樹和 B+ 樹的區別?

數據庫
數據庫要經常和磁盤與內存打交道,為了提升性能,通常需要自己去構建類似文件系統的結構。今天主要來看看數據庫是如何利用磁盤空間設計索引的?

問各位小可愛一個問題:MySQL 中 B 樹和 B+ 樹的區別?

B 樹和 B+ 樹是兩種數據結構,構建了磁盤中的高速索引結構,因此不僅 MySQL 在用,MongoDB、Oracle 等也在用,基本屬于數據庫的標配常規操作。

數據庫要經常和磁盤與內存打交道,為了提升性能,通常需要自己去構建類似文件系統的結構。今天主要來看看數據庫是如何利用磁盤空間設計索引的?

行存儲和列存儲

在學習構建磁盤數據的索引結構前,我們先通過行存儲、列存儲的學習來了解一些基本的存儲概念,幫助你建立一個基本的認知。

目前數據庫存儲一張表格主要是行存儲(Row Storage)和列存儲(Column Storage)兩種存儲方式。行存儲將表格看作一個個記錄,每個記錄是一行。以包含訂單號、金額、下單時間 3 項的表為例,行存儲如下圖所示:

如上圖所示,在計算機中沒有真正的行的概念。行存儲本質就是數據一個接著一個排列,一行數據后面馬上跟著另一行數據。如果訂單表很大,一個磁盤塊(Block)存不下,那么實際上就是每個塊存儲一定的行數。類似下圖這樣的結構:

行存儲更新一行的操作,往往可以在一個塊(Block)中進行。而查詢數據,聚合數據(比如求 4 月份的訂單數),往往需要跨塊(Block)。因此,行存儲優點很明顯,更新快、單條記錄的數據集中,適合事務。但缺點也很明顯,查詢慢。

還有一種表格的存儲方式是列存儲(Column Storage),列存儲中數據是一列一列存的。還以訂單表為例,如下圖所示:

你可以看到訂單號在一起、姓名在一起、時間在一起、金額也在一起——每個列的數據都聚集在一起。乍一看這樣的結構很低效,比如說你想取出第一條訂單,需要取第 1 列的第 1 個數據1001,然后取第 2 列的第 1 個數據小明,以此類推,需要 4 次磁盤讀取。特別是更新某一條記錄的時候,需要更新多處,速度很慢。那么列存儲優勢在哪里呢?

優勢其實是在查詢和聚合運算。

在列存儲中同一列數據總是存放在一起,比如要查找某個時間段,很有可能在一個塊中就可以找到,因為時間是集中存儲的。假設磁盤塊的大小是 4KB,一條記錄是 100 字節, 那么 4KB 可以存 40 條記錄;但是存儲時間戳只需要一個 32 位整數,4KB 可以存儲 1000 個時間。更關鍵的是,我們可以把一片連續的硬盤空間通過 DMA 技術直接映射到內存,這樣就大大減少了搜索需要的時間。所以有時候在行存儲需要幾分鐘的搜索操作,在列存儲中只需幾秒鐘就可以完成。

總結一下,行存儲、列存儲,最終都需要把數據存到磁盤塊。行存儲記錄一個接著一個,列存儲一列接著一列。前面我們提到行存儲適合更新及事務處理,更新好理解,因為一個訂單可以在相同的 Block 中更新,那么為什么適合事務呢?

其實適合不適合是相對的,說行存儲適合是因為列存儲非常不適合事務。試想一下,你更新一個表的若干個數據,如果要在不同塊中更新,就可能產生多次更新操作。更新次數越多,保證一致性越麻煩。在單機環境我們可以上鎖,可以用阻塞隊列,可以用屏障……但是分布式場景中保證一致性(特別是強一致性)開銷很大。因此我們說行存儲適合事務,而列存儲不適合。

索引

接下來,我們在行存儲、列存儲的基礎上,討論如何創建一些更高效的查詢結構,這種結構通常稱為索引。 我們經常會遇到根據一個訂單編號查訂單的情況,比如說select * from order where id=1000000,這個時候就需要用到索引。而下面我將試圖通過二分查找的場景,和你一起討論 索引是什么。

在億級的訂單 ID 中查找某個編號,很容易想到二分查找。要理解二分查找,最需要關心的是算法的進步機制。這個算法每進行一次查找,都會讓問題的規模減半。當然,也有場景限制,二分查找只能應用在排序好的數據上。

比如我們要在下面排序好的數組中查找 3:1,3,5,8,11,12,15,19,21,25

數組中一共有 10 個元素,因此我們第一次查找從數組正中間的元素找起。如果數組正中間有兩個元素,就取左邊的那個——對于這個例子是 11。我們比較 11 和 3 的值,因為 11 大于 3,因此可以排除包括 11 在內的所有 11 右邊的元素。相當于我們通過一次運算將數據的規模減半。假設我們有 240 (1T 數據)個元素需要查詢(規模已經相當大了,萬億級別),用二分查找只需要 40 次運算。

所以按照這個思路,我們需要做的是將數據按照訂單 ID 排好序,查詢的時候就可以應用二分查找了。而且按照二分查找的思路,也可以進行范圍查找。比如要查找 [a,b] 之間的數據,可以先通過二分查找找到 a 的序號,再二分找到 b 的序號,兩個序號之間的數據就是目標結果。

但是直接在原始數據上排序,我們可能會把數據弄亂,常規做法是設計冗余數據描述這種排序關系——這就是索引。下面我通過一個簡單的例子告訴你為什么不能在原始數據上直接排序。

假設我們有一個訂單表,里面有訂單 ID 和金額。使用列存儲做演示如下:

訂單 ID 列:10005 10001 ……

訂單金額列:99.00 100.00 ……

可以看到,訂單(10001)是第 2 個訂單。但是進行排序后,訂單(10001)會到第 1 個位置。這樣會弄亂訂單 ID(10001)和 金額(100.00)對應的關系。

因此我們必須用空間換時間,額外將訂單列拷貝一份排序:10001,2,10005, 1

以上這種專門用來進行數據查詢的額外數據,就是索引。索引中的一個數據,也稱作索引條目。上面的索引條目一個接著一個,每個索引條目是 <訂單 ID, 序號> 的二元組。

如果你考慮是行存儲(比如 MySQL),那么依然可以生成上面的索引,訂單 ID 和序號(行號)關聯。如果有多個索引,就需要創造多個上面的數據結構。如果有復合索引,比如 <訂單狀態、日期、序號> 作為一個索引條目,其實就是先按照訂單狀態,再按照日期排序的索引。

所以復合索引,無非就是多消耗一些空間,排序維度多一些。而且你可以看出復合索引和單列索引完全是獨立關系,所以我們可以認為每創造一組索引,就創造了一份冗余的數據。也創造了一種特別的查詢方式。

接下來,請分析一個非常核心的問題:上面的索引是一個連續的、從小到大的索引,那么應不應該使用這種從小到大排序的索引呢?例如,我們需要查詢訂單,就事先創建另一個根據訂單 ID 從小到大排序的索引,當用戶查找某個訂單的時候,無論是行存儲、還是列存儲,我們就用二分查找查詢對應的索引條目。這種方式,我們姑且稱為線性排序索引——看似很不錯的一個方式,但是并不是非常好的一種做法。

二叉搜索樹

線性排序的數據雖然好用,但是插入新元素的時候性能太低。如果是內存操作,插入一個元素,需要將這個元素之后的所有元素后移一位。但如果這個操作發生在磁盤中呢?這必然是災難性的。因為磁盤的速度比內存慢至少 10-1000 倍,如果是機械硬盤可能慢幾十萬到百萬倍。

所以我們不能用一種線性結構將磁盤排序。那么樹呢?比如二叉搜索樹(Binary Serach Tree)行不行呢?利用磁盤的空間形成一個二叉搜索樹,例如將訂單 ID 作為二叉搜索樹的 Key。

如下圖所示,二叉搜索樹的特點是一個節點的左子樹的所有節點都小于這個節點,右子樹的所有節點都大于這個節點。而且,因為索引條目較少,確實可以考慮在查詢的時候,先將足夠大的樹導入內存,然后再進行搜索。搜索的算法是遞歸的,與二分查找非常類似,每次計算可以將問題規模減半。當然,具體有多少數據可以導入內存,受實際可以使用的內存數量的限制。

在上面的二叉搜索樹中,每個節點的數據分成 Key 和 Value。Key 就是索引值,比如訂單 ID 創建索引,那么 Key 就是訂單 ID。值中至少需要序號(對行存儲也就是行號)。這樣,如果們想找 18 對應的行,就可以先通過二叉搜索樹找到對應的行號,然后再去對應的行讀取數據。

二叉搜索樹是一個天生的二分查找結構,每次查找都可以減少一半的問題規模。而且二叉搜索樹解決了插入新節點的問題,因為二叉搜索樹是一個跳躍結構,不必在內存中連續排列。這樣在插入的時候,新節點可以放在任何位置,不會像線性結構那樣插入一個元素,所有元素都需要向后排列。

那么回到本質問題,在使用磁盤的時候,二叉搜索樹是不是一種合理的查詢結構?

當然還不算,因此還需要繼續優化我們的算法。二叉搜索樹,在內存中是一個高效的數據結構。這是因為內存速度快,不僅可以隨機存取,還可以高頻操作。注意 CPU 緩存的穿透率只有 5% 左右,也就是 95% 的操作是在更快的 CPU 緩存中執行的。而且即便穿透,內存操作也是在納秒級別可以完成。

但是,這個邏輯在磁盤中是不存在的,磁盤的速度慢太多了。我們可以嘗試把盡可能多的二叉搜索樹讀入磁盤,但是如果數據量大,只能讀入一部分呢?因此我們還需要繼續改進算法。

B 樹和 B+ 樹

二叉搜索樹解決了連續結構插入新元素開銷很大的問題,同時又保持著天然的二分結構。但是,當需要索引的數據量很大,無法在一個磁盤 Block 中存下整棵二叉搜索樹的時候。每一次遞歸向下的搜索,實際都是讀取不同的磁盤塊。這個時候二叉搜索樹的開銷很大。

試想一個一萬億條訂單的表,進行 40 次查找找到答案,在內存中不是問題,要考慮到 CPU 緩存有 90% 以上的命中率(當然前提是內存足夠大)。通常情況下我們沒有這么大的內存空間,如果 40 次查找發生在磁盤上,也是非常耗時的。那么有沒有更好的方案呢?

一個更好的方案,就是繼續沿用樹狀結構,利用好磁盤的分塊讓每個節點多一些數據,并且允許子節點也多一些,樹就會更矮。因為樹的高度決定了搜索的次數。

上圖中我們構造的樹被稱為 B 樹(B-Tree),開頭說過,B 這個字母具體是哪個單詞或者人名的縮寫,至今有爭議,具體你可以查查資料。

B-Tree 是一種遞歸的搜索結構,與二叉搜索樹非常類似。不同的是,B 樹中的父節點中的數據會對子樹進行區段分割。比如上圖中節點 1 有 3 個子節點,并用數字 9,30 對子樹的區間進行了劃分。

上圖中的 B 樹是一個 3-4 B 樹,3 指的是每個非葉子節點允許最大 3 個索引,4 指的是每個節點最多允許 4 個子節點,4 也指每個葉子節點可以存 4 個索引。上面只是一個例子,在實際的操作中,子節點有幾十個、甚至上百個索引也很常見,因為我們希望樹變矮,好減少磁盤操作。

B 樹的每個節點是一個索引條目(例如:一個 <訂單 ID,序號> 的組合),如果是行數據庫可以索引到一條存儲在磁盤上的記錄。

繼承 B 樹:B+ 樹

為了達到最高的效率,實戰中我們往往使用的是一種繼承于 B 樹設計的結構,稱為 B+ 樹。B+ 樹只有葉子節點才映射數據,下圖中是對 B 樹設計的一種改進,節點 1 為冗余節點,它不存儲數據,只劃定子樹數據的范圍。你可以看到節點 1 的索引 Key:12 和 30,在節點 3 和 4 中也有一份。

樹的形成:插入

下面我以一棵 2-3 B+ 樹來演示 B+ 樹的插入過程。2 指的是 B+ 樹每個非葉子節點允許 2 個數據,葉子節點最多允許 3 個索引,每個節點允許最多 3 個子節點。我們要在 2-3 B+ 樹中依次插入 3,6,9,12,19,15,26,8,30。

插入 3,6,9 過程很簡單,都寫入一個節點即可,因為葉子節點最多允許每個 3 個索引。

接下來我們插入 12,會發生一次過載,然后節點就需要拆分,這個時候按照 B+ 樹的設計會產生冗余節點。

然后插入 15 非常簡單,直接加入即可:

接下來插入 19, 這個時候下圖中紅色部分發生過載:

因此需要拆分節點數據,我們從中間把紅色的節點拆開,15 作為冗余的索引寫入父節點,就形成下圖的情況:

接著插入 26, 寫入到對應位置即可。

接下來,插入 8 到對應位置即可。

然后我們插入 30,此時右邊節點發生過載:

解決完一次過載問題之后,因為 26 會浮上去,根節點又發生了過載:

再次解決過載,拆分紅色部分,得到最后結果:

在上述過程中,B+ 樹始終可以保持平衡狀態,而且所有葉子節點都在同一層級。更復雜的數學證明,我就不在這里講解了。

插入和刪除效率

B+ 樹有大量的冗余節點,比如刪除一個節點的時候,可以直接從葉子節點中刪除,甚至可以不動非葉子節點。這樣刪除非常快。B 樹則不同,B 樹沒有冗余節點,刪除節點的時候非常復雜。比如刪除根節點中的數據,可能涉及復雜的樹的變形。

B+ 樹的插入也是一樣,有冗余節點,插入可能存在節點的拆分(如果節點飽和),但是最多只涉及樹的一條路徑。而且 B+ 樹會自動平衡,不需要更多復雜的算法,類似紅黑樹的旋轉操作等。

因此,B+ 樹的插入和刪除效率更高。

搜索:鏈表的作用

B 樹和 B+ 樹搜索原理基本一致。先從根節點查找,然后對比目標數據的范圍,最后遞歸的進入子節點查找。

你可能會注意到,B+ 樹所有葉子節點間還有一個鏈表進行連接。這種設計對范圍查找非常有幫助,比如說我們想知道 1 月 20 日和 1 月 22 日之間的訂單,這個時候可以先查找到 1 月 20 日所在的葉子節點,然后利用鏈表向右遍歷,直到找到 1 月22 日的節點。這樣我們就進一步節省搜索需要的時間。

總結

這一講我們學習了在數據庫中如何利用文件系統造索引。無論是行存儲還是列存儲,構造索引的過程都是類似的。索引有很多做法,除了 B+ 樹,還有 HashTable、倒排表等。如果是存儲海量數據的數據庫,我們的思考點需要放在 I/O 的效率上。如果把今天的知識放到分布式數據庫上,那除了需要節省磁盤讀寫還需要節省網絡 I/O。

好了,現在回到文章的開頭:MySQL 中的 B 樹和 B+ 樹有什么區別?

【解析】B+ 樹繼承于 B 樹,都限定了節點中數據數目和子節點的數目。B 樹所有節點都可以映射數據,B+ 樹只有葉子節點可以映射數據。

單獨看這部分設計,看不出 B+ 樹的優勢。為了只有葉子節點可以映射數據,B+ 樹創造了很多冗余的索引(所有非葉子節點都是冗余索引),這些冗余索引讓 B+ 樹在插入、刪除的效率都更高,而且可以自動平衡,因此 B+ 樹的所有葉子節點總是在一個層級上。所以 B+ 樹可以用一條鏈表串聯所有的葉子節點,也就是索引數據,這讓 B+ 樹的范圍查找和聚合運算更快。

責任編輯:趙寧寧 來源: 技術老男孩
相關推薦

2019-08-29 10:46:22

MySQL索引數據庫

2020-04-01 18:08:57

MySQL B-樹B+樹

2021-12-14 17:19:15

存儲數據

2019-09-24 09:33:53

MySQLB+樹InnoDB

2019-01-29 19:43:10

MySQL索引數據庫

2021-02-16 16:38:41

MySQLB+樹索引

2023-08-29 08:31:13

B+樹數據索引

2021-05-19 09:51:31

MySQL-B+樹數據

2023-07-31 09:12:39

B+樹節點B+Tree

2019-09-19 14:03:32

B樹節點數據結構

2020-02-12 19:01:22

索引B-樹B+樹

2022-03-28 08:24:52

MySQL聚簇索引非聚簇索引

2021-04-19 10:03:33

MongoDbB 樹 B+ 樹

2024-11-19 08:40:18

2021-06-04 07:55:05

MySQLB+ 樹數據

2023-09-27 09:39:08

Java優化

2019-11-26 15:12:08

數據存儲B+樹

2025-11-03 16:30:44

2024-05-22 09:01:53

InnoDBB+索引

2019-03-14 09:51:50

MySQL存儲邏輯架構
點贊
收藏

51CTO技術棧公眾號

亚洲偷熟乱区亚洲香蕉av| www.日韩在线| 欧美精品免费看| 无码人妻丰满熟妇啪啪网站| 91麻豆一二三四在线| 国产一二精品视频| 97香蕉久久超级碰碰高清版| 亚洲精品成人无码| 成人国产精品久久| 五月天婷婷综合| 手机在线观看国产精品| 精品国精品国产自在久不卡| 中日韩视频在线观看| 永久免费毛片在线播放不卡 | 欧洲一级黄色片| jizzyou欧美16| 亚洲在线视频一区| 色一情一乱一伦一区二区三区丨| 99久久一区二区| 亚洲影视综合| 久久69精品久久久久久国产越南| 在线不卡av电影| 日韩高清一区| 在线观看日韩一区| 被灌满精子的波多野结衣| 99re热久久这里只有精品34| 波多野结衣一区二区三区| 成人黄色av网站| www.国产一区二区| 国产97色在线 | 日韩| 波多野结衣家庭主妇| 亚洲一级高清| 久久天天躁狠狠躁夜夜av| asian性开放少妇pics| 91精品尤物| 欧美一区二区三区播放老司机| 99久久久无码国产精品6| 久久香蕉一区| 亚洲老司机在线| 亚洲高清在线观看一区| 五月婷婷久久久| 成人免费观看男女羞羞视频| 亚洲r级在线观看| 中文字幕av久久爽| 日本午夜一本久久久综合| 欧美有码在线观看| 国产精品自拍视频一区| 欧美一区二区三区久久精品| 日韩小视频网址| 精品婷婷色一区二区三区蜜桃| 午夜免费福利视频在线观看| 黄色在线网站噜噜噜| 亚洲综合免费观看高清完整版| 中国成人在线视频| 日本不卡视频| 中文字幕亚洲欧美在线不卡| 亚洲最大免费| 免费黄网站在线播放| 中文字幕一区二区三区精华液 | 污网站免费在线| 日本高清不卡一区二区三区视频 | 91成人短视频| 日韩欧美不卡一区| 精品无码av一区二区三区不卡| 在线视频成人| 日韩亚洲欧美综合| 亚洲精品国偷自产在线99热| 日本一本草久p| 麻豆传媒在线免费看| 中文字幕一区二区三区乱码在线| 一区在线电影| 三级资源在线| 午夜精品一区二区三区电影天堂 | 九九九视频在线观看| 精品日韩在线| 中文字幕在线观看日韩| 69夜色精品国产69乱| 亚洲经典一区| 久久久视频在线| 欧美黑人一区二区| 日本亚洲最大的色成网站www| 国产免费一区视频观看免费| 国产精品自拍电影| 不卡电影免费在线播放一区| 鲁丝一区二区三区免费| 福利在线午夜| 秋霞午夜一区二区三区视频| 国产一区欧美一区| 99久re热视频这里只有精品6| 亚洲免费视频网| 国产成a人亚洲| 久久久久资源| 麻豆传媒在线完整视频| 亚洲成人激情av| 日韩精品免费播放| 疯狂欧洲av久久成人av电影| 精品精品国产高清a毛片牛牛 | 久久久性生活视频| 自拍视频在线看| 777亚洲妇女| 大尺度做爰床戏呻吟舒畅| 欧美伦理影院| 欧美精品18videos性欧| 成人毛片一区二区三区| 国产精品一区在线观看你懂的| 极品尤物一区二区三区| 秋霞影院午夜丰满少妇在线视频| 亚洲国产中文字幕在线视频综合| 自拍偷拍 国产| 国产精品超碰| 久久精品视频99| 日本网站免费观看| 久草这里只有精品视频| 精品视频高清无人区区二区三区| 国产91porn| 无码精品人妻一区二区| 国产精品视频看| 欧美一区二区三区爽大粗免费| 欧美亚洲黄色| 亚洲人成免费电影| 国产无码精品在线观看| 久久99久久精品| 欧美激情一区二区三区在线视频 | 精品一区亚洲| 欧美精品18videos性欧美| 亚洲天堂手机版| 91丝袜美腿高跟国产极品老师| 国产树林野战在线播放| 小黄鸭精品aⅴ导航网站入口| 日韩欧美国产综合一区| 中文字幕第69页| 亚洲欧美日韩在线观看a三区| 91视频婷婷| 精产国品自在线www| 一本久久综合亚洲鲁鲁五月天 | 欧美午夜性视频| 欧美视频二区欧美影视| 久久国产一区二区三区| 日本免费精品视频| 91丨九色丨蝌蚪富婆spa| 日韩精品久久一区二区| 精品这里只有精品| av在线播放网| 日本韩国欧美在线| 自拍偷拍中文字幕| 久久国产主播| 美乳视频一区二区| 欧美三级网站| 日韩高清免费在线| 国产精品久久久免费视频| 成人午夜在线播放| 99久久免费观看| 日韩影片在线观看| 欧美国产日本高清在线| 国产成人av免费看| 一个色妞综合视频在线观看| 久久无码人妻一区二区三区| 亚洲精品国产成人影院| 亚洲在线免费观看| 羞羞的视频在线看| 精品国精品国产尤物美女| 麻豆亚洲av熟女国产一区二| 国产一区二区三区不卡在线观看 | 亚洲一区二区三区在线| 99久久精品无码一区二区毛片| 在线观看av的网站| 欧美片在线播放| 内射一区二区三区| 国产激情91久久精品导航| 大胆欧美熟妇xx| 老司机精品在线| 国产成人精品电影| 好了av在线| 精品粉嫩超白一线天av| 精品美女久久久久| 久久久精品综合| 色噜噜狠狠永久免费| 亚洲精品电影| 精品无人区一区二区三区竹菊| 涩涩视频网站在线观看| 一本色道久久88亚洲综合88| 国产精品久久久久久久免费| 一区二区三区精品视频在线| 日本黄色动态图| 热久久免费视频| 91精品国产毛片武则天| 女同另类激情重口| 国产精品专区h在线观看| 日本在线观看高清完整版| 亚洲国产日韩欧美综合久久 | 欧美三级日韩三级国产三级| 无遮挡亚洲一区| 日本最新中文字幕| 成人免费视频app| 男人透女人免费视频| 国产精品伦理久久久久久| 国产精品手机在线| 三级成人在线| 欧美另类高清videos| 你懂的视频在线| 91精品国产综合久久福利| 国产 欧美 日韩 在线| 中文字幕久久午夜不卡| 日本美女视频网站| 蜜桃视频一区二区三区在线观看 | 少妇大叫太粗太大爽一区二区| 蜜桃久久久久久| 日韩特黄一级片| 成人av手机在线观看| 国产一级片黄色| 精品不卡视频| 亚洲国产精品一区在线观看不卡 | 成人在线网址| 亚洲免费视频一区二区| 国产偷久久久精品专区| 精品乱码一区二区三四区视频| 91精品国产综合久久久蜜臀粉嫩| 免费观看一区二区三区毛片| 亚洲视频你懂的| 西西444www无码大胆| 成人一区二区视频| 午夜天堂在线视频| 日韩国产欧美在线观看| 少妇高潮毛片色欲ava片| 91精品精品| 日韩精品第一页| 青青操综合网| 国产福利不卡| 精品一区二区三区在线观看视频| 国产精品高清免费在线观看| 免费毛片b在线观看| 欧美丰满少妇xxxxx| 免费网站免费进入在线| 伊人久久大香线蕉av一区二区| 天天干,夜夜操| 精品乱人伦小说| 国产强被迫伦姧在线观看无码| 欧美视频日韩视频在线观看| 青青草免费观看视频| 亚洲成人av电影| 日韩精品无码一区二区| 亚洲自拍偷拍九九九| 久久精品视频免费在线观看| 1000精品久久久久久久久| 1024在线看片| 欧美国产禁国产网站cc| 欧美日韩在线观看一区二区三区 | 久久伦理在线| 午夜精品一区二区在线观看 | 亚洲人成在线播放| 日韩二区三区| 亚洲精品一区中文字幕乱码| 头脑特工队2在线播放| 日韩av在线网| 日韩一二三四| 亚洲欧洲高清在线| 国产特黄在线| 中文字幕日韩欧美| 激情视频在线观看| 欧美大片免费观看在线观看网站推荐| av网站大全在线| 欧美日韩国产二区| 成人性生交大片免费看网站| 欧美精品精品精品精品免费| 好看的中文字幕在线播放| 国模gogo一区二区大胆私拍| 日本а中文在线天堂| 日韩av手机在线| 成人1区2区| 亚洲永久在线观看| 99精品免费观看| 翔田千里一区二区| 97视频久久久| 久久视频一区| 日本国产一级片| 顶级嫩模精品视频在线看| 欧美xxxxx精品| 国产丝袜欧美中文另类| 国产精品免费人成网站酒店| 一区二区三区成人| 中文字幕视频网| 欧美年轻男男videosbes| 亚洲欧美国产高清va在线播放| 亚洲国产精品美女| 成人精品一区二区三区校园激情| 中文字幕亚洲欧美一区二区三区 | 性亚洲最疯狂xxxx高清| 欧美人体一区二区三区| 国产一区二区丝袜| 懂色av一区二区| 日韩尤物视频| 国产精品hd| 九九九在线观看视频| 国产精品伊人色| 免费一级做a爰片久久毛片潮| 国产精品全国免费观看高清| 青青青在线视频| 在线观看精品一区| 亚洲精品久久久久久无码色欲四季 | 久久久久高清精品| 99自拍视频在线| 欧美日韩亚洲91| 国产毛片一区二区三区va在线| 亚洲精品xxxx| 麻豆tv在线| 欧美在线视频a| 九色精品蝌蚪| 午夜精品亚洲一区二区三区嫩草 | 日韩视频免费在线播放| 国产91精品在线观看| 精品成人无码一区二区三区| 一区二区三区不卡视频在线观看| 男人天堂2024| 亚洲国产精品成人va在线观看| 欧美一区二区三区| 日本午夜在线亚洲.国产| www.豆豆成人网.com| 亚洲一区二三| 丝瓜av网站精品一区二区 | 粉嫩久久久久久久极品| 久久久久综合网| a一级免费视频| 色乱码一区二区三区88| 亚洲美女性生活| 久久久精品久久久久| 欧美与亚洲与日本直播| 久久综合伊人77777麻豆| 激情综合久久| 亚洲三级在线视频| |精品福利一区二区三区| 99re热视频| 亚洲色图15p| 亚洲精品日产| 精品乱码一区二区三区| 精久久久久久| 国产精品久久久久久在线观看| 亚洲色图20p| 国产精品一区二区av白丝下载| 伊人亚洲福利一区二区三区| 在线女人免费视频| 精品一区久久久| 99这里有精品| 三级视频网站在线观看| 亚洲国产精品久久人人爱蜜臀| aaa一区二区| 欧美成人免费全部| а天堂中文最新一区二区三区| 先锋影音一区二区三区| 日韩av电影天堂| 东京热无码av男人的天堂| 在线观看精品一区| 波多野结衣一区二区| 国产精品精品国产| 日本不卡一区视频| av毛片久久久久**hd| 久久久久久久久久99| 欧美不卡视频一区| 7777kkk亚洲综合欧美网站| 国产精品国产一区二区| 亚洲日本视频| 一级性生活大片| 欧美少妇性性性| 成人免费观看视频大全| 91福利视频导航| 国产精品vip| 给我看免费高清在线观看| 欧美午夜精品久久久久久人妖 | 中文字幕亚洲在线| 精品国产亚洲一区二区三区| 亚洲五码在线观看视频| 丁香婷婷综合五月| 久久久久久久久久久久久av| 国产亚洲精品一区二555| 日日狠狠久久| 成人免费看片'免费看| 91丨九色丨蝌蚪丨老版| 真实新婚偷拍xxxxx| 久久国产精品久久久久久久久久| julia中文字幕一区二区99在线| 成人在线免费在线观看| 中文字幕第一区综合| www.看毛片| 欧美性视频在线| 国产精品7m凸凹视频分类| 国产ts在线观看| 色婷婷综合久色| 日韩成人一区二区三区| 久久aⅴ国产紧身牛仔裤| www日韩在线观看| 亚洲欧美一区二区三区孕妇| 色哟哟中文字幕| 国产精品日韩专区| 影音先锋一区| 亚洲熟女少妇一区二区| 亚洲成人性视频| 久久亚洲国产精品尤物| 成人黄色av片| 中文字幕在线免费不卡| 香蕉久久一区二区三区| 成人免费看吃奶视频网站|