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

MySQL索引-B+樹是如何生長的

數(shù)據(jù)庫 MySQL
本次會先從一個數(shù)據(jù)頁中如何存儲和查詢數(shù)據(jù)開始,拓展到多個數(shù)據(jù)頁中查詢數(shù)據(jù),分析無索引查詢時的低效率問題,然后通過頁分裂過渡到主鍵目錄以及索引頁相關(guān)內(nèi)容,見證一顆索引樹是如何一步步生長起來的。

[[400403]]

本文轉(zhuǎn)載自微信公眾號「石杉的架構(gòu)筆記」,作者夢。轉(zhuǎn)載本文請聯(lián)系石杉的架構(gòu)筆記公眾號。

概要

本次會先從一個數(shù)據(jù)頁中如何存儲和查詢數(shù)據(jù)開始,拓展到多個數(shù)據(jù)頁中查詢數(shù)據(jù),分析無索引查詢時的低效率問題,然后通過頁分裂過渡到主鍵目錄以及索引頁相關(guān)內(nèi)容,見證一顆索引樹是如何一步步生長起來的。

最后站在更高的角度看下常見的一些索引名詞、索引的優(yōu)缺點以及如何才能設(shè)計出更好的索引來,開始分析前我們先來思考下如下的一些面試題:

1.InnoDB的索引數(shù)據(jù)結(jié)構(gòu)是什么?為什么用這種數(shù)據(jù)結(jié)構(gòu)?

2.聚簇索引和普通索引的區(qū)別是什么?

3.什么是回表操作?它對索引有什么影響嗎?

Mysql索引的B+樹的生長流程如下圖所示:

2.B+索引樹是如何生長的

2.1 無索引時的數(shù)據(jù)查詢

數(shù)據(jù)頁是Mysql中數(shù)據(jù)管理的最小單元,既然我們要研究索引是如何高效查詢數(shù)據(jù)的,首先我們肯定要搞清楚數(shù)據(jù)是如何存放的,數(shù)據(jù)頁的結(jié)構(gòu)通過上篇文章我們了解到大概是這樣的:

而數(shù)據(jù)表中的每行數(shù)據(jù)就存放在數(shù)據(jù)區(qū)中,數(shù)據(jù)區(qū)中每行數(shù)據(jù)以單向鏈表的方式,通過指針連接起來,如下圖所示:

同時每個數(shù)據(jù)頁之間再通過雙向鏈表的方式組織連接起來,如下圖所示:

(1)無索引時的數(shù)據(jù)查詢

通過以上對數(shù)據(jù)頁以及數(shù)據(jù)頁內(nèi)部數(shù)據(jù)結(jié)構(gòu)初步的分析,現(xiàn)在我們就可以看下,如果說要查詢某張表的某行數(shù)據(jù)會經(jīng)過什么樣的流程。

數(shù)據(jù)頁一開始當(dāng)然是存放在磁盤中的,一張表對一般會應(yīng)著多個數(shù)據(jù)頁,查詢數(shù)據(jù)時從磁盤中依次加載數(shù)據(jù)頁到InnoDB的緩沖池中,然后對緩沖池中緩存頁的每行數(shù)據(jù),通過數(shù)據(jù)頁的單向鏈表一個一個去遍歷查找,如果沒有找到,那么就會順著數(shù)據(jù)頁的雙向鏈表數(shù)據(jù)結(jié)構(gòu),依次遍歷加載磁盤中的其他數(shù)據(jù)頁到緩沖池中遍歷查詢。

大家可以看到,像上面這樣的查詢方式就有點傻了,因為如果恰好你要查的數(shù)據(jù)行在這張表最后一個數(shù)據(jù)頁的最后一行,那豈不是所有的數(shù)據(jù)頁都要被掃描一遍,然后每個數(shù)據(jù)頁中也是遍歷鏈表,整體的效果就是以O(shè)(n)的時間復(fù)雜度在遍歷鏈表了,這樣查詢的性能肯定是不行的。

