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

全網(wǎng)都在說(shuō)一個(gè)錯(cuò)誤的結(jié)論,真的錯(cuò)了嗎?

數(shù)據(jù)庫(kù) MySQL
聯(lián)合索引的最左匹配原則,在遇到范圍查詢(如 >、<)的時(shí)候,就會(huì)停止匹配,也就是范圍查詢的字段可以用到聯(lián)合索引,但是在范圍查詢字段后面的字段無(wú)法用到聯(lián)合索引。注意,對(duì)于 >=、<=、BETWEEN、like 前綴匹配的范圍查詢,并不會(huì)停止匹配。

大家好,我是小林。

大家在背 MySQL 八股文的時(shí)候,是不是經(jīng)常看到這句話。

聯(lián)合索引的最左匹配原則會(huì)一直向右匹配直到遇到范圍查詢(>、<、between、like) 就會(huì)停止匹配。

我隨手在網(wǎng)上搜了下, 基本全部都是這個(gè)結(jié)論,似乎這個(gè)結(jié)論大家都耳濡目染了,應(yīng)該大多數(shù)人都覺(jué)得這個(gè)結(jié)論是正確的吧。

圖片

我在昨晚折騰了幾個(gè)實(shí)驗(yàn),發(fā)現(xiàn)這個(gè)結(jié)論并不全對(duì)!去掉 「between 和 like 」這個(gè)結(jié)論就沒(méi)問(wèn)題了。

經(jīng)過(guò)實(shí)驗(yàn)的證明,我得出的結(jié)論是這樣的:

聯(lián)合索引的最左匹配原則,在遇到范圍查詢(如 >、<)的時(shí)候,就會(huì)停止匹配,也就是范圍查詢的字段可以用到聯(lián)合索引,但是在范圍查詢字段后面的字段無(wú)法用到聯(lián)合索引。但是,對(duì)于 >=、<=、BETWEEN、like 前綴匹配這四種范圍查詢,并不會(huì)停止匹配。

接下來(lái),我會(huì)用幾個(gè)實(shí)驗(yàn)例子來(lái)說(shuō)明這個(gè)結(jié)論。

圖片

B+Tree 索引

首先,先來(lái)認(rèn)識(shí)下 B+Tree 索引。

MySQL 的 InnoDB 存儲(chǔ)引擎會(huì)為每一張數(shù)據(jù)庫(kù)表創(chuàng)建一個(gè)「聚簇索引」來(lái)保存表的數(shù)據(jù),聚簇索引默認(rèn)使用的是 B+Tree 索引。

為了讓大家理解 B+Tree 索引的存儲(chǔ)和查詢的過(guò)程,接下來(lái)我通過(guò)一個(gè)簡(jiǎn)單例子,說(shuō)明一下 B+Tree 索引在存儲(chǔ)數(shù)據(jù)中的具體實(shí)現(xiàn)。

假設(shè)有一張商品表,表里有這些數(shù)據(jù):

圖片

這些數(shù)據(jù),存儲(chǔ)在 B+Tree 索引時(shí)是長(zhǎng)什么樣子的?

B+Tree 是一種多叉樹(shù),葉子節(jié)點(diǎn)才存放數(shù)據(jù),非葉子節(jié)點(diǎn)只存放索引,而且每個(gè)節(jié)點(diǎn)里的數(shù)據(jù)是按主鍵值(id)順序存放的,每一層父節(jié)點(diǎn)的索引值都會(huì)出現(xiàn)在下層子節(jié)點(diǎn)的索引值中,因此在葉子節(jié)點(diǎn)中,包括了所有的索引值信息,并且每一個(gè)葉子節(jié)點(diǎn)都指向下一個(gè)葉子節(jié)點(diǎn),形成一個(gè)鏈表,便于范圍查詢。

聚簇索引的 B+Tree 如圖所示:

圖片

假設(shè),執(zhí)行了  select * from t_product where id = 5 查詢語(yǔ)句,該查詢語(yǔ)句的條件是找到 id(主鍵)為 5 的這條記錄。因?yàn)?B+Tree 是一個(gè)有序的數(shù)據(jù)結(jié)構(gòu),所以可以通過(guò)二分查找算法快速定位到這條記錄,這也就是我們常說(shuō)的索引查詢,具體過(guò)程如下:

  • 從根節(jié)點(diǎn)開(kāi)始,將 5 與根節(jié)點(diǎn)的索引數(shù)據(jù) (1,10,20) 比較,5 在 1 和 10 之間,根據(jù)二分查找算法,找到第二層的索引數(shù)據(jù) (1,4,7);
  • 在第二層的索引數(shù)據(jù) (1,4,7)中進(jìn)行查找,因?yàn)?5 在 4 和 7 之間,根據(jù)二分查找算法,找到第三層的索引數(shù)據(jù)(4,5,6);
  • 在葉子節(jié)點(diǎn)的索引數(shù)據(jù)(4,5,6)中進(jìn)行查找,然后我們找到了索引值為 5 的這條記錄。

