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

我們一起聊聊MySQL 索引的底層邏輯

數據庫 MySQL
本文以 MySQL 數據庫為研究對象,討論與數據庫索引相關的一些話題。特別需要說明的是, MySQL 支持諸多存儲引擎,而各種存儲引擎對索引的支持也各不相同,因此 MySQL 數據庫支持多種索引類型,如 B-Tree 索引,哈希索引,全文索引等等。為了避免混亂,將只關注于 B-Tree 索引,因為這是平常使用 MySQL 時主要打交道的索引。

數據結構以及算法

索引的本質其實就是一種數據結構。我們都希望查詢數據的速度能盡可能的快,因此數據庫系統的設計者會從查詢算法的角度進行優化。最基本的查詢算法當然是順序查找,這種復雜度為 O(n) 的算法在數據量很大時顯然是糟糕的,好在計算機科學的發展提供了很多更優秀的查找算法,例如二分查找、二叉樹查找等。如果稍微分析一下會發現,每種查找算法都只能應用于特定的數據結構之上,例如二分查找要求被檢索數據有序,而二叉樹查找只能應用于二叉查找樹上,但是數據本身的組織結構不可能完全滿足各種數據結構(例如,理論上不可能同時將兩列都按順序進行組織),所以,在數據之外,數據庫系統還維護著滿足特定查找算法的數據結構,這些數據結構以某種方式引用(指向)數據,這樣就可以在這些數據結構上實現高級查找算法。這種數據結構,就是索引。

圖片圖片

1.1 B-Tree

為了描述 B-Tree ,首先定義一條數據記錄為一個二元組 [key, data] , key 為記錄的鍵值,對于不同數據記錄, key 是互不相同的;data 為數據記錄除 key 外的數據。那么 B-Tree 是滿足下列條件的數據結構:

  1. d 為大于 1 的一個正整數,稱為 B-Tree 的度。
  2. h 為一個正整數,稱為 B-Tree 的高度。
  3. 每個非葉子節點由 n-1 個 key 和 n 個指針組成,其中 d<=n<=2d 。
  4. 每個葉子節點最少包含一個 key 和兩個指針,最多包含 2d-1 個 key 和 2d 個指針,葉節點的指針均為 null 。
  5. 所有葉節點具有相同的深度,等于樹高 h 。
  6. key 和指針互相間隔,節點兩端是指針。
  7. 一個節點中的 key 從左到右非遞減排列。
  8. 所有節點組成樹結構。
  9. 每個指針要么為 null ,要么指向另外一個節點。
  10. 如果某個指針在節點 node 最左邊且不為 null ,則其指向節點的所有 key 小于 v(key_1),其中 v(key_1) 為 node 的第一個 key 的值。
  11. 如果某個指針在節點 node 最右邊且不為 null ,則其指向節點的所有 key 大于 v(key_m) ,其中 v(key_m) 為 node 的最后一個 key 的值。
  12. 如果某個指針在節點 node 的左右相鄰 key 分別是 key_i 和 key{i+1} 且不為 null ,則其指向節點的所有 key 小于 v(key{i+1}) 且大于 v(key_i) 。

如下是一個 d = 2 的 B-Tree 示意圖。

圖片圖片

由于 B-Tree 的特性,在 B-Tree 中按 key 檢索數據的算法非常直觀:首先從根節點進行二分查找,如果找到則返回對應節點的 data ,否則對相應區間的指針指向的節點遞歸進行查找,直到找到節點或找到 null 指針,前者查找成功,后者查找失敗。B-Tree 上查找算法的偽代碼如下:

BTree_Search(node, key) {
    if(node == null) return null;
    foreach(node.key)
    {
        if(node.key[i] == key) return node.data[i];
        if(node.key[i] > key) return BTree_Search(point[i]->node);
    }
    return BTree_Search(point[i+1]->node);
}
data = BTree_Search(root, my_key);