(2)優(yōu)化數(shù)據(jù)頁內(nèi)查詢效率-槽位

我們先把目光轉(zhuǎn)移到單個數(shù)據(jù)頁內(nèi)的數(shù)據(jù)查詢,假如說我們現(xiàn)在已經(jīng)鎖定數(shù)據(jù)就在某個數(shù)據(jù)頁中了,但是我們該怎樣快速的從這個數(shù)據(jù)頁中找到我們想要的那行數(shù)據(jù)呢?

通過之前的分析我們可以知道,最傻的一種方式就是遍歷數(shù)據(jù)頁中的單向鏈表查詢,一個節(jié)點一個節(jié)點去掃描,相對應(yīng)的查詢效率是肉眼可見的低。但是如果說可以像翻書一樣,根據(jù)目錄來減小我們查詢的范圍,相對應(yīng)的查詢效率不就上來了嗎,根據(jù)這種想法,InnoDB存儲引擎設(shè)計了槽位這種方式來組織數(shù)據(jù)頁中的多個數(shù)據(jù)行,槽位信息存放在數(shù)據(jù)頁中的數(shù)據(jù)頁目錄中。

槽位簡單來說就是將數(shù)據(jù)頁中的多個數(shù)據(jù)行分組劃分,每個數(shù)據(jù)行組都找這個組中的主鍵值最大的那個數(shù)據(jù)行的地址作為槽位的信息,這樣數(shù)據(jù)頁目錄中的一個個槽位不就是像是一個個目錄了嗎,標(biāo)記好了多個數(shù)據(jù)行分組的位置信息,如下圖所示:

這下有了數(shù)據(jù)頁目錄中的槽位信息,此時要查詢數(shù)據(jù)頁中的某行數(shù)據(jù)不就很簡答了,比如我們要查詢主鍵為4的那行數(shù)據(jù),直接通過二分法以O(shè)(logn)的時間復(fù)雜度鎖定數(shù)據(jù)頁目錄中的槽位2,因為槽位之間都是緊密連接的,可以通過槽位2找到槽位1,從槽位1末尾開始,對分組2中的數(shù)據(jù)開始遍歷,因為每個分組中的數(shù)據(jù)量都很少,此時在這么小的范圍內(nèi)簡單遍歷下就可以快速找到主鍵為4的那行數(shù)據(jù),時間復(fù)雜度從之前的O(n)降低到O(logn)效率還是挺可觀的。

但是如果你不是通過主鍵去查詢的,槽位此時就排不上用場,你還得一個一個遍歷數(shù)據(jù)頁中的單向鏈表去找到你想要的那行數(shù)據(jù)。

2.2 索引的前夕-頁分裂

這里我們先來個小插曲,簡單了解下頁分裂,這塊內(nèi)容也是后面索引機制能夠正常運行的基礎(chǔ)。

我們都知道一個數(shù)據(jù)頁就是16KB大小,當(dāng)一個數(shù)據(jù)頁中的數(shù)據(jù)行足夠多時就會重新創(chuàng)建一個數(shù)據(jù)頁繼續(xù)寫數(shù)據(jù)行,如果說我們沒有用到索引還好,但是如果我們要在表中創(chuàng)建索引,那么對多個數(shù)據(jù)頁中的數(shù)據(jù)就有約束了。

如果新創(chuàng)建的數(shù)據(jù)頁中的數(shù)據(jù)行的主鍵值,存在比它上一個數(shù)據(jù)頁的主鍵值還小的情況,這種情況是不被允許的,如下圖所示:

如果出現(xiàn)上圖的情況,多個數(shù)據(jù)頁之間的主鍵就無序了,而索引機制的實現(xiàn)是要基于多個數(shù)據(jù)頁主鍵的大小是依次遞增的,所以此時就會出現(xiàn)頁分裂的情況。