聚簇索引只能用于主鍵字段的快速查詢,如果想實(shí)現(xiàn)「非主鍵字段」的快速查詢,我們就要針對(duì)「非主鍵字段」創(chuàng)建索引,這種索引稱作為「二級(jí)索引」。二級(jí)索引同樣基于 B+Tree 實(shí)現(xiàn)的,不過(guò)二級(jí)索引的葉子節(jié)點(diǎn)存放的是主鍵值,不是實(shí)際數(shù)據(jù)。

我這里將前面的商品表中的 product_no (商品編碼)字段設(shè)置為二級(jí)索引,那么二級(jí)索引的 B+Tree 如下圖,其中非葉子的索引值是 product_no(圖中橙色部分),葉子節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù)是主鍵值(圖中綠色部分)。

圖片

如果我用 product_no 二級(jí)索引查詢商品,如下查詢語(yǔ)句:

select * from product where product_no = '0002';

會(huì)先在二級(jí)索引的 B+Tree 中快速查找到 product_no 為 0002 的二級(jí)索引記錄,然后獲取主鍵值,然后利用主鍵值在主鍵索引的 B+Tree 中快速查詢到對(duì)應(yīng)的葉子節(jié)點(diǎn),然后獲取完整的記錄。這個(gè)過(guò)程叫「回表」,也就是說(shuō)要查兩個(gè) B+Tree 才能查到數(shù)據(jù)。如下圖:

圖片

不過(guò),當(dāng)查詢的數(shù)據(jù)是能在二級(jí)索引的 B+Tree 的葉子節(jié)點(diǎn)里查詢到,這時(shí)就不用再查主鍵索引查,比如下面這條查詢語(yǔ)句:

select id from product where product_no = '0002';

這種在二級(jí)索引的 B+Tree 就能查詢到結(jié)果的過(guò)程就叫作「覆蓋索引」,也就是只需要查一個(gè) B+Tree 就能找到數(shù)據(jù)。

什么是聯(lián)合索引?

前文我將 product_no 字段設(shè)置為了索引,這種二級(jí)索引只有一個(gè)字段。如果將多個(gè)字段組合成一個(gè)索引,那么這種二級(jí)索引就被稱為聯(lián)合索引。

比如,將商品表中的 product_no 和 name 字段組合成聯(lián)合索引`(product_no, name)``,創(chuàng)建聯(lián)合索引的方式如下:

CREATE INDEX index_product_no_name ON product(product_no, name);

聯(lián)合索引 ``(product_no, name)` 的 B+Tree 示意圖如下:

圖片

可以看到,聯(lián)合索引的非葉子節(jié)點(diǎn)用兩個(gè)字段的值作為 B+Tree 的索引值。

聯(lián)合索引的 B+Tree 是先按 product_no 進(jìn)行排序,然后再 product_no 相同的情況再按 name 字段排序。記住這句話,很重要!

最左匹配原則

使用聯(lián)合索引時(shí),存在最左匹配原則,也就是按照最左優(yōu)先的方式進(jìn)行索引的匹配。

在使用聯(lián)合索引進(jìn)行查詢的時(shí)候,如果不遵循「最左匹配原則」,聯(lián)合索引會(huì)失效,這樣就無(wú)法利用到索引快速查詢的特性了。

比如,如果創(chuàng)建了一個(gè) (a, b, c) 聯(lián)合索引,如果查詢條件是以下這幾種,就可以利用聯(lián)合索引:

  • where a=1;
  • where a=1 and b=2 and c=3;
  • where a=1 and b=2;

需要注意的是,因?yàn)橛胁樵儍?yōu)化器,所以 a 字段在 where 子句的順序并不重要。但是,如果查詢條件是以下這幾種,因?yàn)椴环献钭笃ヅ湓瓌t,所以就無(wú)法匹配上聯(lián)合索引,聯(lián)合索引就會(huì)失效:

  • where b=2;
  • where c=3;
  • where b=2 and c=3;

上面這些查詢條件之所以會(huì)失效,是因?yàn)?a, b, c) 聯(lián)合索引,是先按 a 排序,在 a 相同的情況再按 b 排序,在 b 相同的情況再按 c 排序。所以,b 和 c 是全局無(wú)序,局部相對(duì)有序的,這樣在沒(méi)有遵循最左匹配原則的情況下,是無(wú)法利用到索引的。

我這里舉聯(lián)合索引(a,b)的例子,該聯(lián)合索引的 B+ Tree 如下:

圖片

可以看到,a 是全局有序的(1, 2, 2, 3, 4, 5, 6, 7 ,8),而 b 是全局是無(wú)序的(12,7,8,2,3,8,10,5,2)。因此,直接執(zhí)行 where b = 2 這種查詢條件沒(méi)有辦法利用聯(lián)合索引的,利用索引的前提是索引里的 key 是有序的。

只有在 a 相同的情況才,b 才是有序的,比如 a 等于 2 的時(shí)候,b 的值為(7,8),這時(shí)就是有序的,這個(gè)有序狀態(tài)是局部的,因此,執(zhí)行 where a = 2 and b = 7 這種查詢條件時(shí), a 和 b 字段能用到聯(lián)合索引的,也就是聯(lián)合索引生效了。

聯(lián)合索引范圍查詢

聯(lián)合索引有一些特殊情況,并不是查詢過(guò)程使用了聯(lián)合索引查詢,就代表聯(lián)合索引中的所有字段都用到了聯(lián)合索引進(jìn)行索引查詢,也就是可能存在部分字段用到聯(lián)合索引的 B+Tree,部分字段沒(méi)有用到聯(lián)合索引的 B+Tree 的情況。

這種特殊情況就發(fā)生在范圍查詢。也就是文章開(kāi)頭的那句話:聯(lián)合索引的最左匹配原則會(huì)一直向右匹配直到遇到「范圍查詢」就會(huì)停止匹配。也就是范圍查詢的字段可以用到聯(lián)合索引,但是范圍查詢字段的后面的字段無(wú)法用到聯(lián)合索引。

范圍查詢有很多種,那到底是哪些范圍查詢會(huì)導(dǎo)致聯(lián)合索引的最左匹配原則會(huì)停止匹配呢?

接下來(lái),舉例幾個(gè)范圍查詢的例子,下面的實(shí)驗(yàn)案例是基于 MySQL 8.0 做的。

例子一

Q1: select * from t_table where a > 1 and b = 2,聯(lián)合索引(a, b)哪一個(gè)字段用到了聯(lián)合索引的 B+Tree?

由于聯(lián)合索引(二級(jí)索引)是先按照 a 字段的值排序的,所以符合 a > 1 條件的二級(jí)索引記錄肯定是相鄰的,于是在進(jìn)行索引掃描的時(shí)候,可以定位到符合 a > 1 條件的第一條記錄,然后沿著記錄所在的鏈表向后掃描,直到某條記錄不符合 a > 1 條件位置。所以 a 字段可以在聯(lián)合索引的 B+Tree 中進(jìn)行索引查詢。

但是在符合 a > 1 條件的二級(jí)索引記錄的范圍里,b 字段的值是無(wú)序的。

比如,下圖的聯(lián)合索引的 B+ Tree 里:

圖片

下面這三條記錄的 a 字段的值都符合 a > 1 查詢條件,而 b 字段的值是無(wú)序的:

  • a 字段值為 5 的記錄,該記錄的 b 字段值為 8;
  • a 字段值為 6 的記錄,該記錄的 b 字段值為 10;
  • a 字段值為 7 的記錄,該記錄的 b 字段值為 5;

因此,我們不能根據(jù)查詢條件 b = 2 來(lái)進(jìn)一步減少需要掃描的記錄數(shù)量(b 字段無(wú)法利用聯(lián)合索引進(jìn)行索引查詢的意思)。

所以在執(zhí)行 Q1 這條查詢語(yǔ)句的時(shí)候,對(duì)應(yīng)的掃描區(qū)間是 (2, + ∞),形成該掃描區(qū)間的邊界條件是 a > 1,與 b = 2 無(wú)關(guān)。

因此,Q1 這條查詢語(yǔ)句只有 a 字段用到了聯(lián)合索引進(jìn)行索引查詢,而 b 字段并沒(méi)有使用到聯(lián)合索引。

我們也可以在執(zhí)行計(jì)劃中的 key_len 知道這一點(diǎn),在使用聯(lián)合索引進(jìn)行查詢的時(shí)候,通過(guò) key_len 我們可以知道優(yōu)化器具體使用了多少個(gè)字段的查詢條件來(lái)形成掃描區(qū)間的邊界條件。

舉例個(gè)例子 ,a 和 b 都是 int 類型且不為 NULL 的字段,那么 Q1 這條查詢語(yǔ)句執(zhí)行計(jì)劃如下:

圖片

可以看到 key_len 為 4 字節(jié)(如果字段允許為 NULL,就在字段類型占用的字節(jié)數(shù)上加 1,也就是 5 字節(jié)),說(shuō)明只有 a 字段用到了聯(lián)合索引進(jìn)行索引查詢,而且可以看到,即使 b 字段沒(méi)用到聯(lián)合索引,key 為 idx_a_b,說(shuō)明 Q1 查詢語(yǔ)句使用了 idx_a_b 聯(lián)合索引。

