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

explain都不會用,你還好意思說精通MySQL查詢優化?

數據庫 MySQL
Explain關鍵字是Mysql中sql優化的常用「關鍵字」,通常都會使用Explain來「查看sql的執行計劃,而不用執行sql」,從而快速的找出sql的問題所在。

[[339409]]

Explain簡介

Explain關鍵字是Mysql中sql優化的常用「關鍵字」,通常都會使用Explain來「查看sql的執行計劃,而不用執行sql」,從而快速的找出sql的問題所在。

在講解Explain之前首先創建需要的「用戶表user、角色表role、以及用戶角色關系表role_user」作為測試用的表: 

  1. // 用戶表  
  2. DROP TABLE IF EXISTS `user`;  
  3. CREATE TABLE `user` (  
  4.   `id` int(11) NOT NULL,  
  5.   `name` varchar(25) DEFAULT NULL,  
  6.   `age` int(11)  NOT NULL DEFAULT 0,  
  7.   `update_time` datetime DEFAULT NULL,  
  8.   PRIMARY KEY (`id`)  
  9. ENGINE=InnoDB DEFAULT CHARSET=utf8 
  10. INSERT INTO `user` (`id`, `name`, `age`,`update_time`) VALUES (1,'張三',23,'2020-12-22 15:27:18'), (2,'李四',24,'2020-06-21 15:27:18'), (3,'王五',25,'2020-07-20 15:27:18'); 
  11.  DROP TABLE IF EXISTS `role`;  
  12. CREATE TABLE `role` (  
  13.   `id` int(11) NOT NULL AUTO_INCREMENT,  
  14.   `name` varchar(10) DEFAULT NULL,  
  15.   PRIMARY KEY (`id`),  
  16.   KEY `index_name` (`name`)  
  17. ENGINE=InnoDB DEFAULT CHARSET=utf8 
  18. INSERT INTO `role` (`id`, `name`) VALUES (1,'產品經理'),(2,'技術經理'),(3,'項目總監');  
  19. DROP TABLE IF EXISTS `role_user`;  
  20. CREATE TABLE `role_user` (  
  21.   `id` int(11) NOT NULL,  
  22.   `role_id` int(11) NOT NULL,  
  23.   `user_id` int(11) NOT NULL,  
  24.   PRIMARY KEY (`id`),  
  25.   KEY `index_role_user_id` (`role_id`,`user_id`)  
  26. ENGINE=InnoDB DEFAULT CHARSET=utf8 
  27. INSERT INTO `role_user` (`id`, `role_id`, `user_id`) VALUES (1,2,1),(2,1,2),(3,3,3);  

我們首先執行一條sql:explain select * from user where id =2;,執行后可以看到執行的結果如下:

可以看到這里有12個字段那個且都有對應的值,這就是explain的執行計劃,能看懂這個執行計劃,你離精通sql優化就不遠了,下面就來詳細的介紹這12個字段分別表示什么意思。

id字段

id表示執行select查詢語句的序號,它是sql執行的順序的標識,sql按照id從大到小執行,id相同的為一組,從上到下執行。

什么意思呢?例如執行這條sql:explain select * from user where id in (select user_id from role_user); 

  1. +----+-------------+-----------+------------+-------+---------------+--------------------+---------+------+------+----------+-----------------------------------------------------------------------------------+ 
  2. | id | select_type | table     | partitions | type  | possible_keys | key                | key_len | ref  | rows | filtered | Extra                                                                             | 
  3. +----+-------------+-----------+------------+-------+---------------+--------------------+---------+------+------+----------+-----------------------------------------------------------------------------------+ 
  4. |  1 | SIMPLE      | user      | NULL       | ALL   | PRIMARY       | NULL               | NULL    | NULL |    3 |   100.00 | NULL                                                                              | 
  5. |  1 | SIMPLE      | role_user | NULL       | index | NULL          | index_role_user_id | 8       | NULL |    3 |    33.33 | Using where; Using index; FirstMatch(user); Using join buffer (Block Nested Loop) | 
  6. +----+-------------+-----------+------------+-------+---------------+--------------------+---------+------+------+----------+-----------------------------------------------------------------------------------+ 

 顯示出的兩者的id都相同,便表示sql的執行從上往下執行,第一條記錄對應的是user表,然后第二條記錄對應的是role_user表,這種是id相同的情況。

若是id不同,例如執行下面的sql:explain select (select 1 from user limit 1) from role;: 

  1. +----+-------------+-------+------------+-------+---------------+------------+---------+------+------+----------+-------------+  
  2. | id | select_type | table | partitions | type  | possible_keys | key        | key_len | ref  | rows | filtered | Extra       |  
  3. +----+-------------+-------+------------+-------+---------------+------------+---------+------+------+----------+-------------+  
  4. |  1 | PRIMARY     | role  | NULL       | index | NULL          | index_name | 33      | NULL |    3 |   100.00 | Using index |  
  5. |  2 | SUBQUERY    | user  | NULL       | index | NULL          | PRIMARY    | 4       | NULL |    3 |   100.00 | Using index |  
  6. +----+-------------+-------+------------+-------+---------------+------------+---------+------+------+----------+-------------+ 

就會看到有兩條記錄,并且兩條記錄的id會不一樣,id越大的就越先執行,可以看到id=2的執行的是user表,也就是子查詢部分,最后執行最外層的部分。

「結論:」 這個就是id標識sql的執行順序,一般在復雜查詢中會有多條記錄,簡單查詢只有一條記錄,復雜查詢中id相同的為一組,執行的順序是從上往下,而id越大的越先執行;Mysql 8中會存在對子查詢進行優化,所以有時候即使是復雜查詢,也只有一條記錄。

select_type字段

select_type表示查詢的類型,也就是對應的是簡單查詢還是復雜查詢,若是復雜查詢又包含:「簡單的子查詢、from子句的子查詢、union查詢」。下面就分別來看看select_type中的所有查詢類型。

simple

simple表示簡單查詢,不含有任何的復雜查詢。

PRIMARY

復雜查詢中「最外層的select語句的查詢類型就是PRIMARY」,例如執行下面的sql:explain select * from role where id = (select id from role_user where role_id = (select id from user where id = 2));

最外層的select,也就是select * from role where id =?會被標記為PRIMARY類型。

SUBQUERY

在「select或者where中包含的子查詢」會被表示為SUBQUERY類型,例如上一句執行的sql中就有兩次的子查詢為SUBQUERY。

DERIVED

「DERIVED表示的是派生表或者衍生表的意思,在from包含的子查詢中會被表示為DERIVED類型」,Mysql會遞歸執行這些子查詢,并且把結果放在臨時表中。執行sql:explain select * from (select name from user union select name from role) a where a.name = '張三';

在Mysql 5.7以上的版本中對其做了優化,新增了derived_merge(派生合并),可以加快查詢效率。

UNION

在出現「UNION查詢語句中,第二個select的查詢語句就會被表示為UNION」:

UNION RESULT

「UNION查詢語句的結果被標記為UNION RESULT」,如上面執行的sql:explain select * from (select name from user union select name from role) a where a.name = '張三';

第四行記錄中從table字段中可以看出,第四行的記錄來源于第二行和第三行<union2,3>,因此一個UNION查詢語句的結果就會被標記為UNION RESULT

其它

上面的七個select_type都是比較常見的,還有一些不常見的,作為了解就好:

  1.  DEPENDENT UNION:也表示UNION查詢語句中第二個或者后面的語句,但是取決于外面的查詢。
  2.  DEPENDENT SUBQUERY:子查詢中的第一個select語句,也是依賴于外部的查詢。
  3.  UNCACHEABLE SUBQUERY:子查詢的結果不能被緩存,必須重新評估外連接的第一行。

table字段

這個很容易看出「table字段表示的是查詢的是哪個表」,一個是已經存在的表,比如上面的user、role都是我們自己創建的表,也可以表示衍生表。

比如:UNION RESULT的table字段表示為<union2,3>,也就是查詢的是第二行和第三行的結果記錄。

type字段

「type字段表示的sql關聯的類型或者說是訪問的類型」。從這個字段中我們可以確定這條sql查找數據庫表的時候,查找記錄的大概范圍是怎么樣的,直接就能體現sql的效率問題。

type字段的類型也是有比較多,主要常見掌握的有以下幾個:system、const 、eq_ref 、ref 、range 、index 、ALL。它的性能體現是從高到低,即system > const > eq_ref > ref > range > index > ALL,下面就來詳細的說一說這屬性。

system

system是const的特例,「表示表中只有一行記錄」,這個幾乎不會出現,也作為了解。

const

const表示通過索引一次就查找到了數據,一般const出現在「唯一索引或者主鍵索引中使用等值查詢」,因為表中只有一條數據匹配,所以查找的速度很快。例子:explain select * from user where id =2;

eq_ref

eq_ref表示使用唯一索引或者主鍵索引掃描作為表鏈接匹配條件,對于每一個索引鍵,表中只有一條記錄與之匹配。例如:explain select * from user left join role_user on user.id = role_user.user_id left join role on role_user.role_id=role.id;

ref

ref性能比eq_ref差,也表示表的鏈接匹配條件,也就是使用哪些表字段作為查詢索引列上的值,ref與eq_ref的區別就是eq_ref使用的是唯一索引或者主鍵索引。

ref掃描后的結果可能會找到多條符合條件的行數據,本質上是一種索引訪問,返回匹配的行。例如:explain select * from user where name = '張三';

range

「range使用索引來檢索給定范圍的行數據,一般是在where后面使用between、<>、in等查詢語句就會出現range」:explain select * from user where id > 2;

index

index表示會遍歷索引樹,index回避ALL速度快一些,但是出現index說明需要檢查自己的索引是否使用正確:explain select id from user;

ALL

「ALL與index的區別就是ALL是從硬盤中讀取,而index是從索引文件中讀取」,ALL全表掃描意味著Mysql會從表的頭到尾進行掃描,這時候表示通常需要增加索引來進行優化了,或者說是查詢中并沒有使用索引作為條件進行查詢:explain select * from user;

possible_keys字段

possible_keys表示這一列查詢語句可能使用到的索引,僅僅只是可能,列出來的索引并不一定真正的使用到。

當沒有使用索引為NULL時,說明需要增加索引來優化查詢了,若是表的數據比較少的話,數據庫覺得全表掃描更快,也可能為NULL。

key字段

key字段與possible_keys的區別就是,表示的真正使用到的索引,即possible_keys中包含key的值。

若是想Mysql使用或者忽視possible_keys中的索引,可以使用FORCE INDEX、USE INDEX或者IGNORE INDEX。

key_len字段

表示sql查詢語句中索引使用到的字節數,這個字節數并不是實際的長度,而是通過計算查詢中使用到的索引中的長度得出來的,顯示的是索引字段最大的可能長度。

一般來說在不損失精度的前提下,key_len是越小越好,比如上面的測試表的id為int類型,int類型由4個字節組成:explain select * from user where id =2;

key_len對于不同的類型有自己的計算規則,具體的計算規則如下所示:

數據類型 所占字節數
字符串 char(n):n字節長度
varchar(n):2字節存儲字符串長度,如果是utf-8,則長度 3n + 2
數值類型 tinyint:1字節
smallint:2字節
int:4字節
bigint:8字節
時間類型 date:3字節
timestamp:4字節
datetime:8字節

若是索引為字符串類型的時候,實際存儲的字符串非常長,已經超出了字符串類型的存儲最大長度(768字節),mysql,就會使用類似左前綴索引來處理。

ref字段

ref表示列與索引的比較,表連接的匹配條件,表示哪些列或者常量被用于查詢索引列上的值。

rows字段

rows表示估算的要掃描的行數,一般Mysql會根據統計表信息和索引的選用情況,估算出查找記錄所要掃描的行數,注意這個并不是實際結果集的行數。

partitions、filtered字段

partitions表示所匹配的分區;filtered表示的是查詢表行所占表的百分比。

Extra字段

該字段顯示的是sql查詢的額外信息,主要有以下幾種情況:

Using index

表示查詢的列被索引覆蓋,這個是查詢性能比較高的體現,即所要查詢的信息搜在索引里面可以得到,不用回表,索引被正確的使用:explain select id from user where id =2;

假如同時出現了using where,表示索引用于執行索引鍵值的查找;若是沒有出現using where,則表示索引用于讀取數據,而非執行查詢的動作。

Using where

該屬性與Using index相反,查詢的列并沒有被索引覆蓋,where條件后面使用的是非索引的前導列,它僅僅是使用了where條件而已:explain select user.* from user,role,role_user where user.id = role_user.user_id and role.id=role_user.role_id;

Using temporary

「Using temporary表示使用了臨時表存儲中間的結果,一般在對結果排序的時候會使用臨時表」,例如:排序order by 和分組查詢group by。例子:explain select * from (select name from user union select name from role) a where a.name = '張三';

Using filesort

Using filesort表示文件排序,說明Mysql對數據使用了外部的索引進行排序,并沒有使用表中的索引進行排序:explain select * from user order by name;

Using join buffer

Using join buffer表示使用連接緩存:explain select user.* from user,role,role_user where user.id = role_user.user_id and role.id=role_user.role_id;

它強調在獲取連接條件時,并沒有使用索引,而是使用連接緩沖區來存儲中間結果,若是出現該值,一般說明需要添加索引來進行優化了。

Impossible where

Impossible where會出現在where后的條件一直為false的情況下,這種可以忽視,比較少出現:explain select * from user where name = 'hah' and name = 'sfsd';

Select tables optimized away

表示select語句沒有遍歷表或者索引就返回數據了,比如:explain select min(id) from user;

在Extra字段中還有其它的屬性,但是幾乎都沒見過的,不出現,所以哪些就講解,有興趣的可以自己去了解,這里只列出這些常見的。

說了那么多理論總是要實踐一下的,下面以user測試表為例進行測試實踐。

實踐

(1)通過查詢 explain select * from user where name ='張三';name字段并沒有創建索引。

我們可以通過創建一個聯合索引index_name_age_time,來解決: 

  1. alter table user add index index_name_age_time (name,age,update_time) ; 

當再次查詢的時候,就會使用上了索引:

(2)使用聯合索引要遵循「最左前綴法則」,關于最左前綴法則原則的使用,之前我寫過一篇詳細介紹的文章,可以參考[]。

(3)在使用索引進行查詢的時候,不要做任何的函數操作,不然會導致索引失效:例子:EXPLAIN SELECT * FROM user WHERE name = '張三';

但是你在使用的時候,使用了left()函數,如:EXPLAIN SELECT * FROM employees WHERE left(name,2) = '張三';,會導致索引失效。

(4)在數據庫的查詢中不要使用(!=或者<>)等判條件和is null,is not null、like關鍵詞中以%開頭來判斷,不然也會使索引失效: 

 

責任編輯:龐桂玉 來源: 數據庫開發
相關推薦

2020-09-27 06:50:56

Java互聯網注解

2015-03-16 11:33:16

程序員代碼bug

2021-03-16 15:12:57

CompletableFuture機制java

2024-08-12 12:25:25

SpringMVC開發

2019-01-23 10:58:52

接入層架構負載均衡

2021-01-28 09:40:33

運維監控工具軟件

2022-06-28 08:03:06

緩存Redis

2024-09-13 09:32:30

2020-05-14 08:59:28

API網關性能

2020-09-01 14:17:03

WindowsDefender微軟

2020-11-09 09:03:35

高并發多線程ThreadLocal

2019-12-26 09:56:34

Java多線程內部鎖

2022-02-22 08:25:51

typeScript泛型概念泛型使用

2022-03-27 22:07:35

元宇宙虛擬人IBM

2020-05-19 13:34:20

ZookeeperZAB協議

2019-08-21 08:01:24

計算機視覺人工智能深度學習

2015-07-13 09:48:21

iOS

2019-09-03 09:30:46

ss 命令SocketLinux

2024-09-09 08:36:36

Java操作遠程服務器

2017-02-08 19:49:03

內存SSDDRAM
點贊
收藏

51CTO技術棧公眾號

午夜日韩在线观看| 成人av影院在线| 日韩视频在线免费观看| 日本女人黄色片| 黑人精品视频| 国产性做久久久久久| 成人www视频在线观看| 免费一级a毛片夜夜看| 日韩深夜福利| 在线不卡a资源高清| 久青草视频在线播放| 精华区一区二区三区| 久久99国产精品尤物| 国内偷自视频区视频综合 | 国产精品17p| 欧美午夜精品久久久久久超碰| 国产成人免费高清视频| 四虎国产精品永远| 国产精品一品二品| 国产精品成人在线| 久草视频精品在线| 欧美1级片网站| 亚洲精品自在久久| 性高潮久久久久久| 黄色成人小视频| 偷窥国产亚洲免费视频| 91免费视频黄| av电影在线播放高清免费观看| 国产高清精品在线| 国产日韩欧美在线看| 99热只有这里有精品| 午夜精品999| 色多多国产成人永久免费网站| 国产又黄又粗又猛又爽的视频| 韩国三级成人在线| 欧美日韩精品电影| 免费看a级黄色片| 亚洲女同志freevdieo| 一区二区三区四区蜜桃| 在线观看欧美激情| 超碰在线影院| 久久久久亚洲综合| 久久久久久高清| 无码精品在线观看| 国产99久久久精品| 91久久精品www人人做人人爽| 中文字幕久久熟女蜜桃| 视频一区二区欧美| 日韩av成人在线| 在线观看亚洲天堂| 亚洲精选久久| 97视频在线播放| 一区二区三区免费高清视频| 欧美一区网站| 美女视频久久黄| 精品亚洲乱码一区二区 | 日韩中文娱乐网| 日本在线观看网址| 久久神马影院| 久久久精品2019中文字幕神马| 岛国片在线免费观看| 欧美大黑bbbbbbbbb在线| 色先锋资源久久综合5566| 精品人妻无码一区| 99精品全国免费观看视频软件| 在线一区二区日韩| 网站永久看片免费| 99精品在线观看| 久久视频这里只有精品| 欧美日韩中文字幕在线观看 | 另类视频在线观看| 青青草手机在线观看| 国模吧视频一区| 88xx成人精品| 国产剧情在线视频| 蜜臀精品久久久久久蜜臀| 国产日韩欧美中文| www.国产黄色| 91免费版在线| 日韩三级电影| 在线观看午夜av| 欧美日韩国产中文精品字幕自在自线 | 午夜激情视频网| japanese色系久久精品| 精品视频—区二区三区免费| caopeng视频| 天天做天天爱天天综合网2021| 欧美区二区三区| 国产一级做a爱片久久毛片a| 日韩av一区二| 97se国产在线视频| 久久久久久久久亚洲精品| 国产欧美精品区一区二区三区| 一区二区三区av在线| 免费在线看污片| 色拍拍在线精品视频8848| 久国产精品视频| 欧美理伦片在线播放| 一区二区三区精品99久久| 久久久久久久久毛片| 99国产精品99久久久久久粉嫩| 国产91精品在线播放| a天堂在线观看视频| 久久夜色精品国产噜噜av| 成人性做爰片免费视频| 麻豆国产在线| 日韩一区二区三区av| 亚洲做受高潮无遮挡| 久久久久电影| 国产精品久久99久久| 精品久久久中文字幕人妻| 久久久久久电影| 日韩精品免费一区| 成人在线免费av| 日韩成人高清在线| 成人自拍小视频| 日精品一区二区三区| 成人三级视频在线观看一区二区| av一本在线| 欧美性猛交xxxx富婆弯腰| 日本亚洲一区二区三区| 欧美一站二站| 日本一区二区在线播放| 亚洲男人天堂久久| 亚洲欧美另类小说视频| 国产精品视频黄色| 亚洲精品国产精品粉嫩| 午夜精品一区二区三区在线视频 | 久久综合综合久久综合| 欧美日韩亚洲在线| 国产在线88av| 欧美精品一区二区三区四区| 国产91在线播放九色| 丝袜美腿一区二区三区| 国产尤物99| 91超碰国产在线| 欧美一区二区视频免费观看| 波多野结衣家庭教师在线观看| 男女精品视频| 精品无码久久久久国产| 51av在线| 亚洲第一区在线观看| 激情小说中文字幕| 国产麻豆一精品一av一免费| 亚洲第一精品区| 亚洲国产91视频| 俺去亚洲欧洲欧美日韩| 一级黄色片在线播放| 欧美韩国日本一区| jizzzz日本| 欧美好骚综合网| 国产综合久久久久久| 日本不卡视频| 欧美一级免费观看| 久草免费新视频| 本田岬高潮一区二区三区| 国产一级爱c视频| 亚洲第一二三区| 国产精品久久久久福利| 91av资源在线| 欧美一区二区视频网站| 久久精品波多野结衣| 波多野洁衣一区| 激情综合网婷婷| 日韩dvd碟片| 国产日韩欧美成人| 日本性爱视频在线观看| 亚洲国产女人aaa毛片在线| 51国产偷自视频区视频| 国产性做久久久久久| 五月激情婷婷在线| 欧美日韩综合| 六月婷婷久久| 国产亚洲精品精品国产亚洲综合| 日韩有码视频在线| 亚洲免费黄色片| 日韩欧美在线视频日韩欧美在线视频| 亚洲精品成人无码| 狠狠色狠狠色综合| 免费不卡av在线| jizzjizz欧美69巨大| 91视频免费网站| av福利导福航大全在线| 亚洲视频在线观看免费| 国产精品久久婷婷| 亚洲国产精品久久久久婷婷884| 欧美bbbbb性bbbbb视频| 蜜乳av一区二区| 日韩xxxx视频| 日韩精品免费一区二区在线观看| 3d动漫精品啪啪一区二区三区免费| 懂色av一区| 视频在线观看99| 欧美特级特黄aaaaaa在线看| 色综合久久久久网| 国产高清在线免费观看| xnxx国产精品| 麻豆精品国产传媒| 日韩精品一二三四| 黄色三级中文字幕| 日韩国产专区| 好吊色欧美一区二区三区视频| 欧美爱爱视频| 国产91精品久久久久| а√中文在线8| 亚洲欧美激情精品一区二区| 国产精品一区二区人人爽| 欧美日韩色婷婷| 午夜少妇久久久久久久久| 久久中文娱乐网| 香蕉久久久久久av成人| 久久国产免费看| 妺妺窝人体色www在线小说| 999久久久精品国产| 欧美激情论坛| 成人精品动漫一区二区三区| 成人黄色大片在线免费观看| 欧美电影网站| 97香蕉久久夜色精品国产| 国产美女av在线| 亚洲美女久久久| 天天综合网在线| 日韩免费高清av| 一级特黄aaa大片在线观看| 色综合咪咪久久| 国产成人亚洲欧洲在线| 亚洲一区二区三区四区的| 成人性视频免费看| 中文字幕 久热精品 视频在线 | 亚洲一区二区三区四区五区xx| 国产精品国码视频| 亚洲一级二级在线| 狠狠久久综合婷婷不卡| 在线免费观看亚洲| 国产精品欧美久久久| 亚洲精品**中文毛片| 国内精品久久久久久| 在线你懂的视频| 久久精品国产亚洲精品2020| 国产视频网址在线| 亚洲人成电影网站色www| 色婷婷中文字幕| 欧美精品一区二区不卡| 亚洲精品久久久久久无码色欲四季 | 在线观看亚洲黄色| 色噜噜夜夜夜综合网| 亚洲 欧美 成人| 欧美日韩亚洲一区二区三区| 国产成人精品a视频一区| 亚洲电影在线播放| 久久久久99精品| 午夜视频在线观看一区| 免费一级特黄特色大片| 亚洲国产日韩a在线播放| 久久免费小视频| 精品久久久久久久久国产字幕| 亚洲天堂日韩av| 欧美日韩午夜视频在线观看| 久久夜色精品亚洲| 欧美性xxxxx极品娇小| 中文字幕国产在线观看| 日本高清成人免费播放| 波多野结衣在线电影| 欧美午夜不卡在线观看免费| 久久国产香蕉视频| 666欧美在线视频| 国产特级黄色片| 亚洲白虎美女被爆操| 午夜在线视频免费| 亚洲人午夜精品| 免费av网站在线看| 欧美激情欧美狂野欧美精品| 国产伦理精品| 国产精品v日韩精品| 四虎地址8848精品| 不卡的av一区| 伊人久久大香线蕉| 曰韩不卡视频| 亚洲国产第一| 天天操天天爽天天射| 经典一区二区三区| 黑人玩弄人妻一区二区三区| 久久久无码精品亚洲日韩按摩| 国产视频不卡在线| 一区二区三区在线观看视频| 久久久久久久久久久影院| 欧美日韩一级视频| 色香蕉在线视频| 一本一本久久a久久精品综合小说 一本一本久久a久久精品牛牛影视 | 国产做a爰片久久毛片| 久草视频福利在线| 国产亚洲欧美激情| 久久久久久久国产视频| 色噜噜夜夜夜综合网| 性中国古装videossex| 亚洲欧洲第一视频| 欧美寡妇性猛交xxx免费| 国产91免费看片| 亚洲超碰在线观看| 亚洲 日韩 国产第一区| 在线免费观看欧美| 亚洲综合日韩欧美| 91丝袜高跟美女视频| 国产67194| 日本精品一区二区三区高清| www.黄色av| 色偷偷噜噜噜亚洲男人| 欧亚av在线| 99视频国产精品免费观看| 欧美精品一区二区三区精品| 青草视频在线观看视频| 蜜桃久久久久久| av电影网站在线观看| 亚洲成人免费影院| 国产欧美一级片| 中文字幕日韩免费视频| 亚洲男人av| 国产日韩精品一区观看| 91成人免费| 超碰超碰在线观看| 久久久久久一级片| 日韩三级视频在线播放| 日韩欧美第一区| 黄色成年人视频在线观看| 国产成人精品网站| 色吊丝一区二区| av免费观看国产| 国产不卡视频在线播放| 色婷婷在线视频观看| 欧美视频中文字幕| 成年人在线观看网站| 日韩av成人在线观看| 丝袜久久网站| 久久久一本二本三本| 懂色av一区二区三区免费看| a一级免费视频| 欧美日韩精品一区二区天天拍小说| 精品美女视频在线观看免费软件 | 久久视频免费在线| 精品一区二区免费看| gv天堂gv无码男同在线观看| 在线观看91精品国产入口| 国模精品一区二区| 国产成人高清激情视频在线观看 | 91黄色在线看| 国产丶欧美丶日本不卡视频| 男人与禽猛交狂配| 日韩西西人体444www| 色在线视频网| 国产一区二区三区黄| 影音先锋在线一区| 在线黄色免费网站| 欧美日韩国产麻豆| 免费黄网站在线观看| 国产福利成人在线| 日韩亚洲一区在线| 又黄又爽又色的视频| 亚洲午夜精品网| 天堂在线免费av| 国产精品88a∨| 欧美大片aaaa| 亚洲熟女一区二区三区| 黄色一区二区在线观看| 涩爱av在线播放一区二区| 欧日韩不卡在线视频| 日韩1区在线| 婷婷激情小说网| 亚洲成人自拍偷拍| 国产香蕉视频在线看| 成人精品aaaa网站| 国产精品大片免费观看| 国产精品扒开腿做爽爽爽a片唱戏| 狠狠色狠狠色综合日日小说| 国产一二三在线观看| 国产色综合天天综合网| 综合日韩在线| 蜜臀av一区二区三区有限公司| 欧美亚洲一区二区三区四区| 国产视频一区二区| 久久久综合亚洲91久久98| 日本在线不卡一区| 青青草原国产视频| 日韩大片免费观看视频播放| 日韩精品第一| 日本a在线天堂| 久久久久久久久伊人| 国产色综合视频| 日本a级片电影一区二区| 国产精品99一区二区三| 97人妻精品一区二区三区免费 | 九九九九九九九九| 亚洲.国产.中文慕字在线| 国产私人尤物无码不卡| 99久re热视频这里只有精品6| 老妇喷水一区二区三区| 在线观看成人毛片| 亚洲色图校园春色| 成人影院中文字幕| 国产一区二区在线观看免费视频| 午夜精品一区二区三区电影天堂 |