關于 B-Tree 有一系列有趣的性質,例如一個度為 d 的 B-Tree ,設其索引 N 個 key ,則其樹高 h 的上限為 log_d((N+1)/2) ,檢索一個 key ,其查找節點個數的漸進復雜度為 O(log_dN) 。從這點可以看出, B-Tree 是一個非常有效率的索引數據結構。

1.2 B+Tree

B-Tree 有許多變種,其中最常見的是 B+Tree ,例如 MySQL 就普遍使用 B+Tree 實現其索引結構。與 B-Tree 相比, B+Tree 有以下不同點:

  1. 每個節點的指針上限為 2d 而不是 2d+1 。
  2. 內節點不存儲 data ,只存儲 key ;葉子節點不存儲指針。

如下是一個簡單的 B+Tree 示意。

圖片圖片

由于并不是所有節點都具有相同的域,因此 B+Tree 中葉節點和內節點一般大小不同。這點與 B-Tree 不同,雖然 B-Tree 中不同節點存放的 key 和指針可能數量不一致,但是每個節點的域和上限是一致的,所以在實現中 B-Tree 往往對每個節點申請同等大小的空間。一般來說, B+Tree 比 B-Tree 更適合實現外存儲索引結構,具體原因與外存儲器原理及計算機存取原理有關,將在下面討論。

1.3 帶有順序訪問指針的 B+Tree

一般在數據庫系統或文件系統中使用的 B+Tree 結構都在經典 B+Tree 的基礎上進行了優化,增加了順序訪問指針。

圖片圖片

如圖所示,在 B+Tree 的每個葉子節點增加一個指向相鄰葉子節點的指針,就形成了帶有順序訪問指針的 B+Tree 。做這個優化的目的是為了提高區間訪問的性能,例如圖中如果要查詢 key 為從 18 到 49 的所有數據記錄,當找到 18 后,只需順著節點和指針順序遍歷就可以一次性訪問到所有數據節點,極大提到了區間查詢效率。

1.4 為什么使用 B-Tree / B+Tree

紅黑樹等數據結構也可以用來實現索引,但是文件系統及數據庫系統普遍采用 B-/+Tree 作為索引結構,這一節將結合計算機組成原理相關知識討論 B-/+Tree 作為索引的理論基礎。一般來說,索引本身也很大,不可能全部存儲在內存中,因此索引往往以索引文件的形式存儲的磁盤上。這樣的話,索引查找過程中就要產生磁盤 I/O 消耗,相對于內存存取, I/O 存取的消耗要高幾個數量級,所以評價一個數據結構作為索引的優劣最重要的指標就是在查找過程中磁盤 I/O 操作次數的漸進復雜度。換句話說,索引的結構組織要盡量減少查找過程中磁盤 I/O 的存取次數。下面先介紹內存和磁盤存取原理,然后再結合這些原理分析 B-/+Tree 作為索引的效率。

主存存取原理

目前計算機使用的主存基本都是隨機讀寫存儲器 ( RAM ) ,現代 RAM 的結構和存取原理比較復雜,這里本文拋卻具體差別,抽象出一個十分簡單的存取模型來說明 RAM 的工作原理。

圖片圖片

從抽象角度看,主存是一系列的存儲單元組成的矩陣,每個存儲單元存儲固定大小的數據。每個存儲單元有唯一的地址,現代主存的編址規則比較復雜,這里將其簡化成一個二維地址:通過一個行地址和一個列地址可以唯一定位到一個存儲單元。上圖展示了一個 4 x 4 的主存模型。主存的存取過程如下:當系統需要讀取主存時,則將地址信號放到地址總線上傳給主存,主存讀到地址信號后,解析信號并定位到指定存儲單元,然后將此存儲單元數據放到數據總線上,供其它部件讀取。寫主存的過程類似,系統將要寫入單元地址和數據分別放在地址總線和數據總線上,主存讀取兩個總線的內容,做相應的寫操作。這里可以看出,主存存取的時間僅與存取次數呈線性關系,因為不存在機械操作,兩次存取的數據的“距離”不會對時間有任何影響,例如,先取 A0 再取 A1 和先取 A0 再取 D3 的時間消耗是一樣的。

