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

拜托,別再問我什么是B+樹 了

開發 前端
每當我們執行某個 SQL 發現很慢時,都會下意識地反應是否加了索引,那么大家是否有想過加了索引為啥會使數據查找更快呢,索引的底層一般又是用什么結構存儲的呢,相信大家看了標題已經有答案了,沒錯!B+樹!那么它相對于一般的鏈表,哈希等有何不同,為何多數存儲引擎都選擇使用它呢,今天我就來揭開 B+ 樹的面紗,相信看了此文,B+ 樹不再神秘

 [[320389]]

前言

每當我們執行某個 SQL 發現很慢時,都會下意識地反應是否加了索引,那么大家是否有想過加了索引為啥會使數據查找更快呢,索引的底層一般又是用什么結構存儲的呢,相信大家看了標題已經有答案了,沒錯!B+樹!那么它相對于一般的鏈表,哈希等有何不同,為何多數存儲引擎都選擇使用它呢,今天我就來揭開 B+ 樹的面紗,相信看了此文,B+ 樹不再神秘,對你理解以下高頻面試題會大有幫助!

  • 為啥索引常用 B+ 樹作為底層的數據結構
  • 除了 B+ 樹索引,你還知道什么索引
  • 為啥推薦自增 id 作為主鍵,自建主鍵不行嗎
  • 什么是頁分裂,頁合并
  • 怎么根據索引查找行記錄

本文將會從以下幾個方面來講解 B+ 樹

  • 定義問題
  • 幾種常見的數據結構對比
  • 頁分裂與頁合并

定義問題

要知道索引底層為啥使用 B+ 樹,得看它解決了什么問題,我們可以想想,日常我們用到的比較多的 SQL 有哪些呢。