通過(guò) Q1 查詢語(yǔ)句我們可以知道,a 字段使用了 > 進(jìn)行范圍查詢,聯(lián)合索引的最左匹配原則在遇到 a 字段的范圍查詢( >)后就停止匹配了,因此 b 字段并沒(méi)有使用到聯(lián)合索引。

例子二

Q2: select * from t_table where a >= 1 and b = 2,聯(lián)合索引(a, b)哪一個(gè)字段用到了聯(lián)合索引的 B+Tree?

Q2 和 Q1 的查詢語(yǔ)句很像,唯一的區(qū)別就是 a 字段的查詢條件「大于等于」。

由于聯(lián)合索引(二級(jí)索引)是先按照 a 字段的值排序的,所以符合 >= 1 條件的二級(jí)索引記錄肯定是相鄰,于是在進(jìn)行索引掃描的時(shí)候,可以定位到符合 >= 1 條件的第一條記錄,然后沿著記錄所在的鏈表向后掃描,直到某條記錄不符合 a>= 1 條件位置。所以 a 字段可以在聯(lián)合索引的 B+Tree 中進(jìn)行索引查詢。

雖然在符合 a>= 1 條件的二級(jí)索引記錄的范圍里,b 字段的值是「無(wú)序」的,但是對(duì)于符合 a = 1 的二級(jí)索引記錄的范圍里,b 字段的值是「有序」的(因?yàn)閷?duì)于聯(lián)合索引,是先按照 a 字段的值排序,然后在 a 字段的值相同的情況下,再按照 b 字段的值進(jìn)行排序)。

于是,在確定需要掃描的二級(jí)索引的范圍時(shí),當(dāng)二級(jí)索引記錄的 a 字段值為 1 時(shí),可以通過(guò) b = 2 條件減少需要掃描的二級(jí)索引記錄范圍(b 字段可以利用聯(lián)合索引進(jìn)行索引查詢的意思)。也就是說(shuō),從符合 a = 1 and b = 2 條件的第一條記錄開(kāi)始掃描,而不需要從第一個(gè) a 字段值為 1 的記錄開(kāi)始掃描。

所以,Q2 這條查詢語(yǔ)句 a 和 b 字段都用到了聯(lián)合索引進(jìn)行索引查詢。

我們也可以在執(zhí)行計(jì)劃中的 key_len 知道這一點(diǎn)。執(zhí)行計(jì)劃如下:

圖片

可以看到 key_len 為 8 字節(jié),說(shuō)明優(yōu)化器使用了 2 個(gè)字段的查詢條件來(lái)形成掃描區(qū)間的邊界條件,也就是 a 和 b 字段都用到了聯(lián)合索引進(jìn)行索引查詢。

通過(guò) Q2 查詢語(yǔ)句我們可以知道,雖然 a 字段使用了 >= 進(jìn)行范圍查詢,但是聯(lián)合索引的最左匹配原則并沒(méi)有在遇到 a 字段的范圍查詢( >=)后就停止匹配了,b 字段還是可以用到了聯(lián)合索引的。

例子三

Q3: SELECT * FROM t_table WHERE a BETWEEN 2 AND 8 AND b = 2,聯(lián)合索引(a, b)哪一個(gè)字段用到了聯(lián)合索引的 B+Tree?

Q3 查詢條件中 a BETWEEN 2 AND 8 的意思是查詢 a 字段的值在 2 和 8 之間的記錄。

不同的數(shù)據(jù)庫(kù)對(duì) BETWEEN ... AND 處理方式是有差異的。在 MySQL 中,BETWEEN 包含了 value1 和 value2 邊界值,類似于 >= and =<。而有的數(shù)據(jù)庫(kù)則不包含 value1 和 value2 邊界值(類似于 > and <)。

這里我們只討論 MySQL。由于 MySQL 的 BETWEEN 包含 value1 和 value2 邊界值,所以類似于 Q2 查詢語(yǔ)句,因此 Q3 這條查詢語(yǔ)句 a 和 b 字段都用到了聯(lián)合索引進(jìn)行索引查詢。

我們也可以在執(zhí)行計(jì)劃中的 key_len 知道這一點(diǎn)。執(zhí)行計(jì)劃如下:

圖片

可以看到 key_len 為 8 字節(jié),說(shuō)明優(yōu)化器使用了 2 個(gè)字段的查詢條件來(lái)形成掃描區(qū)間的邊界條件,也就是 a 和 b 字段都用到了聯(lián)合索引進(jìn)行索引查詢。

