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

如何優雅地回答面試官關于MySQL索引的拷問

開發 前端
假設面試官問你:在電商平臺的訂單中心系統中,通常要根據商品類型、訂單狀態篩選出需要的訂單,并按照訂單創建的時間進行排序,那針對下面這條 SQL,你怎么通過索引來提高查詢效率呢?
  • 案例背景

  • 案例分析

  • 案例解答

    • MySQL InnoDB 的索引原理

    • 索引類型

    • 通過主鍵查詢(主鍵索引)商品數據的過程

    • 通過非主鍵(輔助索引)查詢商品數據的過程

  • B+Tree 索引的優勢

  • B+Tree 相對于 B 樹 索引結構的優勢

  • B+Tree 相對于二叉樹索引結構的優勢

  • B+Tree 相對于 Hash 表存儲結構的優勢

  • 執行計劃

  • 索引失效的常見情況

  • 常見優化索引的方法

    • 前綴索引優化

    • 覆蓋索引優化

    • 聯合索引

  • 總結

案例背景

假設面試官問你:在電商平臺的訂單中心系統中,通常要根據商品類型、訂單狀態篩選出需要的訂單,并按照訂單創建的時間進行排序,那針對下面這條 SQL,你怎么通過索引來提高查詢效率呢?

select * from order where status = 1 order by create_time asc

有的同學會認為,單獨給 status 建立一個索引就可以了。

但是更優的方式是建立一個 status 和 create_time 組合索引,這是為了避免 MySQL 數據庫發生文件排序。

因為在查詢時,你只能用到 status 的索引,但如果要對 create_time 排序,就要用文件排序 filesort,也就是在 SQL 執行計劃中,Extra 列會出現 Using filesort 。

所以你要利用索引的有序性,在 status 和 create_time 列建立聯合索引,這樣根據 status 篩選后的數據就是按照 create_time 排好序的,避免在文件排序。

案例分析

通過這個案例,你可以發現“索引知識”的重要性,

數據庫索引底層使用的是什么數據結構和算法呢?

  • 為什么 MySQL InnoDB 選擇 B+Tree 當默認的索引數據結構?

  • 如何通過執行計劃查看索引使用詳情?

  • 有哪些情況會導致索引失效?

  • 平時有哪些常見的優化索引的方法?

……

總結起來就是如下幾點:

  • 理解 MySQL InnoDB 的索引原理;

  • 掌握 B+Tree 相比于其他索引數據結構(如 B-Tree、二叉樹,以及 Hash 表)的優勢;

  • 掌握 MySQL 執行計劃的方法;

  • 掌握導致索引失效的常見情況;

  • 掌握實際工作中常用的建立高效索引的技巧(如前綴索引、建立覆蓋索引等)。

如果你曾經被問到其中某一個問題,那你就有必要認真夯實 MySQL 索引及優化的內容了。

案例解答

MySQL InnoDB 的索引原理

從數據結構的角度來看, MySQL 常見索引有 B+Tree 索引、HASH 索引、Full-Text 索引 。MySQL 常見的存儲引擎 InnoDB、MyISAM 和 Memory 分別支持的索引類型。(后兩個存儲引擎在實際工作和面試中很少提及,因此只講 InnoDB) 。

索引類型

在實際應用中,InnoDB 是 MySQL 建表時默認的存儲引擎,B+Tree 索引類型也是 MySQL 存儲引擎采用最多的索引類型。

在創建表時,InnoDB 存儲引擎默認使用表的主鍵作為主鍵索引,該主鍵索引就是聚簇索引(Clustered Index),如果表沒有定義主鍵,InnoDB 就自己產生一個隱藏的 6 個字節的主鍵 ID 值作為主鍵索引, 而創建的主鍵索引默認使用的是 B+Tree 索引 。

接下來我們通過一個簡單的例子,說明一下 B+Tree 索引在存儲數據中的具體實現,為的是讓你理解通過 B+Tree 做索引的原理。

