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

深入理解 MySQL 索引底層原理

數據庫 MySQL
Mysql 作為互聯網中非常熱門的數據庫,其底層的存儲引擎和數據檢索引擎的設計非常重要,尤其是 Mysql 數據的存儲形式以及索引的設計,決定了 Mysql 整體的數據檢索性能。

[[318881]]

 一步一步推導出 Mysql 索引的底層數據結構。

Mysql 作為互聯網中非常熱門的數據庫,其底層的存儲引擎和數據檢索引擎的設計非常重要,尤其是 Mysql 數據的存儲形式以及索引的設計,決定了 Mysql 整體的數據檢索性能。

我們知道,索引的作用是做數據的快速檢索,而快速檢索的實現的本質是數據結構。通過不同數據結構的選擇,實現各種數據快速檢索。在數據庫中,高效的查找算法是非常重要的,因為數據庫中存儲了大量數據,一個高效的索引能節省巨大的時間。比如下面這個數據表,如果 Mysql 沒有實現索引算法,那么查找 id=7 這個數據,那么只能采取暴力順序遍歷查找,找到 id=7 這個數據需要比較 7 次,如果這個表存儲的是 1000W 個數據,查找 id=1000W 這個數據那就要比較 1000W 次,這種速度是不能接受的。

 

 

 

 

Mysql 索引底層數據結構選型

1.哈希表(Hash)

哈希表是做數據快速檢索的有效利器。

哈希算法:也叫散列算法,就是把任意值(key)通過哈希函數變換為固定長度的 key 地址,通過這個地址進行具體數據的數據結構。

 

 

 

 

考慮這個數據庫表 user,表中一共有 7 個數據,我們需要檢索 id=7 的數據,SQL 語法是:

 

  1. select \* from user where id=7; 

哈希算法首先計算存儲 id=7 的數據的物理地址 addr=hash(7)=4231,而 4231 映射的物理地址是 0x77,0x77 就是 id=7 存儲的額數據的物理地址,通過該獨立地址可以找到對應 user_name='g'這個數據。這就是哈希算法快速檢索數據的計算過程。

但是哈希算法有個數據碰撞的問題,也就是哈希函數可能對不同的 key 會計算出同一個結果,比如 hash(7)可能跟 hash(199)計算出來的結果一樣,也就是不同的 key 映射到同一個結果了,這就是碰撞問題。解決碰撞問題的一個常見處理方式就是鏈地址法,即用鏈表把碰撞的數據接連起來。計算哈希值之后,還需要檢查該哈希值是否存在碰撞數據鏈表,有則一直遍歷到鏈表尾,直達找到真正的 key 對應的數據為止。

 

 

 

 

從算法時間復雜度分析來看,哈希算法時間復雜度為 O(1),檢索速度非常快。比如查找 id=7 的數據,哈希索引只需要計算一次就可以獲取到對應的數據,檢索速度非常快。但是 Mysql 并沒有采取哈希作為其底層算法,這是為什么呢?

因為考慮到數據檢索有一個常用手段就是范圍查找,比如以下這個 SQL 語句:

 

  1. select \* from user where id \>3; 

針對以上這個語句,我們希望做的是找出 id>3 的數據,這是很典型的范圍查找。如果使用哈希算法實現的索引,范圍查找怎么做呢?一個簡單的思路就是一次把所有數據找出來加載到內存,然后再在內存里篩選篩選目標范圍內的數據。但是這個范圍查找的方法也太笨重了,沒有一點效率而言。

所以,使用哈希算法實現的索引雖然可以做到快速檢索數據,但是沒辦法做數據高效范圍查找,因此哈希索引是不適合作為 Mysql 的底層索引的數據結構。

2.二叉查找樹(BST)

二叉查找樹是一種支持數據快速查找的數據結構,如圖下所示:

 

 

 

 