通過(guò) Q3 查詢語(yǔ)句我們可以知道,雖然 a 字段使用了 BETWEEN 進(jìn)行范圍查詢,但是聯(lián)合索引的最左匹配原則并沒(méi)有在遇到 a 字段的范圍查詢( BETWEEN)后就停止匹配了,b 字段還是可以用到了聯(lián)合索引的。

例子四

Q4: SELECT * FROM t_user WHERE name like 'j%' and age = 22,聯(lián)合索引(name, age)哪一個(gè)字段用到了聯(lián)合索引的 B+Tree?

由于聯(lián)合索引(二級(jí)索引)是先按照 name 字段的值排序的,所以前綴為 ‘j’ 的 name 字段的二級(jí)索引記錄都是相鄰的, 于是在進(jìn)行索引掃描的時(shí)候,可以定位到符合前綴為 ‘j’ 的 name 字段的第一條記錄,然后沿著記錄所在的鏈表向后掃描,直到某條記錄的 name 前綴不為 ‘j’ 為止。

所以 a 字段可以在聯(lián)合索引的 B+Tree 中進(jìn)行索引查詢,形成的掃描區(qū)間是['j','k')。注意, j 是閉區(qū)間。如下圖:

圖片

雖然在符合前綴為 ‘j’ 的 name 字段的二級(jí)索引記錄的范圍里,age 字段的值是「無(wú)序」的,但是對(duì)于符合 name = j 的二級(jí)索引記錄的范圍里,age字段的值是「有序」的(因?yàn)閷?duì)于聯(lián)合索引,是先按照 name 字段的值排序,然后在 name 字段的值相同的情況下,再按照 age 字段的值進(jìn)行排序)。

于是,在確定需要掃描的二級(jí)索引的范圍時(shí),當(dāng)二級(jí)索引記錄的 name 字段值為 ‘j’ 時(shí),可以通過(guò) age = 22 條件減少需要掃描的二級(jí)索引記錄范圍(age 字段可以利用聯(lián)合索引進(jìn)行索引查詢的意思)。也就是說(shuō),從符合 name = 'j' and age = 22 條件的第一條記錄時(shí)開(kāi)始掃描,而不需要從第一個(gè) name 為 j 的記錄開(kāi)始掃描 。如下圖的右邊:

圖片

所以,Q4 這條查詢語(yǔ)句 a 和 b 字段都用到了聯(lián)合索引進(jìn)行索引查詢。

我們也可以在執(zhí)行計(jì)劃中的 key_len 知道這一點(diǎn)。本次例子中:

  • name 字段的類型是 varchar(30) 且不為 NULL,數(shù)據(jù)庫(kù)表使用了 utf8mb4 字符集,一個(gè)字符集為 utf8mb4 的字符是 4 個(gè)字節(jié),因此 name 字段的實(shí)際數(shù)據(jù)最多占用的存儲(chǔ)空間長(zhǎng)度是 120 字節(jié)(30 x 4),然后因?yàn)?name 是變長(zhǎng)類型的字段,需要再加 2,也就是 name 的 key_len 為 122。
  • age 字段的類型是 int 且不為 NULL,key_len 為 4。

Q4 查詢語(yǔ)句的執(zhí)行計(jì)劃如下:

圖片

可以看到 key_len 為 126 字節(jié),name 的 key_len 為 122,age 的 key_len 為 4,說(shuō)明優(yōu)化器使用了 2 個(gè)字段的查詢條件來(lái)形成掃描區(qū)間的邊界條件,也就是 name 和 age 字段都用到了聯(lián)合索引進(jìn)行索引查詢。

通過(guò) Q4 查詢語(yǔ)句我們可以知道,雖然 name 字段使用了 like 前綴匹配進(jìn)行范圍查詢,但是聯(lián)合索引的最左匹配原則并沒(méi)有在遇到 name 字段的范圍查詢( like 'j%')后就停止匹配了,age 字段還是可以用到了聯(lián)合索引的。

小結(jié)

網(wǎng)上傳來(lái)穿去這句話:「聯(lián)合索引的最左匹配原則會(huì)一直向右匹配直到遇到范圍查詢(>、<、between、like) 就會(huì)停止匹配」并不是對(duì)的。

經(jīng)過(guò)實(shí)驗(yàn)的證明,我得出的結(jié)論是這樣的:

聯(lián)合索引的最左匹配原則,在遇到范圍查詢(如 >、<)的時(shí)候,就會(huì)停止匹配,也就是范圍查詢的字段可以用到聯(lián)合索引,但是在范圍查詢字段后面的字段無(wú)法用到聯(lián)合索引。注意,對(duì)于 >=、<=、BETWEEN、like 前綴匹配的范圍查詢,并不會(huì)停止匹配。