磁盤存取原理

上文說過,索引一般以文件形式存儲在磁盤上,索引檢索需要磁盤 I/O 操作。與主存不同,磁盤 I/O 存在機械運動耗費,因此磁盤 I/O 的時間消耗是巨大的。下圖是磁盤的整體結構示意圖。

圖片圖片

一個磁盤由大小相同且同軸的圓形盤片組成,磁盤可以轉動(各個磁盤必須同步轉動)。在磁盤的一側有磁頭支架,磁頭支架固定了一組磁頭,每個磁頭負責存取一個磁盤的內容。磁頭不能轉動,但是可以沿磁盤半徑方向運動(實際是斜切向運動),每個磁頭同一時刻也必須是同軸的,即從正上方向下看,所有磁頭任何時候都是重疊的(不過目前已經有多磁頭獨立技術,可不受此限制)。下圖是磁盤結構的示意圖。

圖片圖片

盤片被劃分成一系列同心環,圓心是盤片中心,每個同心環叫做一個磁道,所有半徑相同的磁道組成一個柱面。磁道被沿半徑線劃分成一個個小的段,每個段叫做一個扇區,每個扇區是磁盤的最小存儲單元。為了簡單起見,我們下面假設磁盤只有一個盤片和一個磁頭。當需要從磁盤讀取數據時,系統會將數據邏輯地址傳給磁盤,磁盤的控制電路按照尋址邏輯將邏輯地址翻譯成物理地址,即確定要讀的數據在哪個磁道,哪個扇區。為了讀取這個扇區的數據,需要將磁頭放到這個扇區上方,為了實現這一點,磁頭需要移動對準相應磁道,這個過程叫做尋道,所耗費時間叫做尋道時間,然后磁盤旋轉將目標扇區旋轉到磁頭下,這個過程耗費的時間叫做旋轉時間。

局部性原理與磁盤預讀

由于存儲介質的特性,磁盤本身存取就比主存慢很多,再加上機械運動耗費,磁盤的存取速度往往是主存的幾百分分之一,因此為了提高效率,要盡量減少磁盤 I/O 。為了達到這個目的,磁盤往往不是嚴格按需讀取,而是每次都會預讀,即使只需要一個字節,磁盤也會從這個位置開始,順序向后讀取一定長度的數據放入內存。這樣做的理論依據是計算機科學中著名的局部性原理:當一個數據被用到時,其附近的數據也通常會馬上被使用。程序運行期間所需要的數據通常比較集中。由于磁盤順序讀取的效率很高(不需要尋道時間,只需很少的旋轉時間),因此對于具有局部性的程序來說,預讀可以提高 I/O 效率。預讀的長度一般為頁 ( page ) 的整倍數。頁是計算機管理存儲器的邏輯塊,硬件及操作系統往往將主存和磁盤存儲區分割為連續的大小相等的塊,每個存儲塊稱為一頁 (在許多操作系統中,頁得大小通常為 4k ) ,主存和磁盤以頁為單位交換數據。當程序要讀取的數據不在主存中時,會觸發一個缺頁異常,此時系統會向磁盤發出讀盤信號,磁盤會找到數據的起始位置并向后連續讀取一頁或幾頁載入內存中,然后異常返回,程序繼續運行。

B-/+Tree 索引的性能分析