其實頁分裂目的也很明確,就是調(diào)整下不同數(shù)據(jù)頁的數(shù)據(jù)順序,使得最終按順序創(chuàng)建的索引頁之間,后一個數(shù)據(jù)頁中的每一個數(shù)據(jù)行的主鍵值都要大于上一個數(shù)據(jù)頁,當(dāng)然一個數(shù)據(jù)頁中當(dāng)然是按照單向鏈表的方式依次遞增的,頁分裂流程如下圖所示:

我們可以看到頁分裂主要就是調(diào)整了下數(shù)據(jù)頁之間數(shù)據(jù)行的數(shù)據(jù)的順序,使得多個數(shù)據(jù)頁之間的主鍵值是按照順序來存放的,在這樣有序的數(shù)據(jù)中,高效查詢才變得可能。

頻繁的出現(xiàn)頁分裂情況,畢竟頁分裂要涉及到數(shù)據(jù)的移動,在性能上也是會有損耗的,這也警示我們減少頁分裂的出現(xiàn)概率是非常有必要的,在設(shè)計表結(jié)構(gòu)時我們可以盡量使用主鍵自增長的方式,而不是用很難保證主鍵順序的自定義創(chuàng)建主鍵的方式,使用主鍵自增長方式,能大大避免說數(shù)據(jù)頁之間主鍵大小出現(xiàn)順序錯亂的問題,減少頁分裂發(fā)生的概率。

2.3從主鍵目錄到索引頁

查詢一行數(shù)據(jù),在物理層面就是定位到哪一個數(shù)據(jù)頁中的哪一行數(shù)據(jù)。在數(shù)據(jù)頁中定位數(shù)據(jù)的問題,在之前我們已經(jīng)通過槽位的方式優(yōu)化了查詢的效率,現(xiàn)在我們要解決的是如何在大量的數(shù)據(jù)頁中定位數(shù)據(jù)頁,這就是索引的目標(biāo)。

(1)主鍵目錄

InnoDB存儲引擎一開始是使用主鍵目錄的方式,將數(shù)據(jù)頁號和數(shù)據(jù)頁最小的主鍵值作為一條記錄,如下圖所示:

這樣的話,我們要查哪一條數(shù)據(jù)就不用掃描一個數(shù)據(jù)頁內(nèi)的所有數(shù)據(jù)再掃描下一個了,直接通過id去主鍵目錄看一下,通過二分查找定位到具體哪個數(shù)據(jù)頁,然后數(shù)據(jù)頁內(nèi)部通過定位槽位,遍歷那個槽位對應(yīng)數(shù)據(jù)行分組找到具體的一行數(shù)據(jù)。

(2)索引頁

現(xiàn)在有一個問題就是,每張表對應(yīng)的數(shù)據(jù)頁都有很多,主鍵目錄就會有大量的數(shù)據(jù)、就有可能放不下,這時InnoDB設(shè)計者們就想存放目錄數(shù)據(jù)也是數(shù)據(jù)啊,為什么不可以使用數(shù)據(jù)頁來放呢,就這樣主鍵目錄的信息就被移到數(shù)據(jù)頁來了,而這些數(shù)據(jù)頁就被稱為索引頁,如下圖所示:

從這里我們可以知道數(shù)據(jù)頁肯定不是簡單只存放數(shù)據(jù)表中的數(shù)據(jù)的。好了,現(xiàn)在主鍵目錄由于容量有限,我們把主鍵目錄信息移動到了數(shù)據(jù)頁中形成了索引頁,但同樣的問題不還是會出現(xiàn)嗎,一個數(shù)據(jù)頁的大小也才16KB,索引頁本身的容量也是有限的,容量不夠了該怎么辦呢?

為了解決索引頁容量不夠的問題,索引頁會重新創(chuàng)建和升級,先把超出容量的數(shù)據(jù)放到一個新的索引頁中,然后再加一層索引頁,如下圖所示:

由上圖我們可以看到,新的一層索引頁35它存放的就不是最小主鍵對應(yīng)的數(shù)據(jù)頁目錄了,而是最小主鍵對應(yīng)的索引頁目錄了,以此類推如果索引頁35這里容量也不夠呢,那就繼續(xù)往上一層擴展啊,最終效果看起來就像下面一樣:

大家看出來了嗎,由索引頁一層一層組成的結(jié)構(gòu)不就是我們經(jīng)常說的索引樹嗎,而這棵樹在mysql中稱之為B+索引樹。

樹這種數(shù)據(jù)結(jié)構(gòu)天然可以使用二分法查詢,所以現(xiàn)在如果我們要查詢一條數(shù)據(jù),從樹的根節(jié)點開始通過二分法查找,以O(shè)(logn)的時間復(fù)雜度鎖定數(shù)據(jù)頁,然后在數(shù)據(jù)頁中同樣使用二分法鎖定槽位,在槽位中簡單遍歷下不就找到數(shù)據(jù)了嗎,相比于沒有索引的場景,速度那可是相當(dāng)快了。

3.聚簇索引、普通索引和覆蓋索引

關(guān)于索引有一些常見的名詞我們需要加以區(qū)分。

首先聚簇索引就是像我們上面看到的一棵樹一樣,它的葉子節(jié)點是一個個數(shù)據(jù)頁,這些數(shù)據(jù)頁中存放的都是數(shù)據(jù)表中每一行的完整數(shù)據(jù),所以說如果B+樹是以完整數(shù)據(jù)的數(shù)據(jù)頁為葉子節(jié)點的,我們把這個索引樹稱為聚簇索引;如果一個索引的索引樹,葉子節(jié)點不是以數(shù)據(jù)頁為葉子節(jié)點的,就稱為二級索引或普通索引。

聚簇索引和普通索引最大的區(qū)別就是,聚簇索引的葉子節(jié)點存放了數(shù)據(jù)行的完整數(shù)據(jù),而二級索引葉子節(jié)點只有數(shù)據(jù)的部分字段。

而覆蓋索引本身并不是一種索引,而是一種查詢數(shù)據(jù)的方式,比如我們對表table中的字段name建立了索引,然后我們執(zhí)行查詢?nèi)纾簊elect name from table where name like '張%',此時直接從name字段對應(yīng)的B+樹種查詢到對應(yīng)的一批name值,然后直接就返回就行了,也就是說我們想要的字段name它本來就在索引上,我們直接通過二分法高效的從樹上直接摘下來就行了,而這種查詢方式就稱為覆蓋索引。

當(dāng)然相比于覆蓋索引方式,如果查詢改為:select * from table where name like '張%',這就不是覆蓋索引了,因為此時你不光要從索引樹上找到具體的name,還要利用id值回表查詢所有的字段。

4.索引的優(yōu)缺點分析

索引的優(yōu)點當(dāng)然就是高效查詢數(shù)據(jù),索引將遍歷鏈表的O(n)的查詢時間復(fù)雜度優(yōu)化為了O(logn)的時間復(fù)雜度。

但是索引的缺點也是很明顯的,首先在時間角度上,它必須要求主鍵是要按順序增長的,無序的主鍵會帶來頻繁的頁分裂,影響效率;對數(shù)據(jù)庫表的增刪改操作的同時也需要維護索引,這部分的維護也是一塊性能損耗點;在空間角度上:索引相關(guān)的數(shù)據(jù)和實際數(shù)據(jù)一樣都是要占內(nèi)存空間的。

所以索引雖然能夠提高查詢效率,但是同時也要承擔(dān)它給我們的系統(tǒng)帶來的性能損耗,從這點上來看索引并不是建的越多越好。

5.三個維度設(shè)計好索引

下面我們從以下三個維度優(yōu)化下索引的設(shè)計

(1)首先我們從時間角度上