二叉查找樹的時間復雜度是 O(lgn),比如針對上面這個二叉樹結構,我們需要計算比較 3 次就可以檢索到 id=7 的數據,相對于直接遍歷查詢省了一半的時間,從檢索效率上看來是能做到高速檢索的。此外二叉樹的結構能不能解決哈希索引不能提供的范圍查找功能呢?

答案是可以的。觀察上面的圖,二叉樹的葉子節點都是按序排列的,從左到右依次升序排列,如果我們需要找 id>5 的數據,那我們取出節點為 6 的節點以及其右子樹就可以了,范圍查找也算是比較容易實現。

但是普通的二叉查找樹有個致命缺點:極端情況下會退化為線性鏈表,二分查找也會退化為遍歷查找,時間復雜退化為 O(N),檢索性能急劇下降。比如以下這個情況,二叉樹已經極度不平衡了,已經退化為鏈表了,檢索速度大大降低。此時檢索 id=7 的數據的所需要計算的次數已經變為 7 了。

 

 

 

 

在數據庫中,數據的自增是一個很常見的形式,比如一個表的主鍵是 id,而主鍵一般默認都是自增的,如果采取二叉樹這種數據結構作為索引,那上面介紹到的不平衡狀態導致的線性查找的問題必然出現。因此,簡單的二叉查找樹存在不平衡導致的檢索性能降低的問題,是不能直接用于實現 Mysql 底層索引的。

3.AVL 樹和紅黑樹

二叉查找樹存在不平衡問題,因此學者提出通過樹節點的自動旋轉和調整,讓二叉樹始終保持基本平衡的狀態,就能保持二叉查找樹的最佳查找性能了。基于這種思路的自調整平衡狀態的二叉樹有 AVL 樹和紅黑樹。

首先簡單介紹紅黑樹,這是一顆會自動調整樹形態的樹結構,比如當二叉樹處于一個不平衡狀態時,紅黑樹就會自動左旋右旋節點以及節點變色,調整樹的形態,使其保持基本的平衡狀態(時間復雜度為 O(logn)),也就保證了查找效率不會明顯減低。比如從 1 到 7 升序插入數據節點,如果是普通的二叉查找樹則會退化成鏈表,但是紅黑樹則會不斷調整樹的形態,使其保持基本平衡狀態,如下圖所示。下面這個紅黑樹下查找 id=7 的所要比較的節點數為 4,依然保持二叉樹不錯的查找效率。

紅黑樹擁有不錯的平均查找效率,也不存在極端的 O(n)情況,那紅黑樹作為 Mysql 底層索引實現是否可以呢?其實紅黑樹也存在一些問題,觀察下面這個例子。

紅黑樹順序插入 1~7 個節點,查找 id=7 時需要計算的節點數為 4。

 

 

 

 

紅黑樹順序插入 1~16 個節點,查找 id=16 需要比較的節點數為 6 次。觀察一下這個樹的形態,是不是當數據是順序插入時,樹的形態一直處于“右傾”的趨勢呢?從根本上上看,紅黑樹并沒有完全解決二叉查找樹雖然這個“右傾”趨勢遠沒有二叉查找樹退化為線性鏈表那么夸張,但是數據庫中的基本主鍵自增操作,主鍵一般都是數百萬數千萬的,如果紅黑樹存在這種問題,對于查找性能而言也是巨大的消耗,我們數據庫不可能忍受這種無意義的等待的。

 

 

 

 

現在考慮另一種更為嚴格的自平衡二叉樹 AVL 樹。因為 AVL 樹是個絕對平衡的二叉樹,因此他在調整二叉樹的形態上消耗的性能會更多。

AVL 樹順序插入 1~7 個節點,查找 id=7 所要比較節點的次數為 3。

 

 

 

 

AVL 樹順序插入 1~16 個節點,查找 id=16 需要比較的節點數為 4。從查找效率而言,AVL 樹查找的速度要高于紅黑樹的查找效率(AVL 樹是 4 次比較,紅黑樹是 6 次比較)。從樹的形態看來,AVL 樹不存在紅黑樹的“右傾”問題。也就是說,大量的順序插入不會導致查詢性能的降低,這從根本上解決了紅黑樹的問題。

 

 

 

 