首先,我們創建一張商品表:

  1. CREATE TABLE `product`  ( 
  2.   `id` int(11) NOT NULL, 
  3.   `product_no` varchar(20)  DEFAULT NULL, 
  4.   `name` varchar(255) DEFAULT NULL, 
  5.   `price` decimal(102) DEFAULT NULL, 
  6.   PRIMARY KEY (`id`) USING BTREE 
  7. ) CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; 

然后新增幾行數據:

通過主鍵查詢(主鍵索引)商品數據的過程

此時當我們使用主鍵索引查詢商品 15 的時候,那么按照 B+Tree 索引原理,是如何找到對應數據的呢?

  1. select * from product where id = 15 

我們可以通過數據手動構建一個 B+Tree,它的每個節點包含 3 個子節點(B+Tree 每個節點允許有 M 個子節點,且 M>2),根節點中的數據值 1、18、36 分別是子節點(1,6,12),(18,24,30)和(36,41,52)中的最小值。

每一層父節點的數據值都會出現在下層子節點的數據值中,因此在葉子節點中,包括了所有的數據值信息,并且每一個葉子節點都指向下一個葉子節點,形成一個鏈表。如圖所示:

我們舉例講解一下 B+Tree 的查詢流程,比如想要查找數據值 15,B+Tree 會自頂向下逐層進行查找:

  1. 將 15 與根節點的數據 (1,18,36) 比較,15 在 1 和 18 之間,所以根據 B+Tree的搜索邏輯,找到第二層的數據塊 (1,6,12);

  2. 在第二層的數據塊 (1,6,12) 中進行查找,因為 15 大于 12,所以找到第三層的數據塊 (12,15,17);

  3. 在葉子節點的數據塊 (12,15,17) 中進行查找,然后我們找到了數據值 15;

最終根據數據值 15 找到葉子節點中存儲的數據。

整個過程一共進行了 3 次 I/O 操作,所以 B+Tree 相比于 B 樹和二叉樹來說,最大的優勢在于查詢效率。

那么問題來了,如果你當前查詢數據時候,不是通過主鍵 ID,而是用商品編碼查詢商品,那么查詢過程又是怎樣的呢?

通過非主鍵(輔助索引)查詢商品數據的過程

如果你用商品編碼查詢商品(即使用輔助索引進行查詢),會先檢索輔助索引中的 B+Tree 的 商品編碼,找到對應的葉子節點,獲取主鍵值,然后再通過主鍵索引中的 B+Tree 樹查詢到對應的葉子節點,然后獲取整行數據。 這個過程叫回表 。

以上就是索引的實現原理。

在面試時,面試官一般不會讓你直接描述查詢索引的過程,但是會通過考察你對索引優化方法的理解,來評估你對索引原理的掌握程度,比如為什么 MySQL InnoDB 選擇 B+Tree 作為默認的索引數據結構?MySQL 常見的優化索引的方法有哪些?

所以接下來,我們就詳細了解一下在面試中如何回答索引優化的問題。

B+Tree 索引的優勢

如果你被問到“為什么 MySQL 會選擇 B+Tree 當索引數據結構?”其實在考察你兩個方面:B+Tree 的索引原理;B+Tree 索引相比于其他索引類型的優勢。

我們剛剛已經講了 B+Tree 的索引原理,現在就來回答一下 B+Tree 相比于其他常見索引結構,如 B 樹、二叉樹或 Hash 索引結構的優勢在哪兒?

B+Tree 相對于 B 樹 索引結構的優勢

B+Tree 只在葉子節點存儲數據,而 B 樹 的非葉子節點也要存儲數據,所以 B+Tree 的單個節點的數據量更小,在相同的磁盤 I/O 次數下,就能查詢更多的節點。

另外,B+Tree 葉子節點采用的是雙鏈表連接,適合 MySQL 中常見的基于范圍的順序查找,而 B 樹無法做到這一點。

B+Tree 相對于二叉樹索引結構的優勢

對于有 N 個葉子節點的 B+Tree,其搜索復雜度為O(logdN),其中 d 表示節點允許的最大子節點個數為 d 個。