到這里終于可以分析 B-/+Tree 索引的性能了。上面說過一般使用磁盤 I/O 次數評價索引結構的優劣。先從 B-Tree 分析,根據 B-Tree 的定義,可知檢索一次最多需要訪問 h 個節點。數據庫系統的設計者巧妙利用了磁盤預讀原理,將一個節點的大小設為等于一個頁,這樣每個節點只需要一次 I/O 就可以完全載入。為了達到這個目的,在實際實現 B-Tree 還需要使用如下技巧:每次新建節點時,直接申請一個頁的空間,這樣就保證一個節點物理上也存儲在一個頁里,加之計算機存儲分配都是按頁對齊的,就實現了一個 node 只需一次 I/O 。B-Tree 中一次檢索最多需要 h-1 次 I/O(根節點常駐內存),漸進復雜度為 O(h) = O(log_dN) 。一般實際應用中,出度d是非常大的數字,通常超過 100 ,因此 h 非常小(通常不超過 3 )。綜上所述,用 B-Tree 作為索引結構效率是非常高的。而紅黑樹這種結構, h 明顯要深的多。由于邏輯上很近的節點(父子)物理上可能很遠,無法利用局部性,所以紅黑樹的I/O漸進復雜度也為 O(h) ,效率明顯比 B-Tree 差很多。上面還說過, B+Tree 更適合外存索引,原因和內節點出度 d 有關。從上面分析可以看到, d 越大索引的性能越好,而出度的上限取決于節點內 key 和 data 的大小:d_{max} = floor(pagesize / (keysize + datasize + pointsize)) 。floor 表示向下取整。由于 B+Tree 內節點去掉了 data 域,因此可以擁有更大的出度,擁有更好的性能。

MySQL 的實現

在 MySQL 中,索引屬于存儲引擎級別的概念,不同存儲引擎對索引的實現方式是不同的,本文主要討論 MyISAM 和 InnoDB 兩個存儲引擎的索引實現方式。

2.1 MyISAM 索引實現

MyISAM 引擎使用 B+Tree 作為索引結構,葉節點的 data 域存放的是數據記錄的地址。下圖是 MyISAM 索引的原理圖:

圖片圖片

這里設表一共有三列,假設我們以 Col1 為主鍵,則上圖是一個 MyISAM 表的主索引 ( Primary key ) 示意。可以看出 MyISAM 的索引文件僅僅保存數據記錄的地址。在 MyISAM 中,主索引和輔助索引 ( Secondary key ) 在結構上沒有任何區別,只是主索引要求 key 是唯一的,而輔助索引的 key 可以重復。如果我們在 Col2 上建立一個輔助索引,則此索引的結構如下圖所示:

圖片圖片

同樣也是一顆 B+Tree , data 域保存數據記錄的地址。因此, MyISAM 中索引檢索的算法為首先按照 B+Tree 搜索算法搜索索引,如果指定的 Key 存在,則取出其data域的值,然后以 data 域的值為地址,讀取相應數據記錄。MyISAM 的索引方式也叫做“非聚集”的,之所以這么稱呼是為了與 InnoDB 的聚集索引區分。

2.2 InnoDB 索引實現

雖然 InnoDB 也使用 B+Tree 作為索引結構,但具體實現方式卻與 MyISAM 截然不同。第一個重大區別是 InnoDB 的數據文件本身就是索引文件。從上文知道, MyISAM 索引文件和數據文件是分離的,索引文件僅保存數據記錄的地址。而在 InnoDB 中,表數據文件本身就是按 B+Tree 組織的一個索引結構,這棵樹的葉節點 data 域保存了完整的數據記錄。這個索引的 key 是數據表的主鍵,因此 InnoDB 表數據文件本身就是主索引。

圖片圖片

上圖是 InnoDB 主索引(同時也是數據文件)的示意圖,可以看到葉節點包含了完整的數據記錄。這種索引叫做聚集索引。因為 InnoDB 的數據文件本身要按主鍵聚集,所以 InnoDB 要求表必須有主鍵( MyISAM 可以沒有),如果沒有顯式指定,則 MySQL 系統會自動選擇一個可以唯一標識數據記錄的列作為主鍵,如果不存在這種列,則 MySQL 自動為 InnoDB 表生成一個隱含字段作為主鍵,這個字段長度為 6 個字節,類型為長整形。第二個與 MyISAM 索引的不同是 InnoDB 的輔助索引 data 域存儲相應記錄主鍵的值而不是地址。換句話說, InnoDB 的所有輔助索引都引用主鍵作為 data 域。例如,下圖為定義在 Col3 上的一個輔助索引:

圖片圖片

這里以英文字符的 ASCII 碼作為比較準則。聚集索引這種實現方式使得按主鍵的搜索十分高效,但是輔助索引搜索需要檢索兩遍索引:首先檢索輔助索引獲得主鍵,然后用主鍵到主索引中檢索獲得記錄。了解不同存儲引擎的索引實現方式對于正確使用和優化索引都非常有幫助,例如知道了 InnoDB 的索引實現后,就很容易明白為什么不建議使用過長的字段作為主鍵,因為所有輔助索引都引用主索引,過長的主索引會令輔助索引變得過大。再例如,用非單調的字段作為主鍵在 InnoDB 中不是個好主意,因為 InnoDB 數據文件本身是一顆 B+Tree ,非單調的主鍵會造成在插入新記錄時數據文件為了維持 B+Tree 的特性而頻繁的分裂調整,十分低效,而使用自增字段作為主鍵則是一個很好的選擇。

總結

本文以 MySQL 數據庫為研究對象,討論與數據庫索引相關的一些話題。特別需要說明的是, MySQL 支持諸多存儲引擎,而各種存儲引擎對索引的支持也各不相同,因此 MySQL 數據庫支持多種索引類型,如 B-Tree 索引,哈希索引,全文索引等等。為了避免混亂,將只關注于 B-Tree 索引,因為這是平常使用 MySQL 時主要打交道的索引。

參考文獻

[1] Baron Scbwartz 等 著,王小東等 譯;高性能 MySQL(High Performance MySQL);電子工業出版社,2010 [2] Michael Kofler 著,楊曉云等 譯;MySQL5權威指南(The Definitive Guide to MySQL5);人民郵電出版社,2006 [3] 姜承堯 著;MySQL 技術內幕-InnoDB 存儲引擎;機械工業出版社,2011

責任編輯:武曉燕 來源: 政采云技術
相關推薦

2025-04-11 00:05:49

RPC底層分布式

2023-04-26 07:30:00

promptUI非結構化

2024-02-20 21:34:16

循環GolangGo

2021-08-27 07:06:10

IOJava抽象

2022-10-08 00:00:05

SQL機制結構

2023-06-30 08:18:51

敏捷開發模式

2022-05-24 08:21:16

數據安全API

2023-08-10 08:28:46

網絡編程通信

2023-08-04 08:20:56

DockerfileDocker工具

2023-09-10 21:42:31

2023-03-29 08:13:48

MySQL檢索成本

2021-07-31 11:40:55

Openresty開源

2023-03-07 07:05:29

生產數據庫運維

2023-08-02 08:35:54

文件操作數據源

2024-06-14 09:32:12

2024-09-09 08:53:56

2022-09-08 08:50:17

SSDOracleCPU

2022-12-06 08:12:11

Java關鍵字

2023-07-27 07:46:51

SAFe團隊測試

2022-06-26 09:40:55

Django框架服務
點贊
收藏

51CTO技術棧公眾號