總結一下 AVL 樹的優點:

  1. 不錯的查找性能(O(logn)),不存在極端的低效查找的情況。
  2. 可以實現范圍查找、數據排序。

看起來 AVL 樹作為數據查找的數據結構確實很不錯,但是 AVL 樹并不適合做 Mysql 數據庫的索引數據結構,因為考慮一下這個問題:

數據庫查詢數據的瓶頸在于磁盤 IO,如果使用的是 AVL 樹,我們每一個樹節點只存儲了一個數據,我們一次磁盤 IO 只能取出來一個節點上的數據加載到內存里,那比如查詢 id=7 這個數據我們就要進行磁盤 IO 三次,這是多么消耗時間的。所以我們設計數據庫索引時需要首先考慮怎么盡可能減少磁盤 IO 的次數。

磁盤 IO 有個有個特點,就是從磁盤讀取 1B 數據和 1KB 數據所消耗的時間是基本一樣的,我們就可以根據這個思路,我們可以在一個樹節點上盡可能多地存儲數據,一次磁盤 IO 就多加載點數據到內存,這就是 B 樹,B+樹的的設計原理了。

4.B 樹

下面這個 B 樹,每個節點限制最多存儲兩個 key,一個節點如果超過兩個 key 就會自動分裂。比如下面這個存儲了 7 個數據 B 樹,只需要查詢兩個節點就可以知道 id=7 這數據的具體位置,也就是兩次磁盤 IO 就可以查詢到指定數據,優于 AVL 樹。

 

 

 

 

下面是一個存儲了 16 個數據的 B 樹,同樣每個節點最多存儲 2 個 key,查詢 id=16 這個數據需要查詢比較 4 個節點,也就是經過 4 次磁盤 IO。看起來查詢性能與 AVL 樹一樣。

 

 

 

 

但是考慮到磁盤 IO 讀一個數據和讀 100 個數據消耗的時間基本一致,那我們的優化思路就可以改為:盡可能在一次磁盤 IO 中多讀一點數據到內存。這個直接反映到樹的結構就是,每個節點能存儲的 key 可以適當增加。

當我們把單個節點限制的 key 個數設置為 6 之后,一個存儲了 7 個數據的 B 樹,查詢 id=7 這個數據所要進行的磁盤 IO 為 2 次。

 

 

 

 

一個存儲了 16 個數據的 B 樹,查詢 id=7 這個數據所要進行的磁盤 IO 為 2 次。相對于 AVL 樹而言磁盤 IO 次數降低為一半。

 

 

 

 

所以數據庫索引數據結構的選型而言,B 樹是一個很不錯的選擇。總結來說,B 樹用作數據庫索引有以下優點:

  1. 優秀檢索速度,時間復雜度:B 樹的查找性能等于 O(h*logn),其中 h 為樹高,n 為每個節點關鍵詞的個數;
  2. 盡可能少的磁盤 IO,加快了檢索速度;
  3. 可以支持范圍查找。

5.B+樹

B 樹和 B+樹有什么不同呢?

第一,B 樹一個節點里存的是數據,而 B+樹存儲的是索引(地址),所以 B 樹里一個節點存不了很多個數據,但是 B+樹一個節點能存很多索引,B+樹葉子節點存所有的數據。

第二,B+樹的葉子節點是數據階段用了一個鏈表串聯起來,便于范圍查找。

 

 

 

 

通過 B 樹和 B+樹的對比我們看出,B+樹節點存儲的是索引,在單個節點存儲容量有限的情況下,單節點也能存儲大量索引,使得整個 B+樹高度降低,減少了磁盤 IO。其次,B+樹的葉子節點是真正數據存儲的地方,葉子節點用了鏈表連接起來,這個鏈表本身就是有序的,在數據范圍查找時,更具備效率。因此 Mysql 的索引用的就是 B+樹,B+樹在查找效率、范圍查找中都有著非常不錯的性能。