在實際的應用當中, d 值是大于100的,這樣就保證了,即使數據達到千萬級別時,B+Tree 的高度依然維持在 3~4 層左右,也就是說一次數據查詢操作只需要做 3~4 次的磁盤 I/O 操作就能查詢到目標數據(這里的查詢參考上面 B+Tree 的聚簇索引的查詢過程)。

而二叉樹的每個父節點的兒子節點個數只能是 2 個,意味著其搜索復雜度為 O(logN),這已經比 B+Tree 高出不少,因此二叉樹檢索到目標數據所經歷的磁盤 I/O 次數要更多。

B+Tree 相對于 Hash 表存儲結構的優勢

我們知道范圍查詢是 MySQL 中常見的場景,但是 Hash 表不適合做范圍查詢,它更適合做等值的查詢,這也是 B+Tree 索引要比 Hash 表索引有著更廣泛的適用場景的原因。

至此,你就知道“為什么 MySQL 會選擇 B+Tree 來做索引”了。在回答時,你要著眼于 B+Tree 的優勢,然后再引入索引原理的查詢過程(掌握這些知識點,這個問題其實比較容易回答)。

接下來,我們進入下一個問題:在實際工作中如何查看索引的執行計劃。

通過執行計劃查看索引使用詳情 我這里有一張存儲商品信息的演示表 product:

  1. CREATE TABLE `product`  ( 
  2.   `id` int(11) NOT NULL, 
  3.   `product_no` varchar(20)  DEFAULT NULL, 
  4.   `name` varchar(255) DEFAULT NULL, 
  5.   `price` decimal(102) DEFAULT NULL, 
  6.   PRIMARY KEY (`id`) USING BTREE, 
  7.   KEY 'index_name' ('name'). 
  8.   KEY 'index_id_name' ('id''name'
  9. ) CHARACTER SET = utf8 COLLATE = utf8_general_ci 

表中包含了主鍵索引、name 字段上的普通索引,以及 id 和 name 兩個字段的聯合索引。現在我們來看一條簡單查詢語句的執行計劃:

執行計劃

對于執行計劃,參數有 possible_keys 字段表示可能用到的索引,key 字段表示實際用的索引,key_len 表示索引的長度,rows 表示掃描的數據行數。

這其中需要你重點關注 type 字段, 表示數據掃描類型,也就是描述了找到所需數據時使用的掃描方式是什么,常見掃描類型的執行效率從低到高的順序為(考慮到查詢效率問題,全表掃描和全索引掃描要盡量避免):

ALL(全表掃描);

index(全索引掃描);

range(索引范圍掃描);

ref(非唯一索引掃描);

eq_ref(唯一索引掃描);

const(結果只有一條的主鍵或唯一索引掃描)。

總的來說,執行計劃是研發工程師分析索引詳情必會的技能(很多大廠公司招聘 JD 上寫著“SQL 語句調優” ),所以你在面試時也要知道執行計劃核心參數的含義,如 type。在回答時,也要以重點參數為切入點,再擴展到其他參數,然后再說自己是怎么做 SQL 優化工作的。

索引失效的常見情況

在工作中,我們經常會碰到 SQL 語句不適用已有索引的情況,來看一個索引失效的例子:

這條帶有 like 查詢的 SQL 語句,沒有用到 product 表中的 index_name 索引。

我們結合普通索引的 B+Tree 結構看一下索引失效的原因:當 MySQL 優化器根據 name like ‘%路由器’ 這個條件,到索引 index_name 的 B+Tree 結構上進行查詢評估時,發現當前節點的左右子節點上的值都有可能符合 '%路由器' 這個條件,于是優化器判定當前索引需要掃描整個索引,并且還要回表查詢,不如直接全表掃描。

當然,還有其他類似的索引失效的情況:

索引列上做了計算、函數、類型轉換操作,這些情況下索引失效是因為查詢過程需要掃描整個索引并回表,代價高于直接全表掃描;

like 匹配使用了前綴匹配符 '%abc';

字符串不加引號導致類型轉換;

我給你的建議是, 如果 MySQL 查詢優化器預估走索引的代價比全表掃描的代價還要大,則不走對應的索引,直接全表掃描,如果走索引比全表掃描代價小,則使用索引。

常見優化索引的方法

前綴索引優化

前綴索引就是用某個字段中,字符串的前幾個字符建立索引,比如我們可以在訂單表上對商品名稱字段的前 5 個字符建立索引。使用前綴索引是為了減小索引字段大小,可以增加一個索引頁中存儲的索引值,有效提高索引的查詢速度。在一些大字符串的字段作為索引時,使用前綴索引可以幫助我們減小索引項的大小。

但是,前綴索引有一定的局限性,例如 order by 就無法使用前綴索引,無法把前綴索引用作覆蓋索引。

覆蓋索引優化

覆蓋索引是指 SQL 中 query 的所有字段,在索引 B+tree 的葉子節點上都能找得到的那些索引,從輔助索引中查詢得到記錄,而不需要通過聚簇索引查詢獲得。

假設我們只需要查詢商品的名稱、價格,有什么方式可以避免回表呢?

我們可以建立一個組合索引,即商品ID、名稱、價格作為一個組合索引。如果索引中存在這些數據,查詢將不會再次檢索主鍵索引,從而避免回表。所以,使用覆蓋索引的好處很明顯,即不需要查詢出包含整行記錄的所有信息,也就減少了大量的 I/O 操作。

聯合索引

聯合索引時,存在最左匹配原則,也就是按照最左優先的方式進行索引的匹配。

比如聯合索引 (userpin, username),如果查詢條件是 WHERE userpin=1 AND username=2,就可以匹配上聯合索引;或者查詢條件是 WHERE userpin=1,也能匹配上聯合索引,但是如果查詢條件是 WHERE username=2,就無法匹配上聯合索引。

另外,建立聯合索引時的字段順序,對索引效率也有很大影響。越靠前的字段被用于索引過濾的概率越高,實際開發工作中建立聯合索引時,要把區分度大的字段排在前面,這樣區分度大的字段越有可能被更多的 SQL 使用到。

區分度就是某個字段 column 不同值的個數除以表的總行數,比如性別的區分度就很小,不適合建立索引或不適合排在聯合索引列的靠前的位置,而 uuid 這類字段就比較適合做索引或排在聯合索引列的靠前的位置。

總結

主要講了 MySQL 的索引原理,介紹了 InnoDB 為什么會采用 B+Tree 結構。因為 B+Tree 能夠減少單次查詢的磁盤訪問次數,做到查詢效率最大化。另外,我們還講了如何查看 SQL 的執行計劃,從而找到索引失效的問題,并有針對性的做索引優化。

 

責任編輯:張燕妮 來源: JerryCodes
相關推薦

2025-03-17 00:00:00

2024-03-18 14:06:00

停機Spring服務器

2021-10-22 08:37:13

消息不丟失rocketmq消息隊列

2019-11-26 08:24:13

TCP擁塞控制網絡協議

2015-08-13 10:29:12

面試面試官

2025-06-17 08:35:00

2019-11-21 08:40:44

面試官優化性能

2022-09-13 14:44:40

HashMap哈希表紅黑樹

2024-03-25 13:02:00

MySQL索引主鍵

2025-04-07 00:00:00

云原生架構Kubernetes

2019-02-15 20:00:49

軟件測試工程師面試

2021-02-06 09:21:17

MySQL索引面試

2010-08-12 16:28:35

面試官

2023-02-16 08:10:40

死鎖線程

2020-05-12 11:05:54

MySQL索引數據庫

2021-03-24 10:25:24

優化VUE性能

2022-09-29 07:30:57

數據庫索引字段

2022-10-17 00:04:30

索引SQL訂單

2025-11-03 16:30:44

2020-12-03 06:30:11

內部類對象變量
點贊
收藏

51CTO技術棧公眾號

亚洲尤物在线视频观看| 久久aⅴ国产欧美74aaa| 亚洲国产小视频在线观看| 黄色一级在线视频| 免费毛片在线| 麻豆国产一区二区| 久久久久久中文| a天堂中文字幕| 久久久久久爱| 欧美丝袜美女中出在线| 爱爱爱视频网站| 天天射天天色天天干| 日本sm残虐另类| 久久久久久久久久久免费 | 国产亚洲欧洲997久久综合 | 国产又爽又黄免费软件| 91久久综合| 中文字幕一区电影| 亚洲欧美视频在线播放| 精品一区二区三区中文字幕| 在线一区二区视频| 国产欧美日韩网站| caoporm免费视频在线| 国产色婷婷亚洲99精品小说| 国产精品精品软件视频| 一区二区国产欧美| 久久激情视频| 91精品国产高清自在线 | 国产色a在线| 成人动漫在线一区| 91色精品视频在线| 中文字幕乱码视频| 美女尤物久久精品| 久久久免费精品| 欧美老熟妇一区二区三区| 精品盗摄女厕tp美女嘘嘘| 亚洲成人中文字幕| 国产免费a级片| www.久久久.com| 欧美午夜片在线看| 国产精品少妇在线视频| 天堂中文在线播放| 午夜欧美在线一二页| 青青草视频国产| 成码无人av片在线观看网站| 国产精品国产三级国产aⅴ入口| 日韩免费av电影| 久草视频视频在线播放| 91蜜桃在线免费视频| 精品国产免费人成电影在线观... 精品国产免费久久久久久尖叫 | 免费观看成年在线视频网站| av亚洲精华国产精华精| 国产日韩一区欧美| 污视频网站免费观看| 成年人午夜久久久| 久久av一区二区三区漫画| 天天干天天舔天天射| 99精品欧美一区二区三区综合在线| 国产精品theporn88| 亚洲国产中文字幕在线| 福利电影一区二区三区| 国产嫩草一区二区三区在线观看| 日本高清视频免费看| www.欧美日韩| 欧美日韩亚洲一区二区三区在线观看| 欧美大片aaa| 国产欧美精品一区| 亚洲高清视频一区二区| 黄色片网站在线| 一区二区三区中文字幕| 国产91视频一区| 超碰在线公开| 91国偷自产一区二区使用方法| 国产wwwxx| 99视频有精品高清视频| 欧美变态凌虐bdsm| 久久无码人妻精品一区二区三区 | 日韩污视频在线观看| 99在线精品免费视频九九视| 欧洲成人性视频| 中文字幕日产av| 国产精品一卡二卡在线观看| 国产免费一区| av福利在线播放| 亚洲日本一区二区| 欧美日本视频在线观看| 日本肉肉一区| 精品国产伦一区二区三区观看方式 | 成人黄色大片在线观看| 欧美亚洲一级二级| 黄色成人在线观看| 精品欧美aⅴ在线网站| 少妇网站在线观看| 999久久精品| 国产香蕉97碰碰久久人人| 免费看特级毛片| 亚洲麻豆av| 国产综合视频在线观看| 天天av天天翘| 日韩美女视频19| 成人一级片网站| 视频二区欧美| 在线性视频日韩欧美| 久久婷婷综合国产| 蜜桃久久精品一区二区| 国产乱码精品一区二区三区卡 | 亚洲AV无码一区二区三区少妇| www成人在线观看| 乱熟女高潮一区二区在线| 午夜激情成人网| 精品国产乱码久久久久久影片| 一本色道久久88| 国产欧美短视频| 91在线看网站| 美女写真理伦片在线看| 日韩欧美高清视频| 性欧美18—19sex性高清| 日韩精品一区二区久久| 浅井舞香一区二区| 成人无码一区二区三区| 1区2区3区国产精品| 中文字幕无码不卡免费视频| 盗摄系列偷拍视频精品tp| 久久精彩免费视频| 免费在线观看av的网站| 91在线视频网址| 日韩国产一级片| 婷婷综合国产| 欧美大胆a视频| 亚洲综合网av| 中文字幕乱码日本亚洲一区二区| 一女被多男玩喷潮视频| 国产乱人伦丫前精品视频| 久久久国产视频91| 亚洲综合网av| 中文字幕一区二区三区在线不卡| 欧美国产日韩在线播放| 伊人久久综合影院| 日本精品视频在线观看| 性插视频在线观看| 红桃av永久久久| 一区二区免费在线观看视频| 在线精品亚洲| 国产视频99| 日韩av影片| 亚洲精品久久久久久久久久久| 国产网站在线看| www.欧美色图| 国产91在线视频观看| 欧美巨大xxxx| 热久久这里只有精品| 能在线看的av| 欧美午夜一区二区| 欧美xxxooo| 国产精品夜夜爽| 欧美黄色免费网址| 盗摄牛牛av影视一区二区| 午夜欧美大片免费观看| 亚洲成人一二三区| 亚洲成人自拍偷拍| 亚洲成人网在线播放| 亚洲影院一区| 亚洲国产精品综合| av在线成人| 欧美激情中文字幕在线| 亚洲欧美日韩精品永久在线| 91精品91久久久中77777| 日本人亚洲人jjzzjjz| 精品夜夜嗨av一区二区三区| 2021狠狠干| 成人h动漫免费观看网站| 欧美亚洲另类在线| 在线观看免费高清完整| 日韩欧美国产综合一区| 日韩毛片在线视频| 国产清纯在线一区二区www| 中文字幕在线视频精品| 亚洲性感美女99在线| 欧美日本韩国国产| 97久久中文字幕| 韩国视频理论视频久久| 国产日产精品久久久久久婷婷| 欧美军同video69gay| 国产第100页| 日本一区二区三区免费乱视频| 欧美视频亚洲图片| aa国产精品| 午夜啪啪免费视频| 日韩成人一级| 国产欧美日韩精品专区| 国语对白在线刺激| 亚洲一区二区福利| 亚洲第一成年人网站| 日本韩国欧美一区二区三区| 欧美国产精品一二三| 久久久久久久久久久电影| 91热视频在线观看| 久久精品日产第一区二区| 亚洲激情免费视频| 精品久久久亚洲| 国产伦精品一区二区三区四区视频| 最新日韩一区| 97在线精品国自产拍中文| 黄色小网站在线观看| 亚洲欧美在线免费| 性欧美一区二区三区| 欧美视频在线观看一区二区| 日韩黄色三级视频| 亚洲视频一区二区免费在线观看| 国产精品揄拍100视频| 国产精品亚洲第一| 视频在线观看免费高清| 国产精品普通话对白| 国产成人一二三区| 久久人人99| 欧美一区二区三区成人久久片| 日韩欧美高清一区二区三区| 国产精品入口夜色视频大尺度| а√天堂8资源在线| 欧美成人第一页| 中文字幕在线视频区| 亚洲男人av在线| 五月色婷婷综合| 欧美mv日韩mv亚洲| 国产成人久久精品77777综合| 欧洲一区在线电影| 国产一级免费视频| 精品日本高清在线播放| 国产成人精品av久久| 亚洲精品免费在线观看| av永久免费观看| 久久先锋影音av| 香蕉视频黄色在线观看| 97精品国产97久久久久久久久久久久 | 亚洲国产小视频在线观看| 亚洲av无码国产精品久久不卡| 777欧美精品| 亚洲影视一区二区| 欧美日韩一区精品| 在线观看毛片网站| 欧美日韩一卡二卡三卡| 亚洲一区二区三区网站| 欧美探花视频资源| 中文字幕在线播放不卡| 欧美三级日韩三级国产三级| 做爰无遮挡三级| 欧美日韩一卡二卡三卡| 国产精品女人久久久| 欧美日韩免费观看一区三区| 怡春院在线视频| 欧美日本免费一区二区三区| 一级黄色片在线播放| 欧美人成免费网站| 国产三级视频在线播放| 欧美大片拔萝卜| 空姐吹箫视频大全| 日韩精品在线视频| 国产黄在线看| 按摩亚洲人久久| 欧美精品videosex| 91高清视频在线免费观看| 在线观看网站免费入口在线观看国内 | 亚洲高清视频一区二区| 欧美丰满日韩| 国内自拍中文字幕| 99国产精品久久久久久久| 国产乱子夫妻xx黑人xyx真爽| 日韩成人免费看| 欧美激情国内自拍| 成人黄色在线视频| 久久久亚洲av波多野结衣| 国产欧美精品一区二区色综合朱莉| 亚洲少妇xxx| 亚洲成人动漫在线观看| 一级一片免费看| 在线成人av网站| 十八禁一区二区三区| 国产亚洲欧洲高清| 亚洲第一图区| 日本免费一区二区三区视频观看| 久久久久伊人| 国产主播一区二区三区四区| 精品99久久| 老司机激情视频| 久久青草久久| 男人操女人下面视频| 久久网站热最新地址| 一区二区三区四区五区| 激情成人在线视频| 国产一区二区小视频| 日韩av在线网站| 欧美videos极品另类| 7m精品福利视频导航| 成人污版视频| 麻豆av一区二区三区久久| 68国产成人综合久久精品| 无码人妻丰满熟妇区96| 国产在线视频一区二区三区| 添女人荫蒂视频| 尤物在线观看一区| 中文亚洲av片在线观看| 亚洲精品福利免费在线观看| 日本韩国在线视频爽| 欧美在线视频网站| 一区二区三区在线资源| 一区二区精品视频| 国产亚洲在线| 一区二区三区四区影院| 亚洲欧洲日产国产综合网| 日本高清不卡码| 欧美精品一区二区三区很污很色的| 337p日本欧洲亚洲大胆鲁鲁| 538国产精品一区二区在线| 日本免费一区二区视频| 一本一生久久a久久精品综合蜜| 亚洲久久在线| 久久久男人的天堂| 亚洲欧美乱综合| 一区精品在线观看| 亚洲一二在线观看| 悠悠资源网亚洲青| 国产麻豆日韩| 激情综合久久| 杨幂一区二区国产精品| 亚洲少妇最新在线视频| 中文字幕永久免费视频| 亚洲色图偷窥自拍| 久九九久频精品短视频| 精品国产乱码久久久久久蜜柚 | 亚洲福利视频三区| www.国产欧美| 欧美成aaa人片在线观看蜜臀| 天堂综合在线播放| 亚洲精品欧美精品| 日韩精品乱码免费| 一级黄色录像毛片| 在线免费观看不卡av| 国产免费永久在线观看| 国产999在线观看| 欧美禁忌电影| 少妇高清精品毛片在线视频| 91碰在线视频| 国产三级精品三级在线观看| 亚洲精品中文字幕av| 亚洲涩涩在线| 欧美一区二区三区在线播放| 老司机精品久久| 极品久久久久久久| 欧美日韩国产天堂| 国产在线看片| 99re国产视频| 在线日韩电影| 中文字幕丰满孑伦无码专区| 色94色欧美sute亚洲13| 国产高清视频在线播放| 国产欧美一区二区三区久久人妖| 欧美hd在线| 在线成人免费av| 五月婷婷欧美视频| 黄色av免费在线看| 国产精品人成电影| 在线精品小视频| 国产女人18毛片水真多18| 精品久久久久久久久中文字幕| 欧美高清成人| 成人午夜一级二级三级| 好吊一区二区三区| 国产精品亚洲无码| 欧美揉bbbbb揉bbbbb| 日本色护士高潮视频在线观看 | 岛国av一区二区| 国产福利片在线| 亚洲jizzjizz日本少妇| 日韩视频在线一区二区三区 | 人妻少妇精品视频一区二区三区| 色婷婷精品久久二区二区蜜臀av| 香蕉视频国产在线观看| 91九色蝌蚪嫩草| 亚洲欧美日韩国产一区二区| 天堂资源在线视频| 精品国产乱码久久久久久浪潮| 伊人久久综合一区二区| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 国产精品一二三在| 中文字幕一区二区三区四区欧美| 久久精品视频播放| 香蕉视频一区二区三区| 黄色一级片免费的| 欧美日韩免费一区| 黄色国产网站在线播放| 欧美精品七区| 国产精品69久久久久水密桃| 中文字幕高清在线免费播放| 久久国产精品视频| 久久不见久久见免费视频7| 精品国产午夜福利在线观看| 日韩欧美在线字幕| 色黄网站在线观看| 亚洲欧美日本国产有色| aaa亚洲精品一二三区|