責(zé)任編輯:武曉燕 來(lái)源: 小林coding
相關(guān)推薦

2020-05-14 08:38:03

數(shù)字化轉(zhuǎn)型網(wǎng)絡(luò)安全漏洞

2013-08-22 09:54:14

創(chuàng)業(yè)管理

2025-10-13 07:46:25

JARSpringMaven

2022-04-28 09:05:41

網(wǎng)絡(luò)爬蟲(chóng)Python

2021-06-16 17:46:55

函數(shù)指針結(jié)構(gòu)

2018-04-26 11:05:55

分布式系統(tǒng)集中式系統(tǒng)數(shù)據(jù)處理

2021-08-18 15:23:42

SDNSD-WAN軟件定義網(wǎng)絡(luò)

2022-05-26 05:44:52

PythonPyScript框架

2025-11-03 08:14:06

2021-05-19 14:22:46

代碼開(kāi)發(fā)項(xiàng)目

2010-03-03 09:09:53

Android SDK

2019-01-07 16:35:58

微軟開(kāi)源Java

2013-07-15 16:55:45

2010-06-23 09:27:54

Linux

2012-06-08 03:24:38

程序員

2017-04-25 11:49:06

自安全網(wǎng)絡(luò)迪普科技

2015-06-15 14:58:25

swiftOC

2022-09-29 09:22:33

數(shù)據(jù)倉(cāng)

2023-09-19 08:03:50

rebase?merge

2023-04-27 08:42:50

效果
點(diǎn)贊
收藏

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