Innodb 引擎和 Myisam 引擎的實現

Mysql底層數據引擎以插件形式設計,最常見的是 Innodb 引擎和 Myisam 引擎,用戶可以根據個人需求選擇不同的引擎作為 Mysql 數據表的底層引擎。我們剛分析了,B+樹作為 Mysql 的索引的數據結構非常合適,但是數據和索引到底怎么組織起來也是需要一番設計,設計理念的不同也導致了 Innodb 和 Myisam 的出現,各自呈現獨特的性能。

MyISAM 雖然數據查找性能極佳,但是不支持事務處理。Innodb 最大的特色就是支持了 ACID 兼容的事務功能,而且他支持行級鎖。Mysql 建立表的時候就可以指定引擎,比如下面的例子,就是分別指定了 Myisam 和 Innodb 作為 user 表和 user2 表的數據引擎。

 

 

 

 

 

 

 

 

 

執行這兩個指令后,系統出現了以下的文件,說明這兩個引擎數據和索引的組織方式是不一樣的。

 

 

 

 

 

Innodb 創建表后生成的文件有:

  • frm:創建表的語句
  • idb:表里面的數據+索引文件

Myisam 創建表后生成的文件有

  • frm:創建表的語句
  • MYD:表里面的數據文件(myisam data)
  • MYI:表里面的索引文件(myisam index)

從生成的文件看來,這兩個引擎底層數據和索引的組織方式并不一樣,MyISAM 引擎把數據和索引分開了,一人一個文件,這叫做非聚集索引方式;Innodb 引擎把數據和索引放在同一個文件里了,這叫做聚集索引方式。下面將從底層實現角度分析這兩個引擎是怎么依靠 B+樹這個數據結構來組織引擎實現的。

1.MyISAM 引擎的底層實現(非聚集索引方式)

MyISAM 用的是非聚集索引方式,即數據和索引落在不同的兩個文件上。MyISAM 在建表時以主鍵作為 KEY 來建立主索引 B+樹,樹的葉子節點存的是對應數據的物理地址。我們拿到這個物理地址后,就可以到 MyISAM 數據文件中直接定位到具體的數據記錄了。

 

 

 

 

 

當我們為某個字段添加索引時,我們同樣會生成對應字段的索引樹,該字段的索引樹的葉子節點同樣是記錄了對應數據的物理地址,然后也是拿著這個物理地址去數據文件里定位到具體的數據記錄。

2.Innodb 引擎的底層實現(聚集索引方式)

InnoDB 是聚集索引方式,因此數據和索引都存儲在同一個文件里。首先 InnoDB 會根據主鍵 ID 作為 KEY 建立索引 B+樹,如左下圖所示,而 B+樹的葉子節點存儲的是主鍵 ID 對應的數據,比如在執行 select * from user_info where id=15 這個語句時,InnoDB 就會查詢這顆主鍵 ID 索引 B+樹,找到對應的 user_name='Bob'。

這是建表的時候 InnoDB 就會自動建立好主鍵 ID 索引樹,這也是為什么 Mysql 在建表時要求必須指定主鍵的原因。當我們為表里某個字段加索引時 InnoDB 會怎么建立索引樹呢?比如我們要給 user_name 這個字段加索引,那么 InnoDB 就會建立 user_name 索引 B+樹,節點里存的是 user_name 這個 KEY,葉子節點存儲的數據的是主鍵 KEY。注意,葉子存儲的是主鍵 KEY!拿到主鍵 KEY 后,InnoDB 才會去主鍵索引樹里根據剛在 user_name 索引樹找到的主鍵 KEY 查找到對應的數據。

 

 

 

 

問題來了,為什么 InnoDB 只在主鍵索引樹的葉子節點存儲了具體數據,但是其他索引樹卻不存具體數據呢,而要多此一舉先找到主鍵,再在主鍵索引樹找到對應的數據呢?

