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

面試官出的MySQL索引問題,這篇文章全給你解決!

數據庫 MySQL
這篇文章不會講解索引的基礎知識,主要是關于MySQL數據庫的B+樹索引的相關原理,里面的一些知識都參考了MySQL技術內幕這本書,也算對于這些知識的總結。

 [[278690]]

0 前言

這篇文章不會講解索引的基礎知識,主要是關于MySQL數據庫的B+樹索引的相關原理,里面的一些知識都參考了MySQL技術內幕這本書,也算對于這些知識的總結。對于B樹和B+樹相關的知識,可以參考我的這篇博客:面試官問你B樹和B+樹,就把這篇文章丟給他

1 索引的管理

索引有很多中類型:普通索引、唯一索引、主鍵索引、組合索引、全文索引,下面我們看看如何創建和刪除下面這些類型的索引。

1.1 索引的創建方式

索引的創建是可以在很多種情況下進行的。

  •  直接創建索引
  1. CREATE [UNIQUE|FULLLTEXT] INDEX index_name ON table_name(column_name(length)) 

[UNIQUE|FULLLTEXT]:表示可選擇的索引類型,唯一索引還是全文索引,不加話就是普通索引。

table_name:表的名稱,表示為哪個表添加索引。

column_name(length):column_name是表的列名,length表示為這一列的前length行記錄添加索引。

  •  修改表結構的方式添加索引 
  1. ALTER TABLE table_name ADD [UNIQUE|FULLLTEXT] INDEX index_name (column(length)) 
  •  創建表的時候同時創建索引 
  1. CREATE TABLE `table` (  
  2.     `id` int(11) NOT NULL AUTO_INCREMENT ,  
  3.     `title` char(255) CHARACTER NOT NULL ,  
  4.     PRIMARY KEY (`id`),  
  5.     [UNIQUE|FULLLTEXT] INDEX index_name (title(length))  

1.2 主鍵索引和組合索引創建的方式

前面講的都是普通索引、唯一索引和全文索引創建的方式,但是,主鍵索引和組合索引創建的方式卻是有點不一樣的,所以單獨拿出來講一下。

組合索引創建方式

  •  創建表的時候同時創建索引 
  1. CREATE TABLE `table` (  
  2.     `id` int(11) NOT NULL AUTO_INCREMENT ,  
  3.     `title` char(255) CHARACTER NOT NULL ,  
  4.     PRIMARY KEY (`id`),  
  5.     INDEX index_name(id,title)  
  •  修改表結構的方式添加索引 
  1. ALTER TABLE table_name ADD INDEX name_city_age (name,city,age); 

主鍵索引創建方式

主鍵索引是一種特殊的唯一索引,一個表只能有一個主鍵,不允許有空值。一般是在建表的時候同時創建主鍵索引。 

  1. CREATE TABLE `table` (  
  2.     `id` int(11) NOT NULL AUTO_INCREMENT ,  
  3.     `title` char(255) CHARACTER NOT NULL ,  
  4.     PRIMARY KEY (`id`)  

1.3 刪除索引

刪除索引可利用ALTER TABLE或DROP INDEX語句來刪除索引。類似于CREATE INDEX語句,DROP INDEX可以在ALTER TABLE內部作為一條語句處理,語法如下。

(1)DROP INDEX index_name ON talbe_name

(2)ALTER TABLE table_name DROP INDEX index_name

(3)ALTER TABLE table_name DROP PRIMARY KEY

第3條語句只在刪除PRIMARY KEY索引時使用,因為一個表只可能有一個PRIMARY KEY索引,因此不需要指定索引名。

1.4 索引實例

上面講了一下基本的知識,接下來,還是通過一個具體的例子來體會一下。

  •  step1:創建表 
  1.  create table table_index(  
  2.     id int(11) not null auto_increment,  
  3.     title char(255) not null,  
  4.     primary key(id)  
  5. ); 
  •  step2:添加索引

首先,我們使用直接添加索引的方式添加一個普通索引。 

  1. CREATE INDEX idx_a ON table_index(title); 

接著,我們用修改表結構的時候添加索引。 

  1. ALTER TABLE table_index ADD UNIQUE INDEX idx_b (title(100)); 

最后,我們再添加一個組合索引。 

  1. ALTER TABLE table_index ADD INDEX idx_id_title (id,title); 

這樣,我們就把前面索引的方式都用上一遍了,我相信你也熟悉這些操作了。

  •  step3:使用SHOW INDEX命令查看索引信息

如果想要查看表中的索引信息,可以使用命令SHOW INDEX,下面的例子,我們查看表table_index的索引信息。 

  1. SHOW INDEX FROM table_index\G; 

得到上面的信息,上面的信息什么意思呢?我們逐一介紹!

字段 解釋
Table 索引所在的表
Non_unique 非唯一索引,如果是0,代表唯一的,也就是說如果該列索引中不包括重復的值則為0 否則為1
Key_name 索引的名字,如果是主鍵的話 則為PRIMARY
Seq_in_index 索引中該列的位置,從1開始,如果是組合索引 那么按照字段在建立索引時的順序排列
Collation 列是以什么方式存儲在索引中的??梢允茿或者NULL,B+樹索引總是A,排序的,
Sub_part 是否列的部分被索引,如果只是前100行索引,就顯示100,如果是整列,就顯示NULL
Packed 關鍵字是否被壓縮,如果沒有,為NULL
Index_type 索引的類型,對于InnoDB只支持B+樹索引,所以都是顯示BTREE
  •  step4:刪除索引

直接刪除索引方式 

  1. DROP INDEX idx_a ON table_index; 

修改表結構時刪除索引 

  1. ALTER TABLE table_index DROP INDEX idx_b; 

1.5 Cardinality關鍵字解析

在上面介紹了那么多個關鍵字的意思,但是Cardinality這個關鍵字非常的關鍵,優化器會根據這個值來判斷是否使用這個索引。在B+樹索引中,只有高選擇性的字段才是有意義的,高選擇性就是這個字段的取值范圍很廣,比如姓名字段,會有很多的名字,可選擇性就高了。

一般來說,判斷是否需要使用索引,就可以通過Cardinality關鍵字來判斷,如果非常接近1,說明有必要使用,如果非常小,那么就要考慮是否使用索引了。

需要注意的一個問題時,這個關鍵字不是及時更新的,需要更新的話,需要使用ANALYZE TABLE,例如。 

  1. analyze table table_index; 

因為目前沒有數據,所以,你會發現,這個值一直都是0,沒有變化。

InoDB存儲引擎Cardinality的策略

在InnoDB存儲引擎中,這個關鍵字的更新發生在兩個操作中:insert和update。但是,并不是每次都會更新,這樣會增加負荷,所以,對于這個關鍵字的更新有它的策略:

  •  表中1/16的數據發生變化
  •  InnoDB存儲引擎的計數器stat_modified_conter>2000000000

默認InnoDB存儲引擎會對8個葉子節點進行采樣,采樣過程如下:

  •  B+樹索引中葉子節點數量,記做A
  •  隨機取得B+樹索引中的8個葉子節點。統計每個頁不同的記錄個數,分別為p1-p8
  •  根據采樣信息得到Cardinality的預估值:(p1+p2+p3+...+p8)*A/8

因為隨機采樣,所以,每次的Cardinality值都是不一樣的,只有一種情況會一樣的,就是表中的葉子節點小于或者等于8,這時候,怎么隨機采樣都是這8個,所以也就一樣的。

1.6 Fast Index Creation

在MySQL 5.5之前,對于索引的添加或者刪除,每次都需要創建一張臨時表,然后導入數據到臨時表,接著刪除原表,如果一張大表進行這樣的操作,會非常的耗時,這是一個很大的缺陷。

InnoDB存儲引擎從1.0.x版本開始加入了一種Fast Index Creation(快速索引創建)的索引創建方式。

這種方式的策略為:每次為創建索引的表加上一個S鎖(共享鎖),在創建的時候,不需要重新建表,刪除輔助索引只需要更新內部視圖,并將輔助索引空間標記為可用,所以,這種效率就大大提高了。

1.7 在線數據定義

MySQL5.6開始支持的在線數據定義操作就是:允許輔助索引創建的同時,還允許其他insert、update、delete這類DM操作,這就極大提高了數據庫的可用性。

所以,我們可以使用新的語法進行創建索引: 

  1. ALTER TABLE table_name ADD [UNIQUE|FULLLTEXT] INDEX index_name (column(length))  
  2. [ALGORITHM = {DEFAULT|INPLACE|COPY}]  
  3. [LOCK = {DEFAULT|NONE|SHARED|EXLUSIVE}] 

ALGORITHM指定創建或者刪除索引的算法

  •  COPY:創建臨時表的方式
  •  INPLACE:不需要創建臨時表
  •  DEFAULT:根據參數old_alter_table參數判斷,如果是OFF,采用INPLACE的方式

LOCK表示對表添加鎖的情況

  •  NONE:不加任何鎖
  •  SHARE:加一個S鎖,并發讀可以進行,寫操作需要等待
  •  EXCLUSIVE:加一個X鎖,讀寫都不能并發進行
  •  DEFAULT:先判斷是否可以使用NONE,如不能,判斷是否可以使用SHARE,如不能,再判斷是否可以使用EXCLUSIVE模式。

2 B+ 樹索引的使用

2.1 聯合索引

聯合索引是指對表上的多個列進行索引,這一部分我們將通過幾個例子來講解聯合索引的相關知識點。

首先,我們先創建一張表以及為這張表創建聯合索引。 

  1. create table t_index(  
  2. a char(2) not null default '',  
  3. b char(2) not null default '',  
  4. c char(2) not null default '',  
  5. d char(2) not null default ''  
  6. )engine myisam charset utf8; 

創建聯合索引 

  1. alter table t_index add index abcd(a,b,c,d); 

插入幾條測試數據 

  1. insert into t_index values('a','b','c','d'),  
  2. ('a2','b2','c2','d2'),  
  3. ('a3','b3','c3','d3'),  
  4. ('a4','b4','c4','d4'),  
  5. ('a5','b5','c5','d5'),  
  6. ('a6','b6','c6','d6'); 

到這一步,我們已經基本準備好了需要的數據,我們可以進行更深一步的聯合索引的探討。

我們什么時候需要創建聯合索引呢

索引建立的主要目的就是為了提高查詢的效率,那么聯合索引的目的也是類似的,聯合索引的目的就是為了提高存在多個查詢條件的情況下的效率,就如上面建立的表一樣,有多個字段,當我們需要利用多個字段進行查詢的時候,我們就需要利用到聯合索引了。

什么時候聯合索引才會發揮作用呢

有時候,我們會用聯合索引,但是,我們并不清楚其原理,不知道什么時候聯合索引會起到作用,什么時候又是會失效的?

帶著這個問題,我們了解一下聯合索引的最左匹配原則。

最左匹配原則:這個原則的意思就是創建組合索引,以最左邊的為準,只要查詢條件中帶有最左邊的列,那么查詢就會使用到索引。

下面,我們用幾個例子來看看這個原則。 

  1. EXPLAIN SELECT * FROM t_index WHERE a = 'a' \G; 

我們看看這條語句的結果,首先,我們看到使用了索引,因為查詢條件中帶有最左邊的列a,那么利用了幾個索引呢?這個我們需要看key_len這個字段,我們知道utf8編碼的一個字符3個字節,而我們使用的數據類型是char(2),占兩個字節,索引就是2*3等于6個字節,所以只有一個索引起到了作用。 

  1. EXPLAIN SELECT * FROM t_index WHERE b = 'b2' \G; 

這個語句我們可以看出,這個沒有使用索引,因為possible_keys為空,而且,從查詢的行數rows可以看出為6(我們測試數據總共6條),說明進行了全盤掃描的,說明這種情況是不符合最左匹配原則,所以不會使用索引查詢。 

  1. EXPLAIN SELECT * FROM t_index WHERE a = 'a2' AND b = 'b2' ORDER BY d \G; 

這種情況又有點不一樣了,我們使用了一個排序,可以看出使用了索引,通過key_len為12可以得到使用了2個索引a、b,另外在Extra選項中可以看到使用了Using filesort,也就是文件排序,這里使用文件排序的原因是這樣的:上面的查詢使用了a、b索引,但是當我們用d字段來排序時,(a,d)或者(b,d)這兩個索引是沒有排序的,聯合索引的使用有一個好處,就是索引的下一個字段是會自動排序的,在這里的這種情況來說,c字段就是排序的,但是d是不會,如果我們用c來排序就會得到不一樣的結果。 

  1. EXPLAIN SELECT * FROM t_index WHERE a = 'a2' AND b = 'b2' ORDER BY c \G; 

是不是可以看到,當我們用c進行排序的時候,因為使用了a、b索引,所以c就自動排序了,所以也就不用filesort了。

講到這里,我相信通過上面的幾個例子,對于聯合索引的相關知識已經非常的透徹清晰了,最后,我們再來聊幾個常見的問題。

Q1:為什么不對表中的每一個列創建一個索引呢

第一,創建索引和維護索引要耗費時間,這種時間隨著數據量的增加而增加。

第二,索引需要占物理空間,除了數據表占數據空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大。

第三,當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。

Q2:為什么需要使用聯合索引

減少開銷。建一個聯合索引(col1,col2,col3),實際相當于建了(col1),(col1,col2),(col1,col2,col3)三個索引。每多一個索引,都會增加寫操作的開銷和磁盤空間的開銷。對于大量數據的表,使用聯合索引會大大的減少開銷!

覆蓋索引。對聯合索引(col1,col2,col3),如果有如下的sql: select col1,col2,col3 from test where col1=1 and col2=2。那么MySQL可以直接通過遍歷索引取得數據,而無需回表,這減少了很多的隨機io操作。減少io操作,特別的隨機io其實是dba主要的優化策略。所以,在真正的實際應用中,覆蓋索引是主要的提升性能的優化手段之一。

效率高。索引列越多,通過索引篩選出的數據越少。有1000W條數據的表,有如下sql:select from table where col1=1 and col2=2 and col3=3,假設假設每個條件可以篩選出10%的數據,如果只有單值索引,那么通過該索引能篩選出1000W10%=100w條數據,然后再回表從100w條數據中找到符合col2=2 and col3= 3的數據,然后再排序,再分頁;如果是聯合索引,通過索引篩選出1000w10% 10% *10%=1w,效率提升可想而知!

覆蓋索引

覆蓋索引是一種從輔助索引中就可以得到查詢的記錄,而不需要查詢聚集索引中的記錄,使用覆蓋索引的一個好處是輔助索引不包含整行記錄的所有信息,所以大小遠小于聚集索引,因此可以大大減少IO操作。覆蓋索引的另外一個好處就是對于統計問題有優化,我們看下面的一個例子。 

  1. explain select count(*) from t_index \G; 

如果是myisam引擎,Extra列會輸出Select tables optimized away語句,myisam引擎已經保存了記錄的總數,直接返回結果,就不需要覆蓋索引優化了。

如果是InnoDB引擎,Extra列會輸出Using index語句,說明InnoDB引擎優化器使用了覆蓋索引操作。

2.2 索引提示

MySQL數據庫支持索引提示功能,索引提示功能就是我們可以顯示的告訴優化器使用哪個索引,一般有下面兩種情況可能使用到索引提示功能(INDEX HINT):

  •  MySQL數據庫的優化器錯誤的選擇了某個索引,導致SQL運行很慢
  •  某SQL語句可以選擇的索引非常的多,這時優化器選擇執行計劃時間的開銷可能會大于SQL語句本身。

這里我們接著上面的例子來講解,首先,我們先為上面的t_index表添加幾個索引; 

  1. alter table t_index add index a (a);  
  2. alter table t_index add index b (b);  
  3. alter table t_index add index c (c); 

接著,我們執行下面的語句; 

  1. EXPLAIN SELECT * FROM t_index WHERE a = 'a' AND b = 'b' AND c = 'c' \G; 

你會發現這條語句就可以使用三個索引,這個時候,我們可以顯示的使用索引提示來使用a這個索引,如下: 

  1. EXPLAIN SELECT * FROM t_index USE INDEX(a) WHERE a = 'a' AND b = 'b' AND c = 'c' \G; 

這樣就顯示的使用索引a了,如果這種方式有時候優化器還是沒有選擇你想要的索引,那么,我們可以另外一種方式FORCE INDEX。 

  1. EXPLAIN SELECT * FROM t_index FORCE INDEX(a) WHERE a = 'a' AND b = 'b' AND c = 'c' \G; 

這種方式則一定會選擇你想要的索引。

2.3 索引優化

Multi-Range Read 優化

MySQL5.6開始支持,這種優化的目的是為了減少磁盤的隨機訪問,并且將隨機訪問轉化為較為順序的數據訪問,這種優化適用于range、ref、eq_ref類型的查詢。

Multi-Range Read 優化的好處:

  •  讓數據訪問變得較為順序。
  •  減少緩沖區中頁被替換的次數。
  •  批量處理對鍵值的查詢操作。

我們可以使用參數optimizer_switch中的標記來控制是否開啟Multi-Range Read 優化。下面的方式將設置為總是開啟狀態: 

  1. SET @@optimizer_switch='mrr=on,mrr_cost_based=off'

Index Condition Pushdown(ICP) 優化

這種優化方式也是從MySQL5.6開始支持的,不支持這種方式之前,當進行索引查詢時,首先我們先根據索引查找記錄,然后再根據where條件來過濾記錄。然而,當支持ICP優化后,MySQL數據庫會在取出索引的同時,判斷是否可以進行where條件過濾,也就是將where過濾部分放在了存儲引擎層,大大減少了上層SQL對記錄的索取。

ICP支持range、ref、eq_ref、ref_or_null類型的查詢,當前支持MyISAM和InnoDB存儲引擎。

我們可以使用下面語句開啟ICP: 

  1. set @@optimizer_switch = "index_condition_pushdown=on" 

或者關閉: 

  1. set @@optimizer_switch = "index_condition_pushdown=off" 

當開啟了ICP之后,在執行計劃Extra可以看到Using index condition提示。

3 索引的特點、優點、缺點及適用場景

索引的特點

  •  可以加快數據庫的檢索速度
  •  降低數據庫插入、修改、刪除等維護的速度
  •  只能創建在表上,不能創建在視圖上
  •  既可以直接創建也可以間接創建

索引的優點

  •  創建唯一性索引,保證數據庫表中的每一行數據的唯一性
  •  大大加快數據的檢索速度
  •  加快數據庫表之間的連接,特別是在實現數據的參考完整性方面特別有意義
  •  在使用分組和排序字句進行數據檢索時,同樣可以顯著減少查詢的時間
  •  通過使用索引,可以在查詢中使用優化隱藏器,提高系統性能

索引的缺點

  •  第一,創建索引和維護索引要耗費時間,這種時間隨著數據量的增加而增加。
  •  第二,索引需要占物理空間,除了數據表占數據空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大。
  •  第三,當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。

索引的適用場景

  •  匹配全值

對索引中所有列都指定具體值,即是對索引中的所有列都有等值匹配的條件。

  •  匹配值的范圍查詢

對索引的值能夠進行范圍查找。

  •  匹配最左前綴

僅僅使用索引中的最左邊列進行查詢,比如在 col1 + col2 + col3 字段上的聯合索引能夠被包含 col1、(col1 + col2)、(col1 + col2 + col3)的等值查詢利用到,可是不能夠被 col2、(col2、col3)的等值查詢利用到。

最左匹配原則可以算是 MySQL 中 B-Tree 索引使用的首要原則。

  •  僅僅對索引進行查詢

當查詢的列都在索引的字段中時,查詢的效率更高,所以應該盡量避免使用 select *,需要哪些字段,就只查哪些字段。

  •  匹配列前綴

僅僅使用索引中的第一列,并且只包含索引第一列的開頭一部分進行查找。

  •  能夠實現索引匹配部分精確而其他部分進行范圍匹配
  •  如果列名是索引,那么使用 column_name is null 就會使用索引,例如下面的就會使用索引: 
  1. explain select * from t_index where a is null \G 
  •  經常出現在關鍵字order by、group by、distinct后面的字段
  •  在union等集合操作的結果集字段
  •  經常用作表連接的字段
  •  考慮使用索引覆蓋,對數據很少被更新,如果用戶經常值查詢其中你的幾個字段,可以考慮在這幾個字段上建立索引,從而將表的掃描變為索引的掃描

索引失效情況

  •  以%開頭的 like 查詢不能利用 B-Tree 索引,執行計劃中 key 的值為 null 表示沒有使用索引
  •  數據類型出現隱式轉換的時候也不會使用索引,例如,where 'age'+10=30
  •  對索引列進行函數運算,原因同上
  •  正則表達式不會使用索引
  •  字符串和數據比較不會使用索引
  •  復合索引的情況下,假如查詢條件不包含索引列最左邊部分,即不滿足最左原則 leftmost,是不會使用復合索引的
  •  如果 MySQL 估計使用索引比全表掃描更慢,則不使用索引
  •  用 or 分割開的條件,如果 or 前的條件中的列有索引,而后面的列中沒有索引,那么涉及的索引都不會被用到
  •  使用負向查詢(not ,not in, not like ,<> ,!= ,!> ,!< ) 不會使用索引 

 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2018-04-23 11:00:44

PythonRedisNoSQL

2020-04-20 13:11:21

HashMap底層存儲

2019-09-19 14:03:32

B樹節點數據結構

2023-09-22 07:52:16

HDMI 2.14K HDR游戲

2019-10-31 09:48:53

MySQL數據庫事務

2021-02-22 13:32:19

MySQLSQL索引

2017-09-08 11:10:35

前端面試Http協議

2020-03-14 09:17:55

HTTPS網絡協議HTTP

2020-01-15 08:06:28

HTTP超文本傳輸協議網絡協議

2020-02-03 17:22:34

垃圾回收原理種類

2020-12-28 10:28:02

算法應用技術

2020-04-28 09:15:58

HashMapJava數組

2020-05-15 11:14:58

操作系統面試官運行

2020-07-09 10:21:03

網絡排錯TCPIP

2021-02-06 09:21:17

MySQL索引面試

2022-05-27 08:18:00

HashMapHash哈希表

2020-04-15 12:24:55

Exception Error Java

2020-04-07 01:04:18

SessionCookieToken

2020-05-12 11:05:54

MySQL索引數據庫

2019-12-24 14:50:01

MySQL可重復讀數據庫
點贊
收藏

51CTO技術棧公眾號

国产精品亚洲综合天堂夜夜| 欧美精品日韩精品| 久久综合一区二区三区| 国产美女www| 国产精品精品| 亚洲国产成人精品一区二区| 国产精品一区二区羞羞答答| 亚洲91av| 国产丝袜美腿一区二区三区| 亚洲tv在线观看| 国产午夜免费福利| 亚洲一级毛片| 国产午夜一区二区| 日本成人在线免费| 巨胸喷奶水www久久久| 亚洲综合色视频| 亚洲视频sss| 天堂在线资源8| 精品一区二区在线视频| 热99精品只有里视频精品| 卡通动漫亚洲综合| 国产精品午夜一区二区三区| 精品少妇一区二区三区免费观看| 久久久久久三级| 免费高潮视频95在线观看网站| 国产精品久久久久久久蜜臀| 久久大香伊蕉在人线观看热2| 国产农村老头老太视频| 日韩av一区二区三区| 91精品国产91久久久| 91插插插插插插| 欧美日韩第一| 亚洲日韩欧美视频| 91玉足脚交白嫩脚丫| 久久中文字幕一区二区| 欧美日韩综合不卡| 爆乳熟妇一区二区三区霸乳| 九九色在线视频| 亚洲婷婷在线视频| 亚洲毛片aa| 国产系列电影在线播放网址| 91片在线免费观看| 国产精品美女黄网| 精品黑人一区二区三区国语馆| 美女脱光内衣内裤视频久久网站| 欧洲永久精品大片ww免费漫画| 国产精品99精品| 国产精品二区影院| 久久99精品久久久久久青青91| frxxee中国xxx麻豆hd| 欧美偷拍自拍| 一区二区三区亚洲| 在线视频第一页| 国产一区二区三区日韩精品| 亚洲男女性事视频| 国产高清一区二区三区四区| 欧美激情在线免费| 亚洲欧美精品伊人久久| 一区二区三区少妇| 亚洲精华一区二区三区| 日韩电影中文字幕| 30一40一50老女人毛片| 国产区精品区| 在线电影欧美日韩一区二区私密| 亚洲一区二区观看| 国产精品中文字幕亚洲欧美| 亚洲香蕉成视频在线观看| 国内精品卡一卡二卡三| 日韩精品免费| 久久亚洲精品小早川怜子66| 五月天婷婷色综合| 国内精品亚洲| 欧美怡春院一区二区三区| 国产午夜无码视频在线观看| 男男视频亚洲欧美| 91免费的视频在线播放| 亚洲AV无码精品国产| av在线这里只有精品| 免费日韩av电影| 在线国产91| 亚洲精品乱码久久久久久久久 | 欧美精品午夜| 欧美激情xxxx| 日本久久综合网| 久久精品国产精品亚洲红杏| 91九色蝌蚪成人| 天堂成人在线| 欧美激情一区二区三区不卡| 日本xxxxx18| av中文在线资源库| 欧美色视频在线观看| 激情成人在线观看| 亚洲国产最新| 欧美xxxx14xxxxx性爽| 午夜毛片在线观看| 国内外成人在线| 精品一区二区三区自拍图片区| 国产黄在线播放| 夜夜爽夜夜爽精品视频| 亚洲精品无码久久久久久| 亚洲精品成人一区| 日韩电视剧免费观看网站| 欧美福利在线视频| 亚洲日本成人| 91免费国产视频| 国产有码在线| 午夜久久福利影院| 中文字幕色网站| 亚洲第一二三区| 欧美日本黄视频| 波多野结衣视频观看| 国产不卡视频在线观看| 色女孩综合网| 热色播在线视频| 日韩一区二区精品在线观看| 亚洲精品国产91| 国产一区日韩一区| 国产精品视频色| 色视频在线观看福利| 国产精品久久久久四虎| 777米奇影视第四色| 亚洲无线观看| 久久福利视频网| 中文字幕人妻精品一区| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 黄色网一区二区| 日韩在线观看免费av| 无码日韩精品一区二区| 99国产麻豆精品| wwwwww欧美| 精品国产亚洲一区二区在线观看 | 国产91精品一区二区麻豆亚洲| 亚洲精品在线观看免费| av免费在线一区| 亚洲片在线资源| xxxx.国产| 91在线观看下载| 久久亚洲中文字幕无码| 成人在线视频你懂的| 欧美二区乱c黑人| 精品毛片在线观看| 亚洲女同一区二区| 三日本三级少妇三级99| 91精品国产91久久久久久密臀| 国产精品va在线播放我和闺蜜| 欧美zzoo| 在线精品视频一区二区三四| 波多野吉衣中文字幕| 久久国产日韩| 日韩中文不卡| 涩涩涩久久久成人精品| 日韩最新免费不卡| av网站在线免费看| 亚洲精品久久嫩草网站秘色| 日本55丰满熟妇厨房伦| 国内精品嫩模av私拍在线观看| 国产成人精品福利一区二区三区 | 欧洲一区在线电影| 日韩女同一区二区三区| 精品在线视频一区| 国产四区在线观看| www.成人网| 456亚洲影院| 黄色在线免费观看大全| 欧美亚洲高清一区| 亚洲波多野结衣| 国产成人精品免费一区二区| 黄页网站在线观看视频| 五月国产精品| 国产乱肥老妇国产一区二 | 精品人妻无码一区二区三区蜜桃一| 亚洲免费观看视频| 日本一卡二卡在线| 日韩vs国产vs欧美| 在线国产99| 国产精品任我爽爆在线播放| 日本a级片电影一区二区| 在线播放麻豆| 欧美成人精品3d动漫h| 日韩精品在线免费视频| 国产精品麻豆久久久| 久久发布国产伦子伦精品| 亚洲一区久久| 熟女熟妇伦久久影院毛片一区二区| 中文字幕一区日韩精品 | 精品中文在线| 51视频国产精品一区二区| 自拍视频在线网| 欧美成人一区二区| 69亚洲精品久久久蜜桃小说| 亚洲视频免费看| 右手影院亚洲欧美| 国产成人一级电影| 一本久道中文无码字幕av| 欧美国产先锋| 日本10禁啪啪无遮挡免费一区二区| 亚洲a成人v| 欧美中文在线免费| 尤物在线网址| 一级做a爰片久久毛片美女图片| 99草在线视频| 欧美在线免费观看视频| 精品小视频在线观看| 中文天堂在线一区| 先锋资源av在线| 国产一区欧美二区| 无需播放器的av| 99这里有精品| 99国产精品白浆在线观看免费| 大色综合视频网站在线播放| 成人欧美一区二区三区视频| 日韩在线电影| 国产成人aa精品一区在线播放| 在线黄色网页| 日韩一区二区欧美| 成人性爱视频在线观看| 亚洲精品福利免费在线观看| 国产女无套免费视频| 日本韩国一区二区| 日韩三级一区二区三区| 亚洲免费观看高清完整| 日本黄色录像视频| 国产午夜三级一区二区三| 色噜噜在线观看| 国产成人av在线影院| 久久婷婷中文字幕| 久久99久久久久久久久久久| 另类小说第一页| 欧美亚洲在线| 美女福利视频在线| 国产亚洲一区在线| 天天夜碰日日摸日日澡性色av| 欧美日韩亚洲一区二区三区在线| 欧美爱爱视频网站| 97精品国产一区二区三区| 亚洲高清在线观看一区| 欧美综合一区| 视频一区二区在线| 精品中文字幕一区二区三区av| 九九久久99| 少妇高潮一区二区三区| 精品一区二区三区国产| 欧美日韩直播| 麻豆传媒一区二区| 在线日本制服中文欧美| 蜜桃在线一区二区三区精品| 丝袜美腿一区二区三区动态图| 国产一区二区无遮挡| 理论片一区二区在线| 久久99精品久久久久久水蜜桃| 国产劲爆久久| 久久精品人人做人人爽电影| 婷婷精品在线观看| 欧美日韩精品免费观看视一区二区| 亚洲精品合集| 日韩av电影免费播放| 日韩免费特黄一二三区| 偷拍盗摄高潮叫床对白清晰| 综合天堂久久久久久久| 亚洲精品蜜桃久久久久久| 亚洲高清av| 777久久久精品一区二区三区| 免费一区视频| 久久人人爽av| 国产精品亚洲午夜一区二区三区| 日本不卡视频一区| 久久久一区二区三区| 夫妇露脸对白88av| 一区二区三区四区在线免费观看 | 欧美在线你懂的| 一级特黄aaa大片| 欧美不卡在线视频| 女人天堂在线| 日韩在线激情视频| 欧洲在线视频| 日本一区二区在线播放| 亚洲视频自拍| 国严精品久久久久久亚洲影视| 你懂的视频欧美| 日韩第一页在线观看| 亚洲激情一区| 日本人视频jizz页码69| 国产成人综合在线观看| wwwwxxxx国产| 亚洲激情在线激情| 天堂网视频在线| 日韩一级完整毛片| 黄视频在线播放| 欧美精品日韩www.p站| 成人短视频app| 亚洲www在线观看| 宅男在线一区| 国产视频在线观看网站| 日本免费在线视频不卡一不卡二| 欧美xxxx黑人| 欧美韩日一区二区三区四区| 久久久无码精品亚洲国产| 91激情五月电影| 隣の若妻さん波多野结衣| 在线成人激情黄色| 涩涩涩在线视频| 91蜜桃网站免费观看| 成人在线免费观看91| 久久精品国产精品亚洲色婷婷| 国产米奇在线777精品观看| 欧美性xxxx图片| 亚洲一区二区三区四区不卡 | 精品奇米国产一区二区三区| 极品美乳网红视频免费在线观看 | 性感美女一区二区在线观看| 91久久极品少妇xxxxⅹ软件| 色婷婷色综合| 精品免费国产一区二区| av不卡在线观看| 青青草手机视频在线观看| 精品视频全国免费看| 男女网站在线观看| 91福利视频网| 国产精品1luya在线播放| 国产高清免费在线| 青青青爽久久午夜综合久久午夜| 欧美成人午夜精品免费| 午夜激情综合网| 欧洲av在线播放| 久久久伊人欧美| 我要色综合中文字幕| 色哺乳xxxxhd奶水米仓惠香| 秋霞电影一区二区| 国产一级久久久久毛片精品| 色综合一区二区| 亚洲av成人无码网天堂| 68精品国产免费久久久久久婷婷| 99这里只有精品视频| 大胆欧美熟妇xx| 国产激情视频一区二区三区欧美| 日韩欧美123区| 欧美一二区视频| 最新国产露脸在线观看| 成人久久精品视频| 亚洲综合婷婷| 男生和女生一起差差差视频| 亚洲色图制服丝袜| 国产乱淫a∨片免费观看| 久久久999成人| 欧美午夜在线播放| 免费视频爱爱太爽了| 国产suv精品一区二区三区| 久久久久久久蜜桃| 亚洲第一福利网站| 日本在线高清| 奇米精品在线| 久久99国产精品久久99果冻传媒| www.99re6| 日韩欧美国产wwwww| √8天堂资源地址中文在线| 久久96国产精品久久99软件| 免费一级欧美片在线播放| 林心如三级全黄裸体| 欧美一区二区私人影院日本| 午夜在线激情影院| 精品国产一区二区三区四区精华| 亚洲永久视频| 日韩av片在线免费观看| 日韩欧美中文一区| 91av久久| 日韩欧美一区二区三区久久婷婷| 蜜臀av亚洲一区中文字幕| 黄色a级片在线观看| 亚洲第一区在线| 电影网一区二区| 色中文字幕在线观看| 国产+成+人+亚洲欧洲自线| 国产一级片毛片| 色偷偷av一区二区三区乱| av成人资源| 国产无套粉嫩白浆内谢的出处| 成人欧美一区二区三区白人| 好吊视频一区二区三区| 国产成人精品电影| 一个色综合网| 手机av免费看| 欧美一区二区免费视频| 亚洲性色av| 最近免费观看高清韩国日本大全| 97超碰欧美中文字幕| 一区二区三区免费在线| 69av成年福利视频| 亚洲破处大片| 亚洲乱码国产乱码精品精大量| 欧美日韩成人高清| 黑人极品ⅴideos精品欧美棵| 视频一区三区| 99精品视频免费在线观看| 中文字幕av网站| 69视频在线播放| 国产精品久久久乱弄| 男人操女人动态图| 精品三级在线看| 2020国产精品小视频| 日韩 欧美 高清|