天堂av一区二区| 蜜月aⅴ免费一区二区三区 | 久久精品国产亚洲一区二区| 久久亚洲中文字幕无码| 午夜av免费观看| 免费日韩av片| 中文字幕亚洲一区在线观看| 日本人69视频| 91麻豆国产福利在线观看宅福利| 国内精品视频666| 色综合男人天堂| 无码精品一区二区三区在线播放 | 精品视频在线播放一区二区三区| 亚洲综合一区在线| 韩国成人动漫在线观看| 亚洲精品中文字幕乱码三区91| 国产探花一区在线观看| 在线播放国产精品二区一二区四区| 久久最新免费视频| 五月婷婷丁香六月| 欧美a级理论片| 欧美日韩成人免费| 国内精品久久99人妻无码| 欧美影视资讯| 亚洲一区二区三区不卡国产欧美| 欧美成人第一区| 国产精品乱码久久久| 亚洲国产精品第一区二区三区| 国产视频精品在线| 天天干天天色天天干| 成人a在线视频免费观看| 99久久99精品久久久久久| 国产福利精品av综合导导航| 9999热视频| 国产精品片aa在线观看| 日韩欧美亚洲一区二区| 五月丁香综合缴情六月小说| 尤物在线视频| av电影天堂一区二区在线观看| 国产精品精品视频一区二区三区| 538精品在线观看| 91夜夜蜜桃臀一区二区三区| 欧美亚一区二区| 成人一级生活片| 五月婷婷在线观看| 成人福利视频网站| 91美女片黄在线观| 久久久久久久久久影院| 最新精品国产| 色系列之999| 极品白嫩的小少妇| 国产一区二区av在线| 欧美影院一区二区三区| 久久久亚洲精品无码| 国产传媒在线播放| 国产精品视频观看| 日韩亚洲一区在线播放| 美女毛片在线看| 成人18精品视频| 成人免费视频网| 中文字幕在线观看国产| 亚洲永久免费| 97香蕉久久超级碰碰高清版| 久草视频手机在线观看| 99久久.com| 在线观看不卡av| 香蕉视频黄色在线观看| 日韩成人av在线资源| 欧美精品一区二| 中文字幕一区二区在线观看视频| 日本肉肉一区| 欧美视频精品在线观看| 无码少妇一区二区三区芒果| 九色porny丨国产首页在线| 亚洲女同一区二区| 亚洲免费视频播放| 大片免费在线看视频| 国产精品久久久久久久久动漫| 农村寡妇一区二区三区| 韩国免费在线视频| 国产亲近乱来精品视频 | 九九视频精品全部免费播放| 日韩精品中文字幕在线一区| 国产一级二级av| 日韩视频一区二区三区四区| 日韩欧美自拍偷拍| 蜜臀视频在线观看| 天堂综合网久久| 永久555www成人免费| 91视频免费看片| 久久精品国产大片免费观看| 日韩亚洲成人av在线| 中文字幕乱码av| 国语对白精品一区二区| 久久久中文字幕| 日韩成人高清视频| 日本亚洲最大的色成网站www| 国产精品99久久久久久人 | 亚洲色图视频免费播放| 成年丰满熟妇午夜免费视频| 阿v视频在线| 欧美日韩中国免费专区在线看| 男人操女人免费| 国产综合色激情| 日韩色在线观看| 免费黄色a级片| caoporn成人免费视频在线| 亚洲精品一区二区三区四区高清 | 日韩欧美中文字幕公布| 亚洲一区二区在线免费| 国产精品一在线观看| www.亚洲成人| www.国产成人| 麻豆精品视频在线观看免费 | 国产精品视频3p| 亚洲人在线视频| 疯狂撞击丝袜人妻| 一区三区视频| 国产欧美日韩免费| 国产女同91疯狂高潮互磨| 91在线观看一区二区| 国产在线一区二| 日本三级视频在线观看| 五月天欧美精品| jizz欧美性11| 久久97久久97精品免视看秋霞| 亚洲热线99精品视频| 亚洲av无码一区二区三区在线| 亚洲青色在线| 成人中文字幕在线观看| 黄色在线免费观看大全| 一区二区三区四区激情| 成年人在线看片| 亚洲精品伦理| 国产午夜精品久久久| 亚洲女人毛茸茸高潮| 99日韩精品| 91香蕉亚洲精品| 风间由美一区| 精品福利免费观看| 国产精品99精品无码视亚| 精品美女视频| 2025国产精品视频| 国产成人精品亚洲精品色欲| 国产精品人人做人人爽人人添| 蜜桃传媒一区二区三区| 91久久偷偷做嫩草影院电| 最近更新的2019中文字幕| 日韩色图在线观看| 波多野结衣视频一区| av久久久久久| 高清精品久久| 这里只有精品在线播放| 青青草免费观看视频| 成人精品免费看| 喜爱夜蒲2在线| 国产日本亚洲| 久久精品国产亚洲| 日本高清www免费视频| 福利91精品一区二区三区| 国产精品夜夜夜爽张柏芝| 99精品在免费线偷拍| 亚洲欧美中文在线视频| 日韩毛片在线播放| 99久久精品一区二区| 国产黄色激情视频| julia中文字幕一区二区99在线| 色噜噜狠狠色综合网图区 | 亚洲成a人在线观看| 亚洲热在线视频| 欧美.日韩.国产.一区.二区| 国产精品日韩在线播放| av影片在线看| 欧美日韩三级一区| 欧美风情第一页| 国产一区二区导航在线播放| 免费观看黄色大片| 91精品导航| 97视频在线观看免费| 无码精品黑人一区二区三区| 欧美日韩中文字幕| 人妻视频一区二区| 蜜臀av性久久久久蜜臀aⅴ | 天天干天天草天天射| 福利一区视频在线观看| 波多野结衣一本| 日韩av中文字幕一区二区三区| 日韩欧美精品一区二区| 日韩欧美少妇| 久久精品91久久香蕉加勒比| 国产精品久久久久久69| 亚洲欧美aⅴ...| 国产情侣久久久久aⅴ免费| 99精品国产在热久久| 日本一区二区三区视频免费看 | 中文av一区二区| 亚洲福利精品在线| 久久av影院| 亚洲激情视频网站| 五月婷婷视频在线| 欧美激情一区二区三区全黄| 日本超碰在线观看| 欧美精品九九| 蜜桃欧美视频| 欧美a一级片| 欧美激情一区二区三区成人 | 国产欧美日本| 亚洲va久久久噜噜噜久久狠狠 | 97久久综合区小说区图片区| 97香蕉超级碰碰久久免费软件| 成人好色电影| 日韩精品一区在线| 午夜久久久久久久久久影院| ㊣最新国产の精品bt伙计久久| 老司机午夜免费福利| 日本三级亚洲精品| www.日本在线视频| 精品理论电影| 国产一级精品aaaaa看| 久久久久久久性潮| 亚洲91精品在线| 成人免费视频| 亚洲电影免费观看| 一级黄色大片免费| 疯狂做受xxxx高潮欧美日本| 日本高清一二三区| 99久久精品免费看国产| √天堂资源在线| 久久男女视频| 欧美三级一级片| 影音先锋国产精品| 日本福利视频网站| 国产精品久久久久蜜臀| 日本在线播放一区| 伊人久久大香线蕉| 久久精品日产第一区二区三区乱码 | 欧美日韩第二页| 樱桃成人精品视频在线播放| 800av在线免费观看| 亚洲国产日韩欧美在线| 在线一区亚洲| 欧美好骚综合网| 亚洲国产日韩欧美| 欧美自拍偷拍| 日韩欧美一区二区三区久久婷婷| 亚洲精品无吗| 奇米视频888战线精品播放| 日韩福利视频一区| 欧美aaaaa喷水| 黑人操亚洲人| 手机成人在线| 成人激情开心网| 亚洲一区二区高清视频| 色天天久久综合婷婷女18| 亚洲精品人成| 性xxxx欧美老肥妇牲乱| 天天综合五月天| 国色天香一区二区| 欧美深夜福利视频| 一本色道久久综合亚洲精品不| 国产主播自拍av| 免费国产自线拍一欧美视频| 国产成人av影视| 蜜臀av一区二区在线观看| 91亚洲精品久久久蜜桃借种| 国产福利一区二区三区视频在线 | 91亚洲午夜精品久久久久久| 波多野结衣福利| 日本一区二区不卡视频| 日韩精品一区二区亚洲av性色| 亚洲精品免费视频| 精品在线视频观看| 欧美日韩国产精品专区 | 欧美精品亚洲二区| h片在线免费看| 亚洲成人国产精品| 欧美高清成人| 日韩视频中文字幕| 成人免费一区二区三区牛牛| 人人爽久久涩噜噜噜网站| 久久亚洲精品爱爱| 99久久一区三区四区免费| 偷窥自拍亚洲色图精选| 午夜精品一区二区三区在线观看 | 日韩在线免费高清视频| 久草在线视频资源| 国产精品18久久久久久首页狼| 免费成人高清在线视频| 国产精选在线观看91| 精品国产一区一区二区三亚瑟| 裸体大乳女做爰69| 午夜一区不卡| 在线观看av免费观看| 91一区在线观看| 欧美精品一级片| 日韩欧美在线观看| 国产成人精品无码高潮| 亚洲一区二区久久久| 宅男网站在线免费观看| 国产99在线|中文| 精品久久免费| 五月天丁香综合久久国产 | 国产精品玖玖玖| 亚洲精品日韩丝袜精品| 50度灰在线| 国产精国产精品| 福利在线一区| 婷婷视频在线播放| 久久久久久黄| 亚洲精品第二页| 亚洲欧美另类图片小说| 亚洲欧美自拍视频| 91精品国产综合久久香蕉的特点 | 在线无限看免费粉色视频| 国产精品一国产精品k频道56| 日本中文字幕影院| 久久综合久色欧美综合狠狠| 亚洲熟女www一区二区三区| 欧洲国内综合视频| 午夜视频www| 欧美精品xxx| 精品视频在线观看网站| 亚洲天堂电影网| 久久九九精品| 日韩Av无码精品| 亚洲狠狠丁香婷婷综合久久久| 中文字幕 国产| 亚洲视频在线观看网站| 亚洲女同志freevdieo| 国产精品久久久久久久免费大片| 中文乱码免费一区二区三区下载| 一起操在线视频| 国产欧美精品一区aⅴ影院| av图片在线观看| 亚洲精品在线91| 国产乱码午夜在线视频 | 午夜精品久久久久久久91蜜桃| 深夜福利一区二区| 成人四虎影院| 相泽南亚洲一区二区在线播放| 美女国产一区| 久久久久久九九九九九| 黑人狂躁日本妞一区二区三区| 刘亦菲久久免费一区二区| 欧美激情喷水视频| 一区二区在线免费播放| 国产成人艳妇aa视频在线 | 91福利精品视频| 成人77777| 国产精品久久综合av爱欲tv| 不卡中文字幕| 狠狠操狠狠干视频| 日韩久久一区二区| 99久久精品国产成人一区二区| 久久精品成人欧美大片| 国产麻豆一区二区三区| 国产精品三级一区二区| 成人午夜电影小说| 欧美三日本三级少妇99| 精品视频一区在线视频| 高清电影一区| 亚洲一区二区精品在线观看| 久久国产精品一区二区| 国产精品免费在线视频| 日韩欧美一区二区在线视频| 182在线视频观看| 久久综合久久综合这里只有精品| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲精品成人无码| 欧美日本国产一区| 色噜噜狠狠狠综合欧洲色8| 国产一区二区三区奇米久涩| 天堂在线一区二区| 久久嫩草捆绑紧缚| 欧美tickling挠脚心丨vk| 涩涩视频在线播放| 亚洲第一综合| 国产成人免费视频精品含羞草妖精| 青青操免费在线视频| 这里只有精品视频| 91精品短视频| 国产一线二线三线在线观看| 日韩理论在线观看| 亚洲欧洲国产综合| 国产精品视频精品| 国产综合视频| 久久久久久久久福利| 日韩一卡二卡三卡| 超级碰碰久久| 天堂а√在线中文在线 | 免费观看成人高| 国产在线视频一区二区三区| 国产真人真事毛片| 中文字幕亚洲专区| 精品伊人久久久| 国产美女18xxxx免费视频| 欧美日韩国产精品一区二区三区四区| 最新国产在线观看| 噜噜噜噜噜久久久久久91| 国产一二三精品|