其實很簡單,因為 InnoDB 需要節省存儲空間。一個表里可能有很多個索引,InnoDB 都會給每個加了索引的字段生成索引樹,如果每個字段的索引樹都存儲了具體數據,那么這個表的索引數據文件就變得非常巨大(數據極度冗余了)。從節約磁盤空間的角度來說,真的沒有必要每個字段索引樹都存具體數據,通過這種看似“多此一舉”的步驟,在犧牲較少查詢的性能下節省了巨大的磁盤空間,這是非常有值得的。

在進行 InnoDB 和 MyISAM 特點對比時談到,MyISAM 查詢性能更好,從上面索引文件數據文件的設計來看也可以看出原因:MyISAM 直接找到物理地址后就可以直接定位到數據記錄,但是 InnoDB 查詢到葉子節點后,還需要再查詢一次主鍵索引樹,才可以定位到具體數據。等于 MyISAM 一步就查到了數據,但是 InnoDB 要兩步,那當然 MyISAM 查詢性能更高。

本文首先探討了哪種數據結構更適合作為 Mysql 底層索引的實現,然后再介紹了 Mysql 兩種經典數據引擎 MyISAM 和 InnoDB 的底層實現。最后再總結一下什么時候需要給你的表里的字段加索引吧:

  1. 較頻繁的作為查詢條件的字段應該創建索引;
  2. 唯一性太差的字段不適合單獨創建索引,即使該字段頻繁作為查詢條件;
  3. 更新非常頻繁的字段不適合創建索引。

 

責任編輯:武曉燕 來源: 騰訊技術工程
相關推薦

2020-03-26 16:40:07

MySQL索引數據庫

2020-08-10 18:03:54

Cache存儲器CPU

2022-11-04 09:43:05

Java線程

2023-04-28 08:53:09

2023-10-13 13:30:00

MySQL鎖機制

2024-10-28 08:28:59

2024-03-12 00:00:00

Sora技術數據

2022-09-05 08:39:04

kubernetesk8s

2024-11-01 08:57:07

2021-03-10 10:55:51

SpringJava代碼

2024-04-15 00:00:00

技術Attention架構

2022-06-01 21:23:12

ELKLogstash底層

2025-05-06 00:43:00

MySQL日志文件MIXED 3

2023-09-19 22:47:39

Java內存

2022-01-14 12:28:18

架構OpenFeign遠程

2022-09-26 08:01:31

線程LIFO操作方式

2019-07-01 13:34:22

vue系統數據

2020-11-04 15:35:13

Golang內存程序員

2022-09-05 22:22:00

Stream操作對象

2019-06-12 09:50:23

selectMySQLSQL
點贊
收藏

51CTO技術棧公眾號