国产在线一区二区三区四区| 欧美激情中文字幕乱码免费| 日韩av.com| 日韩激情美女| 国产色产综合产在线视频| 国产精品专区一| 日韩精品一区二区三区国语自制| 国产精品日韩精品中文字幕| 欧美美女一区二区| 欧美黑人经典片免费观看| 日本成a人片在线观看| 成人亚洲一区二区一| 国产精品激情av在线播放| 欧美人妻一区二区| 欧美黄色大片在线观看| 亚洲精品久久久久中文字幕二区| 一级片视频免费观看| 涩涩涩在线视频| 亚洲免费视频成人| 亚洲精品视频一区二区三区| www.看毛片| 美日韩一级片在线观看| 欧美中在线观看| 九九视频免费观看| 日韩一区欧美| 亚洲丝袜av一区| 不许穿内裤随时挨c调教h苏绵 | www.99在线| 美女精品视频| 亚洲人精品午夜| 日韩欧美视频一区二区| 婷婷丁香花五月天| 丁香婷婷综合激情五月色| 国产在线999| 欧美成人一区二区视频| 国产精品美女久久久| 久99九色视频在线观看| www深夜成人a√在线| 日韩激情免费| 中文字幕av一区中文字幕天堂 | 黑人久久a级毛片免费观看| 91精品久久久久久久久99蜜臂| 国产aaa一级片| sm在线播放| 亚洲动漫第一页| 国产91在线亚洲| 1024在线播放| 亚洲男人的天堂一区二区| 波多野结衣三级在线| 四虎久久免费| 中文字幕一区二区三区精华液| 亚洲综合网中心| 在线免费观看黄色av| 欧美精彩视频一区二区三区| 日韩久久精品一区二区三区| 国产在线观看免费网站| 欧美激情中文字幕一区二区| 日韩欧美三级一区二区| 91涩漫在线观看| 国产精品女同一区二区三区| 国产又大又长又粗又黄| 国产原创视频在线观看| 一区二区三区四区不卡视频| 996这里只有精品| 欧美xxx黑人xxx水蜜桃| 亚洲成人7777| 国产成人久久777777| 日本成人福利| 69p69国产精品| 中文字幕在线观看视频www| 超碰成人在线免费| 日韩精品中文字幕视频在线| www.狠狠爱| 91麻豆精品国产91久久久平台| 另类视频在线观看| 精品久久免费视频| 久久婷婷影院| 成人免费视频在线观看超级碰| 国产麻豆免费视频| av日韩在线网站| 神马影院一区二区| 色女人在线视频| 欧美日韩亚洲国产一区| 国产区二区三区| 1313精品午夜理伦电影| 亚洲精品视频中文字幕| 神马午夜精品91| 国产女优一区| 91九色国产社区在线观看| 日韩在线视频观看免费| 国产精品巨作av| 日韩欧美一区二区在线视频| 亚洲国产精品无码久久久久高潮 | 欧美成人一区二区三区高清| 一二三区精品| 成人疯狂猛交xxx| 欧美一区二区三区激情| 欧美激情资源网| av在线免费观看国产| 中文.日本.精品| 精品毛片乱码1区2区3区| 新91视频在线观看| 国内综合精品午夜久久资源| 国产精品免费观看在线| 天天操天天射天天舔| 亚洲欧洲精品天堂一级| 女人扒开屁股爽桶30分钟| 96sao精品免费视频观看| 精品视频久久久| 欧美成人精品欧美一| 免费人成黄页网站在线一区二区 | 欧美综合在线视频观看| 色综合久综合久久综合久鬼88| 亚洲男人的天堂在线视频| 韩国欧美国产一区| 日本精品一区二区| av中文字幕在线观看第一页| 7777女厕盗摄久久久| 波多野结衣av在线观看| 日韩午夜免费视频| 亚洲自拍小视频免费观看| 成人性生交大片免费看午夜| 懂色av影视一区二区三区| 成人在线短视频| 日韩国产在线| 国产精品欧美日韩| 久久免费看视频| 精品国产户外野外| 美女扒开腿免费视频| 91精品啪在线观看国产18| 国产精品视频大全| 黄色的视频在线免费观看| 欧美日韩免费看| 亚州av综合色区无码一区| 国语自产精品视频在线看8查询8| 91麻豆国产精品| 午夜在线视频| 欧美日韩高清在线播放| 国产精品无码一区二区三区| 狠狠入ady亚洲精品经典电影| 91青草视频久久| 久久综合之合合综合久久| 欧美亚洲免费在线一区| 亚洲欧洲久久久| 久久精品首页| 日产国产精品精品a∨| 日本久久免费| 一区二区三区视频免费在线观看| 日本高清不卡码| 久久久久久久国产精品影院| 日本三级免费观看| 蜜桃视频欧美| 国产精品视频久久久| www日韩tube| 欧美日韩日日摸| 蜜桃视频最新网址| 国产精品中文字幕欧美| 欧日韩免费视频| 希岛爱理av免费一区二区| 欧美在线一级va免费观看| 欧美美女搞黄| 欧美三级视频在线播放| 尤物在线免费视频| 国产宾馆实践打屁股91| 成人在线观看你懂的| 四虎影视精品| 国产精品嫩草影院久久久| 国产精品剧情一区二区在线观看| 日韩欧美一二三四区| 日本三级免费看| 久久一二三国产| 色www免费视频| 一个色综合网| 国语精品中文字幕| 嫩草伊人久久精品少妇av杨幂| 日韩视频免费大全中文字幕| 午夜精品久久久久久久99| 香蕉加勒比综合久久| 日韩一级av毛片| 国产精品77777竹菊影视小说| www.在线观看av| 国产aⅴ精品一区二区三区久久| 国产精品自拍视频| 91九色在线看| 这里只有精品久久| 亚洲不卡免费视频| 日本精品一级二级| 久久久一区二区三区四区| 国产色产综合色产在线视频| 丰满人妻一区二区三区53视频| 午夜亚洲精品| 强开小嫩苞一区二区三区网站 | 中文在线аv在线| 色偷偷av一区二区三区乱| 成人午夜福利视频| 欧美日韩激情一区二区三区| 国产在线观看你懂的| 中文字幕va一区二区三区| 少妇丰满尤物大尺度写真| 久久一综合视频| 天堂8在线天堂资源bt| 欧美日韩一二三四| 国产精品久久7| 欧美一区=区三区| 国内精品小视频在线观看| 日本福利在线| 亚洲欧洲在线视频| 精品国产av一区二区三区| 在线观看视频一区二区| 69精品久久久| 亚洲天堂精品在线观看| 国产精品国产三级国产专业不| 国产**成人网毛片九色| 三上悠亚在线一区二区| 久久一二三区| 日本毛片在线免费观看| 亚洲网址在线| 可以在线看黄的网站| 成人在线电影在线观看视频| 麻豆亚洲一区| 老司机凹凸av亚洲导航| 91福利视频导航| 久久不卡日韩美女| 国产成人啪精品视频免费网| 国产网站在线| 国内精品久久久久| 欧美精品videossex少妇| 乱亲女秽乱长久久久| 欧美日韩xx| 中文字幕亚洲欧美日韩高清| 成人77777| 国产亚洲精品美女久久久| 欧美女v视频| 亚洲欧美在线一区| 视频三区在线观看| 亚洲欧美成人在线| 四虎精品在线| 日韩精品极品视频| 婷婷丁香花五月天| 亚洲老板91色精品久久| 无码精品一区二区三区在线| 日韩av综合网站| 欧美一级片免费| 亚洲精品久久久久中文字幕欢迎你| 人妻偷人精品一区二区三区| 精品久久久久久综合日本欧美 | 亚洲欧洲二区| 亚洲永久免费观看| 日韩中文字幕一区二区高清99| 亚洲一区二区三区久久| 日本一区二区三区播放| 国产精品区二区三区日本| eeuss鲁片一区二区三区| 国产精品视频入口| 噜噜噜天天躁狠狠躁夜夜精品| 国产一级二级三级精品| 久久久久观看| 欧美中日韩免费视频| 日韩精品一区二区三区免费观看| 中文字幕乱码一区二区三区| 91超碰国产精品| 成年女人18级毛片毛片免费| 亚洲狼人精品一区二区三区| 成 年 人 黄 色 大 片大 全| 久久久水蜜桃av免费网站| 一级黄色香蕉视频| 韩国三级在线一区| japanese在线观看| 国产欧美日韩在线视频| 天天色天天综合| 午夜精品在线看| 欧美日韩综合一区二区三区| 欧美日韩在线电影| 亚洲成a人片77777精品| 亚洲四色影视在线观看| 韩国av网站在线| 57pao成人永久免费视频| 亚洲综合av一区二区三区| 91在线短视频| 国产一区不卡| 欧美人与动牲交xxxxbbbb| 久久九九免费| 肉色超薄丝袜脚交| 99国产精品视频免费观看| 秋霞网一区二区三区| 亚洲午夜电影在线观看| 日韩精品在线一区二区三区| 91精品啪在线观看国产60岁| 青青国产在线| 欧美成人午夜剧场免费观看| 中文日产幕无线码一区二区| 91在线免费看网站| 蜜桃成人av| 一卡二卡三卡视频| 精品一区二区三区av| 日韩av一二区| 一区二区三区成人| 亚洲在线精品视频| 日韩hd视频在线观看| 91精选在线| 国产精品自产拍在线观| 一道本一区二区三区| 日本中文字幕一级片| 日本人妖一区二区| 久久无码人妻精品一区二区三区 | 亚洲第一在线播放| 日韩精品一区二区三区视频播放 | 久久男人的天堂| 中文字幕成人| 日韩欧美亚洲v片| 9久re热视频在线精品| 91porn在线| 亚洲欧美日韩一区二区| 久久久久精彩视频| 亚洲精品乱码久久久久久按摩观| 黄色免费在线观看| 国产精品久久久久999| 思热99re视热频这里只精品| 日韩黄色片在线| 狠狠色丁香久久婷婷综合丁香| 国产特级黄色录像| 黑丝美女久久久| 日韩在线视频观看免费| 久久91精品国产| 亚洲老司机网| 影音欧美亚洲| 日本免费新一区视频| a天堂中文字幕| 在线一区二区三区| 第三区美女视频在线| 国产成人av在线| 久久99高清| 男人亚洲天堂网| 久久综合网色—综合色88| 午夜精品久久久久久久久久久久久蜜桃| 欧美一区二区视频在线观看2022| 日本在线观看www| 国产日本欧美一区二区三区| 日韩av免费大片| 国产喷水theporn| 国产精品乱人伦| 夜夜骚av一区二区三区| 最近2019中文字幕第三页视频 | 欧美日韩久久不卡| av电影在线播放高清免费观看| 国产精品日日做人人爱| 欧美激情偷拍自拍| www.污污视频| 亚洲精品免费在线观看| 国产又黄又爽视频| 久久中文字幕在线| 综合成人在线| 男人和女人啪啪网站| 久久久精品国产免费观看同学| 成人免费一级片| 最近2019年日本中文免费字幕 | 久久久精品视频免费观看| 欧美一区二区日韩| hd国产人妖ts另类视频| 九九九久久久| 视频一区视频二区在线观看| 日本理论中文字幕| 91精品婷婷国产综合久久竹菊| 午夜小视频福利在线观看| 国产精品制服诱惑| 久久人人超碰| av资源在线免费观看| 欧美刺激脚交jootjob| 国产伦久视频在线观看| 日本一区二区三区四区高清视频| 久久精品国产**网站演员| 精品国产乱码久久久久久鸭王1| 精品电影一区二区| 日韩在线免费| 一本二本三本亚洲码| 成人午夜精品在线| 中文字幕乱伦视频| 欧美大胆a视频| 蜜臀91精品国产高清在线观看| 一女二男3p波多野结衣| 亚洲国产精品精华液网站| 国产黄色在线播放| 粉嫩av一区二区三区免费观看 | 五月婷婷久久综合| 爱久久·www| 成人综合色站| 日韩国产高清影视| 精品无码久久久久| 国产亚洲视频在线观看| 超碰精品在线观看| 婷婷丁香激情网| 亚洲国产成人va在线观看天堂| av在线天堂| 精品国产一区二区三区麻豆免费观看完整版 | a视频免费观看| 在线不卡a资源高清| 天堂av在线网| 91大学生片黄在线观看| 国产精品网站在线观看| 手机av免费在线观看|