假設我們有一張以下的用戶表:

 

  1. CREATE  TABLE  `user` ( 
  2.   `id` int(11) unsigned  NOT  NULL AUTO_INCREMENT, 
  3.   `namevarchar(20) DEFAULT  NULL COMMENT '姓名'
  4.   `idcard` varchar(20) DEFAULT  NULL COMMENT '身份證號碼'
  5.   `age` tinyint(10) DEFAULT  NULL  COMMENT '年齡'
  6.   PRIMARY KEY (`id`) 
  7. ) ENGINE=InnoDB  DEFAULT  CHARSET=utf8 COMMENT='用戶信息'

一般我們會有如下需求:

1、根據用戶 id 查用戶信息

 

  1. select * from  user  where  id = 123; 

2、根據區間值來查找用戶信息

 

  1. select * from  user  where  id > 123  and  id < 234; 

3、按 id 逆序排列,分頁取出用戶信息

 

  1. select * from  user  where  id <  1234  order  by  id  desc  limit  10; 

從以上的幾個常用 SQL 我們可以看到索引所用的數據結構必須滿足以下三個條件

  1. 根據某個值精確快速查找
  2. 根據區間值的上下限來快速查找此區間的數據
  3. 索引值需要排好序,并支持快速順序查找和逆序查找

接下來我們以主鍵索引(id 索引)為例來看看如何用相應的數據結構來構造它

幾種常見的數據結構對比

接下來我們想想有哪些數據結構滿足以上的條件

1、散列表

散列表(也稱哈希表)是根據關鍵碼值(Key value)而直接進行訪問的數據結構,它讓碼值經過哈希函數的轉換映射到散列表對應的位置上,查找效率非常高。哈希索引就是基于散列表實現的,假設我們對名字建立了哈希索引,則查找過程如下圖所示:

 

 

 

 

對于每一行數據,存儲引擎都會對所有的索引列(上圖中的 name 列)計算一個哈希碼(上圖散列表的位置),散列表里的每個元素指向數據行的指針,由于索引自身只存儲對應的哈希值,所以索引的結構十分緊湊,這讓哈希索引查找速度非常快!但是哈希索引也有它的劣勢,如下:

  1. 針對哈希索引,只有精確匹配索引所有列的查詢才有效,比如我在列(A,B)上建立了哈希索引,如果只查詢數據列 A,則無法使用該索引。
  2. 哈希索引并不是按照索引值順序存存儲的,所以也就無法用于排序,也就是說無法根據區間快速查找
  3. 哈希索引只包含哈希值和行指針,不存儲字段值,所以不能使用索引中的值來避免讀取行,不過,由于哈希索引多數是在內存中完成的,大部分情況下這一點不是問題
  4. 哈希索引只支持等值比較查詢,包括 =,IN(),不支持任何范圍的查找,如 age > 17

綜上所述,哈希索引只適用于特定場合, 如果用得對,確實能再帶來很大的性能提升,如在 InnoDB 引擎中,有一種特殊的功能叫「自適應哈希索引」,如果 InnoDB 注意到某些索引列值被頻繁使用時,它會在內存基于 B+ 樹索引之上再創建一個哈希索引,這樣就能讓 B+樹也具有哈希索引的優點,比如快速的哈希查找。

2、鏈表

雙向鏈表支持順序查找和逆序查找,如圖下

 

 

 

 

但顯然不支持我們說的按某個值或區間的快速查找,另外我們知道表中的數據是要不斷增加的,索引也是要及時插入更新的,鏈表顯然也不支持數據的快速插入,所以能否在鏈表的基礎上改造一下,讓它支持快速查找,更新,刪除。有一種結構剛好能滿足我們的需求,這里引入跳表的概念。

什么是跳表?簡單地說,跳表是在鏈表之上加上多層索引構成的。如下圖所示

 

 

 

 

假設我們現在要查找區間 7- 13 的記錄,再也不用從頭開始查找了,只要在上圖中的二級索引開始找即可,遍歷三次即可找到鏈表的區間位置,時間復雜度是 O(logn),非常快,這樣看來,跳表是能滿足我們的需求的,實際上它的結構已經和 B+ 樹非常接近了,只不過 B+ 樹是從平衡二叉查找樹演化而來的而已,接下來我們一步步來看下如何將平衡二叉查找樹改造成 B+ 樹。

先來看看什么是平衡二叉查找樹,平衡二叉查找樹具有如下性質:

  1. 若左子樹不空,則左子樹上所有節點的值均小于它的根節點的值;
  2. 若右子樹不空,則右子樹上所有節點的值均大于或等于它的根節點的值;
  3. 每個非葉子節點的左右子樹的高度之差的絕對值(平衡因子)最多為1。

下圖就是一顆平衡二叉查找樹

 

 

 

 

從其特性就可以看到平衡二叉查找樹查找節點的時間復雜度是 O(log2n)

現在我們將其改造成 B+ 樹

 

 

 

 

可以看到主要區別就是所有的節點值都在最后葉節點上用雙向鏈表連接在了一起,仔細和跳表對比一下 ,是不是很像,現在如果我們要找15 ~ 27 這個區間的數只要先找到 15 這個節點(時間復雜度 logn = 3 次)再從前往后遍歷直到 27 這個節點即可,即可找到這區間的節點,這樣它完美地支持了我們提的三個需求:快速查找值,區間,順序逆序查找。

假設有 1 億個節點,每個節點要查詢多少次呢,顯然最多為 log21億 = 27 次,如果這 1 億個節點都在內存里,那 27 次顯然不是問題,可以說是非??炝?,但一個新的問題出現了,這 1 億個節點在內存大小是多少呢,我們簡單算一下,假設每個節點 16 byte,則 1 億個節點大概要占用 1.5G 內存!對于內存這么寶貴的資源來說是非常可怕的空間消耗,這還只是一個索引,一般我們都會在表中定義多個索引,或者庫中定義多張表,這樣的話內存很快就爆滿了!所以在內存中完全裝載一個 B+ 樹索引顯然是有問題的,如何解決呢。

內存放不下, 我們可以把它放到磁盤嘛,磁盤空間比內存大多了,但新的問題又來了,我們知道內存與磁盤的讀取速度相差太大了,通常內存是納秒級的,而磁盤是毫秒級的,讀取同樣大小的數據,兩者可能相差上萬倍,于是上一步我們計算的 27 次查詢如果放在磁盤中來看就非常要命了(查找一個節點可以認為是一次磁盤 IO,也就是說有 27 次磁盤 IO!),27 次查詢是否可以優化?

可以很明顯地觀察到查詢次數和樹高有關,那樹高和什么有關,很明顯和每個節點的子節點個數有關,即 N 叉樹中的 N,假設現在有 16 個數,我們分別用二叉樹和五叉樹來構建,看下樹高分別是多少

 

 

 

 

可以看到如果用二叉樹 ,要遍歷 5 個節點,如果用五叉樹 ,只要遍歷 3 次,一下少了兩次磁盤 IO,回過頭來看 上文的一億個節點,如果我們用 100 叉樹來構建,需要幾次 IO 呢

 

 

 

 

可以看到,最多遍歷五次(實際上根節點一般存在內存里的,所以可以認為是 4 次)!磁盤 IO 一下從 27 減少到了 5!性能可以說是大大提升了,有人說 5 次還是太多,是不是可以把 100 叉樹改成 1000 或 10000 叉樹呢,這樣 IO 次數不就就能進一步減少了。

這里我們就需要了解頁(page)的概念,在計算機里,無論是內存還是磁盤,操作系統都是按頁的大小進行讀取的(頁大小通常為 4 kb),磁盤每次讀取都會預讀,會提前將連續的數據讀入內存中,這樣就避免了多次 IO,這就是計算機中有名的局部性原理,即我用到一塊數據,很大可能這塊數據附近的數據也會被用到,干脆一起加載,省得多次 IO 拖慢速度, 這個連續數據有多大呢,必須是操作系統頁大小的整數倍,這個連續數據就是 MySQL 的頁,默認值為 16 KB,也就是說對于 B+ 樹的節點,最好設置成頁的大小(16 KB),這樣一個 B+ 樹上的節點就只會有一次 IO 讀。

那有人就會問了,這個頁大小是不是越大越好呢,設置大一點,節點可容納的數據就越多,樹高越小,IO 不就越小了嗎,這里要注意,頁大小并不是越大越好,InnoDB 是通過內存中的緩存池(pool buffer)來管理從磁盤中讀取的頁數據的。頁太大的話,很快就把這個緩存池撐滿了,可能會造成頁在內存與磁盤間頻繁換入換出,影響性能。

通過以上分析,相信我們不難猜測出 N 叉樹中的 N 該怎么設置了,只要選的時候盡量保證每個節點的大小等于一個頁(16kb)的大小即可。

頁分裂與頁合并

現在我們來看看開頭的問題, 為啥推薦自增 id 作為主鍵,自建主鍵不行嗎,有人可能會說用戶的身份證是唯一的,可以用它來做主鍵,假設以身份證作主鍵,會有什么問題呢。

B+ 樹為了維護索引的有序性,每插入或更新一條記錄的時候,會對索引進行更新。假設原來基于身份證作索引的 B+ 樹如下(假設為二叉樹 ,圖中只列出了身份證的前四位)

 

 

 

 

現在有一個開頭是 3604 的身份證對應的記錄插入 db ,此時要更新索引,按排序來更新的話,顯然這個 3604 的身份證號應該插到左邊節點 3504 后面(如下圖示,假設為二叉樹)

 

 

 

 

如果把 3604 這個身份證號插入到 3504 后面的話,這個節點的元素個數就有 3 個了,顯然不符合二叉樹的條件,此時就會造成頁分裂,就需要調整這個節點以讓它符合二叉樹的條件

 

 

 

 

如圖示:調整過后符合二叉樹條件

這種由于頁分裂造成的調整必然導致性能的下降,尤其是以身份證作為主鍵的話,由于身份證的隨機性,必然造成大量的隨機結點中的插入,進而造成大量的頁分裂,進而造成性能的急劇下降,那如果是以自增 id 作為主鍵呢,由于新插入的表中生成的 id 比索引中所有的值都大,所以它要么合到已存在的節點(元素個數未滿)中,要么放入新建的節點中(如下圖示)所以如果是以自增 id 作為主鍵,就不存在頁分裂的問題了,推薦!

 

 

 

 

有頁分裂就必然有頁合并,什么時候會發生頁合并呢,當刪除表記錄的時候,索引也要刪除,此時就有可能發生頁合并,如圖示

 

 

 

 

當我們刪除 id 為 7,9 對應行的時候,上圖中的索引就要更新,把 7,9 刪掉,此時 8,10 就應該合到一個節點,不然 8,10 分散在兩個節點上,可能造成兩次 IO 讀,勢必會影響查找效率! 那什么時候會發生頁合并呢,我們可以定個閾值,比如對于 N 叉樹來說,當節點的個數小于 N/2 的時候就應該和附近的節點合并,不過需要注意的是合并后節點里的元素大小可能會超過 N,造成頁分裂,需要再對父節點等進行調整以讓它滿足 N 叉樹的條件。

怎么根據索引查找行記錄

相信大家看完以上的 B+ 樹索引的介紹應該還有個疑惑,怎么根據對應的索引值查找行記錄呢,其實相應的行記錄就放在最后的葉子節點中,找到了索引值,也就找到了行記錄。如圖示

 

 

 

 

可以看到,非葉子節點只存了索引值,只在最后一行才存放了行記錄,這樣極大地減小了索引了大小,而且只要找到索引值就找到了行記錄,也提升了效率,

這種在葉節點存放一整行記錄的索引被稱為聚簇索引,其他的就稱為非聚簇索引。

關于 B+ 樹的總結

綜上所述,B+樹有以下特點:

  • 每個節點中子節點的個數不能超過 N,也不能小于 N/2(不然會造成頁分裂或頁合并)
  • 根節點的子節點個數可以不超過 m/2,這是一個例外
  • m 叉樹只存儲索引,并不真正存儲數據,只有最后一行的葉子節點存儲行數據。
  • 通過鏈表將葉子節點串聯在一起,這樣可以方便按區間查找

總結

本文由日常中常用的 SQL 由淺入深地總結了 B+ 樹的特點,相信大家應該對 B+ 樹索引有了比較清晰地認識,所以說為啥我們要掌握底層原來,學完了 B+ 樹,再看開頭提的幾個問題,其實也不過如此,深挖底層,有時候確實能讓你以不變應萬變。

責任編輯:武曉燕 來源: 碼海
相關推薦

2018-09-28 05:25:53

TopK算法代碼

2020-04-22 11:19:07

貪心算法動態規劃

2018-10-28 22:37:00

計數排序排序面試

2018-11-01 13:49:23

桶排序排序面試

2021-01-22 10:09:23

簡歷求職者面試

2018-11-06 11:40:19

時間復雜度面試算法

2020-09-02 08:04:59

多線程互聯網高并發

2019-04-16 13:30:05

表達式求值數據結構算法

2015-02-13 10:42:31

前端工具Dreamweaver

2020-12-11 09:24:19

Elasticsear存儲數據

2019-01-08 15:11:50

最大值最小值算法

2020-09-24 14:40:55

Python 開發編程語言

2020-04-16 08:22:11

HTTPS加解密協議

2022-03-14 10:14:43

底層系統Nacos

2018-11-09 09:34:05

面試Spring Clou底層

2023-07-31 09:12:39

B+樹節點B+Tree

2019-08-29 09:49:50

2019-12-17 09:29:02

數據庫架構分庫分表

2019-07-10 10:06:24

面試官三次握手四次揮手

2019-09-24 09:33:53

MySQLB+樹InnoDB
點贊
收藏

51CTO技術棧公眾號

综合视频一区| 一色桃子av在线| 日韩精品亚洲专区| 深夜成人在线观看| 天堂av在线8| 成视频免费观看在线看| 成人v精品蜜桃久久一区| 欧美一区二区大胆人体摄影专业网站| 免费视频91蜜桃| 天堂精品在线视频| 一本一道综合狠狠老| 最近中文字幕免费mv| 日日夜夜精品免费| 精品一区二区三区视频| 欧美一区二区.| 亚洲熟女www一区二区三区| 久久久久97| 欧美日韩日本视频| 男人日女人逼逼| 色视频在线免费观看| www.99精品| 91在线网站视频| 男女视频免费看| 欧美 日韩 国产一区二区在线视频 | 中文字幕亚洲天堂| 妖精视频在线观看| 欧美性aaa| 色综合天天性综合| 三年中国中文在线观看免费播放| 三级在线播放| 成人在线一区二区三区| 国产精品亚洲综合天堂夜夜| 欧美日韩亚洲一二三| 精品无码在线观看| 91成人福利| 欧美日韩午夜在线| 日韩网址在线观看| 97蜜桃久久| 亚洲激情网站免费观看| 先锋影音欧美| 免费动漫网站在线观看| kk眼镜猥琐国模调教系列一区二区 | 国产99精品一区| 精品国产青草久久久久福利| 2025韩国理伦片在线观看| 成人影院在线视频| 亚洲一区免费在线观看| 亚洲小视频在线播放| 日韩理伦片在线| 国产片一区二区三区| 精品在线观看一区二区| 高h调教冰块play男男双性文| 日本美女高清在线观看免费| 国产欧美亚洲精品a| 精品国产乱码久久久久久老虎| 999在线观看| 成人黄色视屏网站| 欧美综合亚洲图片综合区| 99精品视频播放| 自拍网站在线观看| 色婷婷综合久久久久中文| 欧美激情国产精品日韩| 88xx成人永久免费观看| 色就色 综合激情| 在线免费视频a| 日韩经典一区| 9191成人精品久久| 国产999免费视频| 51社区在线成人免费视频| 欧美不卡激情三级在线观看| 中文字幕在线视频播放| 久久综合另类图片小说| 日韩av最新在线观看| 美国黄色一级毛片| 欧美伦理在线视频| 久久精品亚洲一区| 欧美精品一级片| 极品中文字幕一区| 欧美中在线观看| 小泽玛利亚一区二区三区视频| 喷白浆一区二区| 91精品在线观看视频| 超碰在线播放97| 91热门视频在线观看| 色综合久久av| 日本视频在线播放| 亚洲国产精品久久久久秋霞影院| 97国产精东麻豆人妻电影| 国产极品久久久久久久久波多结野| 欧美高清视频www夜色资源网| 国产色视频在线播放| aaa国产精品| 亚洲美女性生活视频| 久久av红桃一区二区禁漫| 欧美国产高清| 欧美性受xxx| 在线观看日批视频| 成人精品视频一区二区三区| 热re99久久精品国99热蜜月| 高潮毛片在线观看| 欧美日韩中文字幕在线视频| 国产熟人av一二三区| 九九九九九九精品任你躁| 日韩福利视频在线观看| 国精产品久拍自产在线网站| 亚洲裸体俱乐部裸体舞表演av| 国产精品久久不能| 免费av一级片| 一区二区中文字幕在线| 国产黄页在线观看| 国产一区二区三区黄网站| 亚洲乱码一区av黑人高潮| 一区二区成人免费视频| 久久精品30| 国产高清精品一区二区| 91在线视频| 欧美午夜电影在线| 国产精品欧美性爱| 色呦哟—国产精品| 日韩免费精品视频| 免费观看国产视频| 一区二区三区中文字幕精品精品| 少妇性l交大片| 欧美福利在线播放网址导航| 另类图片亚洲另类| 中文有码在线播放| 久久综合久久鬼色| 国产真人做爰毛片视频直播| 成人激情久久| 日韩综合中文字幕| 日韩久久久久久久久| 日韩经典一区二区| 蜜桃久久影院| 麻豆国产在线| 亚洲精品一区二区三区影院| www色aa色aawww| 日本中文字幕一区二区有限公司| 久久99精品国产99久久| 国产亚av手机在线观看| 日韩欧美国产一区二区在线播放| 日本视频在线免费| 裸体在线国模精品偷拍| 日本在线观看一区二区| 日本免费一区二区六区| 日韩国产精品一区| 国产成人无码一区二区三区在线| 国产成人啪免费观看软件| 欧美爱爱视频网站| 国产一精品一av一免费爽爽| 日韩在线高清视频| 97国产成人无码精品久久久| 国产精品午夜春色av| 亚洲第一狼人区| 凹凸成人精品亚洲精品密奴| 国产精品久久一| 波多野结衣在线网站| 欧美午夜精品一区二区三区| 日本性高潮视频| 青娱乐精品视频在线| 亚洲精品国产精品久久| 日韩久久一区| 久久亚洲电影天堂| 亚洲va欧美va| 午夜影视日本亚洲欧洲精品| 国产精品嫩草av| 午夜亚洲精品| 色综合视频二区偷拍在线| 欧美黄色a视频| 久久综合久久美利坚合众国| 国产高清不卡视频| 午夜精品影院在线观看| 熟女少妇一区二区三区| 日韩av高清在线观看| 自拍亚洲欧美老师丝袜| 日韩成人在线观看视频| 97久久精品国产| 成人免费在线视频网| 91精品国产欧美一区二区成人| 久久精品99国产精| 国产丝袜美腿一区二区三区| 午夜两性免费视频| 欧美色综合网| 日本不卡高清视频一区| vam成人资源在线观看| 欧美国产激情18| 欧美色18zzzzxxxxx| 欧美日韩黄色影视| 日本一级淫片色费放| 国产欧美一区二区三区鸳鸯浴| 99九九99九九九99九他书对| 亚洲理论在线| 亚洲乱码一区二区三区| jizz18欧美18| 国产精品视频免费在线| 国内在线免费视频| 在线播放国产一区二区三区| 亚洲黄色在线播放| 欧美色图一区二区三区| 国产一级在线视频| 欧美韩国日本综合| 免费看黄色片的网站| 日本aⅴ免费视频一区二区三区| 欧美交换配乱吟粗大25p| 国产尤物久久久| 99精品国产高清一区二区| 午夜日韩成人影院| 久久久久免费视频| 午夜精品一区| 日韩经典一区二区三区| 国产精品日韩无码| 在线观看国产日韩| 日本一区二区免费在线观看| 国产精品久久久爽爽爽麻豆色哟哟| 极品白嫩的小少妇| 精品中文字幕一区二区小辣椒| 播放灌醉水嫩大学生国内精品| 久久精品免费一区二区三区| 热re99久久精品国99热蜜月| 精品国内亚洲2022精品成人| 亚洲va欧美va在线观看| 秋霞国产精品| 欧美在线精品免播放器视频| 欧美xxx黑人xxx水蜜桃| 久久精品男人天堂| 国产资源在线播放| 日韩精品福利网站| 风流少妇一区二区三区91| 欧美一级一区二区| 亚洲天堂视频在线| 欧美性猛交xxxxxx富婆| 三级视频在线观看| 亚洲va中文字幕| 久久久久久久福利| 亚洲精品成人精品456| 亚洲精品卡一卡二| 国产精品欧美久久久久无广告 | 亚洲精品无码久久久久| 第一福利永久视频精品| 日韩成年人视频| 亚洲超丰满肉感bbw| 精品一区二区三区人妻| 亚洲综合精品自拍| 欧美激情国产精品免费| 一区二区三区高清不卡| 欧美国产日韩在线观看成人| 综合久久给合久久狠狠狠97色| 日本高清黄色片| 国产欧美精品一区二区色综合 | 亚洲人视频在线| 美腿丝袜亚洲综合| 久久久精品高清| 精品一区二区免费在线观看| 亚洲va综合va国产va中文| 奇米影视7777精品一区二区| 亚洲国产高清av| 久久草av在线| 伊人五月天婷婷| 国产精品一区二区你懂的| 超碰91在线播放| 成人av电影免费在线播放| 日韩无码精品一区二区| 91伊人久久大香线蕉| 国产激情在线免费观看| 国产免费久久精品| 在线观看亚洲网站| 亚洲国产精品久久人人爱| 国产成人免费观看视频| 91国产精品成人| 一区二区www| 欧美大片拔萝卜| 无码精品一区二区三区在线 | 91影院未满十八岁禁止入内| 一本色道69色精品综合久久| 国产伦精品一区二区三区四区视频| 欧美日日夜夜| 色婷婷精品国产一区二区三区| 亚洲国产精品久久久久蝴蝶传媒| 久久www视频| 亚洲一区一卡| 手机视频在线观看| 国产成人精品一区二| 麻豆国产精品一区| 国产精品情趣视频| 欧美成人一二三区| 一本色道**综合亚洲精品蜜桃冫| 中文在线资源天堂| 日韩精品专区在线| 久久电影视频| 欧美精品在线观看| 超碰国产一区| 91在线视频成人| 欧美日韩看看2015永久免费 | 欧美日韩亚洲综合在线| 亚洲大尺度网站| 亚洲性线免费观看视频成熟| 成人区精品一区二区不卡| 欧美亚洲另类制服自拍| 国产国产一区| 精品乱子伦一区二区三区| 四季av在线一区二区三区| 国内精品视频一区二区三区| 蜜桃一区二区三区四区| 一区二区免费在线观看视频| 亚洲国产成人在线| 天天操天天干视频| 51午夜精品国产| 美女做暖暖视频免费在线观看全部网址91| 久久九九国产精品怡红院| 成人直播视频| 翡翠波斯猫1977年美国| 日韩伦理视频| av天堂永久资源网| 粉嫩久久99精品久久久久久夜| 蜜桃av乱码一区二区三区| 天天免费综合色| 国产极品久久久| 精品国内自产拍在线观看| 中文字幕21页在线看| 国产乱码精品一区二区三区日韩精品| 日韩免费视频| 天天碰免费视频| 久久这里只有精品6| 五月天综合在线| 日韩精品最新网址| 中中文字幕av在线| 成人黄在线观看| 成人综合一区| 国产成人综合一区| wwww国产精品欧美| 国产做受高潮漫动| 亚洲国产99精品国自产| 最新av在线播放| 亚洲a中文字幕| 婷婷六月综合| caoporm在线视频| 国产精品电影一区二区| 波多野结衣一二区| 亚洲欧洲av一区二区| 中文字幕在线官网| 免费国产一区| 亚洲欧美网站| 欧洲av一区二区三区| 日韩欧美在线国产| 久久精品色图| 国产成人精品av在线| 国产成人三级| 91色国产在线| 日韩久久一区二区| 中文字幕欧美人妻精品一区蜜臀 | 中文字幕在线播放网址| 亚洲a成v人在线观看| 欧美高清不卡| 一级黄色片毛片| 欧美日韩裸体免费视频| 欧美777四色影视在线| 日本久久久a级免费| 欧美一站二站| 中文字幕第80页| 国产精品传媒在线| 国产视频在线观看免费| 欧美二区乱c黑人| 林ゆな中文字幕一区二区| 俄罗斯av网站| 国产视频一区在线播放| 在线免费观看日韩视频| 精品国产一区二区三区久久狼黑人| 中文字幕成人| 国产免费一区二区视频| 99久久er热在这里只有精品15| 国产免费观看av| 亚洲色图在线观看| 亚洲一区二区av| 精品一区二区三区无码视频| av电影在线观看一区| 免费黄色一级大片| 欧美成人精品不卡视频在线观看| 粉嫩一区二区三区四区公司1| 国产原创中文在线观看| 国产日韩欧美a| 国产男女裸体做爰爽爽| 午夜精品一区二区三区在线视频 | 成人黄色777网| 国产伦精品一区二区三区视频我| 尤物九九久久国产精品的特点 | 日韩av一区二区在线影视| 亚洲人与黑人屁股眼交| 亚洲激情成人网| 国产精品久久久久77777丨| 青青草综合在线| 久久精品视频一区二区三区| 国产精品老熟女视频一区二区| 久久免费视频在线观看| av一区二区在线观看| 亚洲区 欧美区| 91黄色免费版| 国产蜜臀av在线播放| 日韩精品一区二区三区四区五区| 国产精品中文字幕日韩精品| 免费观看成人毛片| 美女少妇精品视频|