日韩视频久久| 国产熟人av一二三区| 国产大片一区二区三区| 日韩中文字幕免费观看| 日韩一区二区中文| 欧美日韩国产精品一区| www国产精品视频| 日本a级片免费观看| www.国产.com| 亚洲一区 二区 三区| 欧美在线观看视频在线| 精品一区二区久久久久久久网站| 国产女人被狂躁到高潮小说| 国产资源一区| 中文字幕精品一区| 日本欧美爱爱爱| 性欧美丰满熟妇xxxx性久久久| 1区2区在线观看| 99国产精品免费视频观看| 色天使久久综合网天天| 久久久久久久久一区二区| 久久中文字幕在线观看| 国产精品视频一区二区三区综合| 国产欧美一区二区在线| 日韩av成人在线观看| 亚洲波多野结衣| 激情久久免费视频| 亚洲精品ww久久久久久p站| 成人美女av在线直播| 天堂网中文在线观看| 国产精品黄色片| 国产精品不卡一区二区三区| 国产精品美女在线观看| 黄大色黄女片18免费| 欧美日韩精品免费观看视欧美高清免费大片 | 久久国产精品第一页| 国产一区二区三区久久精品| 日韩精品无码一区二区三区免费 | 中文字幕精品久久| 国产一级做a爰片久久| aaa在线免费观看| 精品影视av免费| 国产精品久久久久久久久久久久| 日本猛少妇色xxxxx免费网站| 8av国产精品爽爽ⅴa在线观看| 亚洲观看高清完整版在线观看| 狠狠干一区二区| av中文字幕免费| 亚洲理伦在线| 在线色欧美三级视频| www.桃色.com| 亚洲香蕉久久| 欧美日韩免费看| 日韩视频在线视频| 成全电影播放在线观看国语| 狠狠狠色丁香婷婷综合久久五月| 色综合久久精品亚洲国产| av无码一区二区三区| aiss精品大尺度系列| 色av成人天堂桃色av| koreanbj精品视频一区| 成人精品一区二区三区免费 | 久久久久久久久久久久久久一区| 色窝窝无码一区二区三区成人网站 | 成人国产电影网| 日本精品久久久| 日本在线观看网址| 欧美丝袜激情| 亚洲精品一区二区三区影院 | 国产精品伦一区二区| 欧美在线观看一区| 亚洲第一色av| 日本不卡1234视频| 最新日韩av在线| 久久久久se| 黄色在线免费观看大全| 国产精一区二区三区| 日本一区二区在线免费播放| 国产农村妇女aaaaa视频| 久久久久午夜电影| 亚洲美女www午夜| 亚洲天堂一区二区在线观看| 欧美一级大黄| 亚洲成年人影院| 久久美女福利视频| av午夜在线观看| 亚洲欧美激情一区二区| 日韩视频在线播放| 水莓100国产免费av在线播放| 国产专区欧美精品| 国产精品丝袜一区二区三区| 中文字幕第四页| 美女视频网站黄色亚洲| 国产成人精品日本亚洲专区61| 久久精品波多野结衣| 久久一区二区三区电影| 亚洲欧洲高清在线| 大乳护士喂奶hd| 最新国产精品精品视频| 欧美二区乱c少妇| 亚洲综合在线网站| 美女日批视频在线观看| 亚洲视频一区二区在线| 日韩av高清在线播放| 成a人片在线观看| 亚洲欧洲精品一区二区三区| 人体内射精一区二区三区 | 欧美成人午夜影院| 国产精品白丝喷水在线观看| 亚洲福利电影| 高清亚洲成在人网站天堂| 青娱乐国产精品| 日韩av在线发布| 97精品久久久| 国产精品suv一区二区| 国精品一区二区三区| 欧美激情精品久久久久久免费印度 | 亚欧日韩另类中文欧美| 日韩av在线看| 国产人妻人伦精品1国产丝袜| 国产欧美一区二区三区米奇| 欧美精品一区二区三区在线 | 天天av天天翘| 樱桃视频在线观看一区| 免费一区二区三区在线观看| 欧美日韩伦理一区二区| 日韩风俗一区 二区| 欧美第一页在线观看| 中文精品久久| 国产精品日韩专区| 国产69久久| 亚洲欧美一区二区在线观看| 国产男女激情视频| 青青久久av| 亚洲午夜性刺激影院| 国产在线精品观看| 日韩精品每日更新| 久久精品国产99精品国产亚洲性色| 91亚洲天堂| 91精品国产高清一区二区三区蜜臀| 老女人性生活视频| 国产伦精品一区二区三区在线播放 | 欧美xxxx黑人又粗又长密月| 福利在线视频导航| 欧美性黄网官网| 五月婷婷六月丁香激情| 久久99久久人婷婷精品综合| 日韩在线中文字| 久久久久成人网站| 国产精品一二三四五| 免费成人进口网站| 久久青草伊人| 精品国产91亚洲一区二区三区婷婷| 91九色丨porny丨极品女神| 久久国产精品99久久久久久老狼| 色综合666| 日本性爱视频在线观看| 日韩欧美国产中文字幕| theav精尽人亡av| 一区二区三区导航| 麻豆传媒一区| 成人mm视频在线观看| 正在播放欧美视频| 一二三区在线播放| 97久久精品人人爽人人爽蜜臀| 亚洲国产精品一区二区第一页| 9191在线播放| 精品久久久久久久久久久久久久久| 久久久久亚洲av成人无码电影| 在线精品小视频| 91在线短视频| 视频三区在线| 欧美日韩亚洲网| japanese中文字幕| 麻豆精品在线播放| 麻豆久久久av免费| 精品视频在线一区二区在线| 色哟哟网站入口亚洲精品| 国产裸体永久免费无遮挡| 久久久九九九九| 日本阿v视频在线观看| 色婷婷久久久| 国产精品热视频| 日本大片在线播放| 亚洲女人天堂色在线7777| 伊人免费在线观看高清版| 91在线小视频| 热久久精品免费视频| 91精品国产91久久久久久黑人| 国产成人女人毛片视频在线| 黄色网址在线免费| 欧美日韩一区二区三区免费看| 色噜噜在线观看| 蜜桃av噜噜一区| 日韩极品视频在线观看| 日韩激情精品| 欧美成aaa人片免费看| 神马午夜电影一区二区三区在线观看| 91国偷自产一区二区三区成为亚洲经典 | 国产三级在线观看视频| 婷婷久久综合九色综合绿巨人| 亚洲日本黄色片| 亚洲人体偷拍| 在线视频欧美一区| 欧美黄色网络| 97免费在线视频| 超碰在线最新| 青青草综合网| 欧美制服丝袜第一页| 国产精品久久久久久在线观看| 99久久久久国产精品| 国产精品一区二| 狂野欧美性猛交xxxxx视频| 亚洲欧美第一页| 超碰在线人人干| 欧美视频在线观看一区二区| 五月婷婷激情网| 99精品国产视频| 在线视频观看一区二区| 日韩国产欧美三级| 精品这里只有精品| 欧美激情自拍| 国产精品视频在线免费观看 | 国产日韩在线亚洲字幕中文| 中文字幕在线免费| 精品亚洲一区二区三区在线播放 | 亚洲一级片在线播放| av午夜一区麻豆| 免费在线观看日韩视频| 欧美aa国产视频| 国产欧美韩日| 欧美最新精品| 俺也去精品视频在线观看| 欧美高清电影在线| 欧美日韩和欧美的一区二区| 99成人在线观看| 国产91高潮流白浆在线麻豆 | 91精品久久久久久久| 天堂网在线最新版www中文网| 亚洲精品福利在线观看| 欧美日韩一级黄色片| 日本一区二区三区国色天香| 精品夜夜澡人妻无码av | 欧美日韩卡一卡二| 国产免费a视频| 国产精品久久久久桃色tv| 少妇丰满尤物大尺度写真| 久久91精品久久久久久秒播| 四季av一区二区| 日本不卡免费在线视频| 国产裸体免费无遮挡| 日韩成人一区二区三区在线观看| 熟妇人妻va精品中文字幕| 性一交一乱一区二区洋洋av| 亚洲三区在线| jizz国产精品| 亚洲自拍偷拍色图| 久久uomeier| 欧美成人性色生活仑片| a天堂中文在线官网在线| 久久亚洲综合国产精品99麻豆精品福利 | 欧洲成人一区二区| 精品999日本久久久影院| 成人福利视频网| 秋霞一区二区三区| 国产精品久久久久久久久婷婷| 国产精品视频3p| 蜜桃狠狠色伊人亚洲综合网站| 色综合综合网| 一本久久a久久精品vr综合| 99久久综合| 国产一级不卡视频| 亚洲在线成人| 亚洲色图 在线视频| 激情综合色综合久久| 特级特黄刘亦菲aaa级| 另类中文字幕网| xxx中文字幕| 91在线视频18| 粉嫩精品久久99综合一区| 自拍偷拍亚洲综合| 国产一区二区三区影院| 欧美午夜电影网| 亚洲av无码乱码国产精品久久| 欧美午夜不卡在线观看免费| 国产老妇伦国产熟女老妇视频| 在线观看国产日韩| 国产毛片毛片毛片毛片| 亚洲激情自拍图| 日本免费中文字幕在线| 国模叶桐国产精品一区| 激情欧美一区二区三区黑长吊| 91精品国产一区二区三区动漫 | 国产不卡免费视频| 天天躁日日躁aaaa视频| 亚洲精品国久久99热| 欧美一区二区三区网站| 日韩欧美视频一区| 国产精品欧美亚洲| 亚洲缚视频在线观看| 丰满少妇被猛烈进入| 日韩午夜小视频| 92久久精品一区二区| 欧美日韩日日骚| 日本免费不卡视频| 日日噜噜噜夜夜爽亚洲精品| 国模精品视频| 5278欧美一区二区三区| 草草在线视频| 国产色婷婷国产综合在线理论片a| 国产精品天天看天天狠| 最新中文字幕久久| 自由日本语亚洲人高潮| 欧美精品无码一区二区三区| 成人免费视频国产在线观看| 天天躁日日躁狠狠躁av| 国产精品伦理一区二区| 亚洲欧美偷拍视频| 欧美成人精品1314www| 欧美午夜电影一区二区三区| 中文字幕国产精品久久| 综合日韩av| 国产综合欧美在线看| 欧美jizzhd精品欧美巨大免费| 国产aaaaa毛片| 久久久噜噜噜久久人人看| 日韩精品一卡二卡| 日韩欧美自拍偷拍| av网址在线免费观看| 国产精品女人久久久久久| 欧美美乳视频| 毛片一区二区三区四区| 9l国产精品久久久久麻豆| 国产一级淫片免费| 欧美成人精品福利| 成年人视频免费在线播放| 日韩免费观看网站| 精品国产午夜肉伦伦影院| 久久亚洲综合网| 亚洲激情二区| 一级黄色免费视频| 亚洲一区在线视频| 亚洲不卡在线视频| 制服.丝袜.亚洲.中文.综合| 男人天堂网在线视频| 欧美疯狂性受xxxxx另类| 麻豆国产一区| 毛片av在线播放| 久久一二三四| 性生活一级大片| 亚洲精选免费视频| 成人av免费播放| 欧美精品久久久久久久久| 色香欲www7777综合网| 免费日韩电影在线观看| 免费精品视频| 日本美女xxx| 69堂亚洲精品首页| 伊人福利在线| 国产欧美一区二区三区另类精品| 精品91在线| 噜噜噜在线视频| 色88888久久久久久影院按摩 | 国产精品午夜春色av| 一级黄在线观看| 欧美成人午夜影院| 欧美在线关看| 成年人在线观看视频免费| 国产精品国产精品国产专区不蜜| 国产美女三级无套内谢| 久久久久女教师免费一区| 免费成人三级| 天堂在线资源视频| 亚洲激情综合网| 免费福利在线观看| 国产日韩亚洲欧美| 国内精品福利| 99久久人妻无码精品系列| 亚洲一区二区欧美| 天天干天天爽天天操| 国产精品h在线观看| 伊人久久大香线| 一区二区不卡免费视频| 欧美三级韩国三级日本一级| 色婷婷av在线| 欧美精品一区二区三区在线四季| 一区二区免费不卡在线| 99精品一区二区三区无码吞精| 一本大道久久a久久精二百| 色丁香婷婷综合久久| 国产精品69av| 国产综合精品| 少妇视频在线播放| 亚洲成人aaa| 日韩有码欧美| 四虎影院一区二区| 99re视频这里只有精品| 国产又黄又大又粗的视频| 国产69精品99久久久久久宅男| 成人在线免费观看91|