我們需要為了避免頻繁的頁分裂,需要盡可能使用主鍵自增長等方式,保證新增的數(shù)據(jù)頁中的數(shù)據(jù)行的主鍵都是遞增,避免不必要的頁分裂帶來的性能損耗和拖慢查詢效率。

另外選擇合適的字段作為索引字段也很重要,需要選擇基數(shù)較大的字段,也就是一個字段可能出現(xiàn)的值比較多,這樣我們在B+樹中查詢時,才能最高效的發(fā)揮出二分法查詢的威力,如果建立索引的字段基數(shù)比較小可能查詢時二分查找就會退化成時間復(fù)雜度為O(n)的線性查詢了。

(2)空間的角度上

因為索引數(shù)據(jù)本身也是要占空間的,可以選擇字段長度較小的作為索引字段,這樣整棵B+樹不至于那么占空間。

但是如果非得要以長字段作為索引也不是不行,可以采用折中的以字段的前綴作為索引,這樣的索引也稱為前綴索引,但是這樣可能只能用在模糊查詢上了,用在group by和order by上就不太適合了。

(3)作用范圍上

當(dāng)然我們設(shè)計索引的目的,當(dāng)然是為了更好的用上索引,索引在設(shè)計時,盡可能讓where、group by、order by這些語句都能用上索引。

6.面試題剖析

(1)InnoDB的索引數(shù)據(jù)結(jié)構(gòu)是什么?為什么用這種數(shù)據(jù)結(jié)構(gòu)?

(2)聚簇索引、普通索引區(qū)別是什么?

(3)什么是回表操作?它對索引有什么影響嗎?

 

責(zé)任編輯:武曉燕 來源: 石杉的架構(gòu)筆記
相關(guān)推薦

2019-08-29 10:46:22

MySQL索引數(shù)據(jù)庫

2020-04-01 18:08:57

MySQL B-樹B+樹

2019-01-29 19:43:10

MySQL索引數(shù)據(jù)庫

2021-02-16 16:38:41

MySQLB+樹索引

2019-09-24 09:33:53

MySQLB+樹InnoDB

2022-03-28 08:24:52

MySQL聚簇索引非聚簇索引

2025-11-03 16:30:44

2020-02-12 19:01:22

索引B-樹B+樹

2024-05-22 09:01:53

InnoDBB+索引

2019-03-14 09:51:50

MySQL存儲邏輯架構(gòu)

2021-04-19 10:03:33

MongoDbB 樹 B+ 樹

2020-03-19 07:53:56

Mysql引擎B+樹

2022-04-16 14:20:29

MySQL數(shù)據(jù)庫

2024-11-19 08:40:18

2020-03-30 17:20:54

B+樹SQL索引

2021-09-04 11:31:00

MYSQLSQL調(diào)優(yōu)

2025-09-17 07:56:32

2023-07-31 09:12:39

B+樹節(jié)點B+Tree

2023-09-27 09:39:08

Java優(yōu)化

2021-06-02 10:23:06

索引B+樹數(shù)據(jù)
點贊
收藏

51CTO技術(shù)棧公眾號

亚洲一区二区三区高清视频| 成人免费无遮挡无码黄漫视频| 直接在线观看的三级网址| 国产一区二区三区免费看| 久久久亚洲福利精品午夜| 亚洲av无码成人精品国产 | 97超级碰碰碰| 青青青视频在线播放| 视频精品一区二区三区| 色偷偷88欧美精品久久久| 婷婷视频在线播放| 天天舔天天干天天操| 麻豆成人久久精品二区三区红| 久久久久久久影院| 国产在视频线精品视频| 久久99偷拍| 欧美久久久久免费| 国产91xxx| 国产不卡在线| 97se狠狠狠综合亚洲狠狠| 成人免费黄色网| 激情五月婷婷网| 黄色另类av| 最近中文字幕mv在线一区二区三区四区| 日本黄色三级网站| 素人啪啪色综合| 午夜久久久久久久久久一区二区| 一区二区三区免费看| 日本视频在线观看一区二区三区| 国产99久久精品| 国产欧美中文字幕| 人妻 日韩精品 中文字幕| 国内揄拍国内精品久久| www.日韩.com| 日韩av片在线| 国产a久久精品一区二区三区| 亚洲精品一区二区精华| 超碰中文字幕在线观看| 欧美日韩视频免费看| 日本韩国一区二区三区视频| 国产a级片网站| 日韩电影免费观看| 亚洲色图19p| 一区高清视频| 日本韩国在线视频爽| 国产亚洲欧洲997久久综合| 久久精品国产精品青草色艺| 亚洲国产精品欧美久久| 国产精品一区二区免费不卡| 91久久久久久久久久久久久| 中文字幕免费播放| 毛片av一区二区三区| 国产精品免费视频久久久| 国产第一页在线观看| 男人的天堂成人在线| 91大神在线播放精品| 久久久久久久久久久久久av| 亚洲欧洲综合| 91po在线观看91精品国产性色| 中日韩精品视频在线观看| 国产精品大片免费观看| 久久久人成影片一区二区三区观看 | 欧美男男freegayvideosroom| 欧美一区二区三区喷汁尤物| 色偷偷中文字幕| 欧美日本三级| 亚洲аv电影天堂网| 91玉足脚交白嫩脚丫| 丝袜久久网站| 亚洲小视频在线| 永久免费观看片现看| 色综合天天爱| 操人视频在线观看欧美| 久草免费在线视频观看| 亚洲久久一区二区| 国产经典一区二区| 中文字幕有码视频| 国产精品88av| 久久久神马电影| 成年人在线看| 亚洲欧美另类小说| 日韩五码在线观看| 另类图片综合电影| 欧美高清激情brazzers| 4438x全国最大成人| 欧美性生活一级片| 一区三区二区视频| 在线观看成人毛片| 国产精品嫩草99av在线| 国产精品美女视频网站| 国产日韩一级片| 99精品热视频| 伊人久久大香线蕉午夜av| 污片在线免费观看| 色婷婷精品大在线视频| 五月天婷婷影视| 日韩a级大片| 日韩视频免费在线| 日本中文字幕网| 免费精品视频在线| 成人av免费在线看| 国产黄色在线| 亚洲国产日韩一区二区| 国产天堂在线播放| 18国产精品| 深夜福利亚洲导航| 国产成人一区二区三区影院在线| 看片的网站亚洲| 九九99久久| 国产区在线看| 色婷婷综合久久久久中文| 91人妻一区二区三区| 久久91精品| 性视频1819p久久| 一区二区国产欧美| 久久久久久久综合| 国产精品入口芒果| 精品国产麻豆| 色哟哟入口国产精品| 天堂а√在线中文在线新版| 国产高清成人在线| 一区二区三区不卡在线| 激情开心成人网| 日韩久久免费视频| 国产精品 欧美 日韩| 国产一区二区在线影院| 亚洲精品免费在线看| 国模精品视频| 精品国产电影一区二区| 一级性生活免费视频| 久久在线91| 久久久久久久久一区二区| 五月花成人网| 日韩精品一区二区三区中文不卡 | 国产精品美女网站| 免费在线观看污视频| 五月天精品一区二区三区| 熟妇女人妻丰满少妇中文字幕| 色综合咪咪久久网| 国产精品男女猛烈高潮激情| 高清在线观看av| 色婷婷亚洲一区二区三区| 欧美图片一区二区| 99香蕉国产精品偷在线观看 | 成人欧美精品一区二区| 欧美区日韩区| 成人免费看片网站| 牛牛电影国产一区二区| 日韩免费视频线观看| 国产黄在线免费观看| 精品一区二区三区蜜桃| 亚洲精品美女久久7777777| 国产精品99| 久久久成人的性感天堂| h片在线免费看| 一区二区三区日韩欧美| 精品无码av一区二区三区| 欧美日韩国产成人精品| 国产伦一区二区三区色一情 | 国产精品劲爆视频| 在线观看麻豆| 在线成人免费观看| www.av成人| 高清不卡一区二区在线| 亚洲 自拍 另类小说综合图区| 全球av集中精品导航福利| 5566成人精品视频免费| 日本不卡视频一区二区| 在线观看亚洲专区| 蜜桃av.com| 成人永久aaa| 无码人妻精品一区二区三区在线| 免费看日本一区二区| 国产精品免费看久久久香蕉| a篇片在线观看网站| 亚洲国产精品久久| 无码人妻精品一区二| 国产精品久久久久7777按摩| 日韩av成人网| 丝袜诱惑制服诱惑色一区在线观看 | 亚洲欧美日韩三级| 欧美一区二区三区久久精品| 精品一区二区国产| 91精品美女| 欧美精品videos性欧美| 欧美视频综合| 欧美福利视频导航| 亚洲另类欧美日韩| 中文字幕一区二区不卡| 日本国产在线视频| 日本大胆欧美人术艺术动态| 免费看污污视频| 九九综合在线| 懂色一区二区三区av片| 桃色一区二区| 九九视频这里只有精品| 欧美在线观看在线观看| 日韩免费看网站| 91黑人精品一区二区三区| 一二三区精品视频| 欧美激情 一区| 成人激情小说乱人伦| 成年人在线观看视频免费| 激情久久五月| 亚洲永久一区二区三区在线| 老汉色老汉首页av亚洲| 成人免费视频网址| 欧洲一区二区三区精品| 欧美黑人巨大xxx极品| p色视频免费在线观看| 精品国产sm最大网站免费看| 在线观看中文字幕网站| 五月天精品一区二区三区| 亚洲最大的黄色网址| 国产日韩视频一区二区三区| 中国xxxx性xxxx产国| 激情图片小说一区| 青青在线视频免费| 亚洲毛片在线| 精品一区二区三区无码视频| 999精品色在线播放| 日本一区二区三区免费看| 久久久亚洲欧洲日产| 亚洲综合中文字幕68页| 国产第一亚洲| 国产精品久久久久久av福利软件| 欧美久久天堂| 久久久噜噜噜久久中文字免| 污视频在线免费观看网站| 久久亚洲成人精品| 午夜精品一区| 日韩中文字幕在线| 91精彩视频在线观看| 亚洲免费av片| 天堂在线一二区| 日韩av在线不卡| 秋霞视频一区二区| 亚洲成人aaa| 丰满人妻一区二区三区无码av| 91精品啪在线观看国产60岁| 一区二区小视频| 精品视频999| 黄色污污视频软件| 在线欧美一区二区| 青娱乐在线免费视频| 色香蕉成人二区免费| 无码免费一区二区三区| 色婷婷综合久久久久中文一区二区 | 老司机午夜免费福利| 国产成人精品www牛牛影视| www.偷拍.com| 国产.精品.日韩.另类.中文.在线.播放| 欧美污在线观看| 国产成人99久久亚洲综合精品| 久久久久久国产精品日本| 国产乱码精品一区二区三| 蜜桃视频无码区在线观看| 国产老妇另类xxxxx| 亚洲熟女一区二区三区| 成人成人成人在线视频| 99久久人妻无码中文字幕系列| 99国产精品视频免费观看| 少妇毛片一区二区三区| 久久九九99视频| 波多野结衣家庭教师在线观看 | 在线免费一区| 欧美黄色免费| www一区二区www免费| 秋霞影院一区二区| 日本黄色一级网站| 97久久人人超碰| 懂色av粉嫩av浪潮av| 亚洲欧美乱综合| 中日韩精品视频在线观看| 91高清视频免费看| 国产麻豆91视频| 日韩av网站大全| yw在线观看| 美日韩丰满少妇在线观看| а√天堂中文在线资源8| 国产成人精品免高潮费视频| 日韩一级视频| 国产一区二区三区无遮挡| 国产区精品区| 在线观看17c| 性欧美精品高清| 日韩成人av免费| 99国内精品久久| 日韩在线不卡av| 精品免费在线视频| 一区二区www| 精品一区二区三区三区| 老司机精品影院| 91高清视频免费观看| 国产情侣一区二区三区| 国产精品一区二区三区不卡| 欧美综合在线视频观看 | 久久天堂成人| 日本肉体xxxx裸体xxx免费| 粉嫩嫩av羞羞动漫久久久| 久久精品无码一区| 亚洲蜜桃精久久久久久久| 人妻丰满熟妇av无码区| 日韩欧美国产wwwww| 成年人视频网站在线| 久久免费视频观看| 涩涩涩久久久成人精品| 免费成人av网站| 黄色精品免费| 黄色三级视频在线播放| 国产亚洲欧美在线| 日韩欧美视频在线免费观看| 91麻豆精品国产91久久久久久久久 | 丰满白嫩尤物一区二区| 国产午夜精品久久久久久久久| 五月综合激情日本mⅴ| 国产精品国产精品国产专区| 亚洲免费视频一区二区| 久久男人天堂| 成人在线观看91| 91精品一区二区三区综合在线爱| 乱子伦视频在线看| 95精品视频在线| 国产无遮挡又黄又爽又色| 日韩午夜在线观看视频| 日韩欧美小视频| 国产精品一区二区三区毛片淫片| 亚洲人和日本人hd| 波多野结衣乳巨码无在线| 粉嫩绯色av一区二区在线观看| 无码黑人精品一区二区| 欧美日韩国产精品自在自线| a视频网址在线观看| 国产91在线高潮白浆在线观看| 国产香蕉精品| 日韩一级片免费视频| 国产精品一区二区久久精品爱涩 | 97人妻精品一区二区三区免费| 亚洲精品视频观看| 国产喷水福利在线视频| 久久精品国产欧美激情| 色8久久久久| 宅男一区二区三区| 精品一区二区三区的国产在线播放| www久久久久久久| 在线免费观看日韩欧美| 成人高清免费在线播放| 国产精品夫妻激情| 成人免费看片39| 手机免费av片| 亚洲毛片av在线| 朝桐光av在线一区二区三区| 欧美疯狂性受xxxxx另类| 超碰精品在线| 中文字幕无码精品亚洲35| 99久久久国产精品| 久久久成人免费视频| 国产亚洲精品久久久久久牛牛| 国产 日韩 欧美一区| 亚洲第一导航| 国产主播一区二区三区| 久久久久久久久精| 亚洲国产美女精品久久久久∴| 激情国产在线| 视频一区二区三区在线观看| 老司机精品视频在线| 青娱乐在线视频免费观看| 精品国产制服丝袜高跟| 国产拍在线视频| 日韩欧美精品在线不卡| 国产一区二区三区四区五区美女 | 欧美激情视频在线播放| 91成人免费视频| 99re国产精品| 亚洲av毛片基地| 日韩欧美一二三| 涩涩视频网站在线观看| 亚洲国产精品一区在线观看不卡 | 美国十次了思思久久精品导航| 日本福利片在线观看| 亚洲国产精品成人va在线观看| 四虎4545www国产精品| 中国一级大黄大黄大色毛片| 91亚洲国产成人精品一区二区三| 国产第一页在线观看| 欧美成人免费网| 最新国产精品视频| 欧美又黄又嫩大片a级| 欧美日韩国产一区中文午夜| 91视频在线观看| 国内成+人亚洲| 精品一区二区三区久久| 在线观看亚洲天堂| 久久精品2019中文字幕| 日韩成人av在线资源| 色黄视频免费看| 色天使色偷偷av一区二区| 在线看女人毛片| 亚洲国产精品综合| 91亚洲国产成人精品一区二区三|