精品欧美一区二区三区在线观看 _久久久久国色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小说在线观看| 日本在线xxx| japanese国产| 99亚洲精品| 一本色道久久88综合日韩精品| 天堂中文av在线| 啪啪免费视频一区| 91在线视频免费91| 91精品久久久久久久久久| 国产一级黄色av| 欧洲激情视频| 亚洲国产精品成人精品| 亚洲 激情 在线| а√在线中文网新版地址在线| 中文字幕国产一区| 国产区一区二区| 一区二区三区精| 日韩午夜在线| 色综合色综合网色综合| 日韩毛片无码永久免费看| www国产精品| 欧美日韩国产一级二级| avav在线看| tube8在线hd| 亚洲精品大片www| 台湾成人av| 性xxxx18| 成人免费视频一区| 亚洲最大福利视频| 在线观看av大片| 三级成人在线视频| 欧美一区二三区| 国产无遮挡aaa片爽爽| 天天超碰亚洲| 中文字幕日韩欧美| 国产交换配乱淫视频免费| 国产香蕉精品| 日韩欧美资源站| www.com久久久| 懂色aⅴ精品一区二区三区| 亚洲专区一二三| 无码人妻aⅴ一区二区三区日本| av网页在线| 国产日韩视频一区二区三区| 免费看成人片| 男男电影完整版在线观看| www.亚洲激情.com| 国产一区免费| 内衣办公室在线| 91天堂素人约啪| 麻豆亚洲一区| 九色蝌蚪在线| 国产女同性恋一区二区| 日本午夜精品一区二区| 国产精品久久一区二区三区不卡 | 99国产视频在线| av一区二区三| 成人免费的视频| 激情小说综合区| 天堂网av在线播放| 久久久午夜精品理论片中文字幕| 欧美日韩一区二区三区在线观看免 | 中文字幕影音先锋| 一本到12不卡视频在线dvd| 久久精品电影网站| 看片网站在线观看| 亚洲人成久久| 日本精品久久久久影院| 日本欧美www| 精品一区二区国语对白| 亚洲综合中文字幕68页| 日本黄色一区二区三区| 久久影院视频免费| 亚洲国产精品久久久久久女王| 五月婷婷在线观看| 一区二区激情视频| 国产偷人视频免费| 91九色综合| 欧美一二三四在线| 国产一级黄色录像| 欧美日韩亚洲在线观看| 美乳少妇欧美精品| 日韩久久精品视频| 美腿丝袜亚洲综合| 国产精品18毛片一区二区| 日韩私人影院| 亚洲日本在线天堂| 精品国产免费av| 在线高清欧美| 日韩国产中文字幕| 午夜成人亚洲理伦片在线观看| 欧美日韩视频一区二区三区| 日本aⅴ大伊香蕉精品视频| 91午夜交换视频| 99麻豆久久久国产精品免费优播| 日韩三级电影| 暖暖在线中文免费日本| 日本精品一区二区三区四区的功能| 亚洲36d大奶网| 国产精品国产| 久久精品国产精品亚洲| 五月婷婷中文字幕| 精品一区二区三区在线播放 | 亚洲电影中文字幕在线观看| 九色porny91| 第四色中文综合网| 久久久999国产精品| www.国产毛片| 成人免费毛片aaaaa**| 一区二区三区四区在线视频| 超碰91在线观看| 91精品婷婷国产综合久久| 丰腴饱满的极品熟妇| 激情久久久久久| 91丨九色丨国产在线| 国产私拍精品| 日韩欧美视频一区二区三区| 极品白嫩少妇无套内谢| 久久性感美女视频| 欧美最猛黑人xxxx黑人猛叫黄| 精品国产一级片| 一区二区中文视频| 黄色av免费在线播放| 欧美三级午夜理伦三级小说| 欧美精品国产精品日韩精品| 国产精品无码一区二区桃花视频| 国产色产综合色产在线视频| 成 年 人 黄 色 大 片大 全| 日本超碰一区二区| 久热国产精品视频| 在线观看日韩一区二区| 国产三级精品三级在线专区| 激情网站五月天| 亚洲视频分类| 欧美孕妇孕交黑巨大网站| 欧洲精品久久一区二区| 亚洲一区二区精品3399| 无套内谢丰满少妇中文字幕| 99久久99久久精品国产片果冰| 国产精品精品视频| 噜噜噜在线观看播放视频| 欧美视频免费在线观看| 国产精品久久AV无码| 日韩午夜黄色| 久久久亚洲综合网站| 人狥杂交一区欧美二区| 亚洲国产小视频| 国产乡下妇女做爰视频| av在线不卡网| 欧美网站免费观看| 日韩中出av| 日本中文字幕成人| 国产永久免费高清在线观看| 在线免费观看日本欧美| 蜜桃av乱码一区二区三区| 美女一区二区视频| 2025韩国大尺度电影| 国产精品日本一区二区不卡视频| 日韩视频―中文字幕| 国产精品爽爽久久| 一区二区三区四区中文字幕| 涩视频在线观看| 亚洲三级毛片| 日韩成人在线资源| 91精品网站在线观看| 欧美成人三级视频网站| 日韩中文字幕免费在线观看| 午夜精品福利一区二区三区av| 亚洲精品乱码久久| 丝瓜av网站精品一区二区| 一区二区视频国产| 欧美成年网站| 97香蕉超级碰碰久久免费软件| 无码h黄肉3d动漫在线观看| 色诱亚洲精品久久久久久| 美女av免费看| 国产乱码精品一区二区三区av| 日韩一区二区高清视频| 日韩影视高清在线观看| 国产日产亚洲精品| 女囚岛在线观看| 亚洲视频综合网| 国产乱人乱偷精品视频| 亚洲福利国产精品| 中文字幕免费高清| 国产一区久久久| 免费午夜视频在线观看| 久久久久久久久久久9不雅视频| 国产精品sss| 欧美xxxx网站| 欧美在线视频免费播放| 日本不卡在线| 日韩成人在线观看| 国产精品久久婷婷| 欧美日韩精品二区| 老熟妇高潮一区二区三区| 99精品视频免费在线观看| 超碰在线97免费| 亚洲一级影院| 免费看av软件| 蜜桃精品噜噜噜成人av| 91久久精品国产91久久性色tv | 日本中文字幕在线观看| 亚洲国产精品高清久久久| 在线视频欧美亚洲| 精品欧美aⅴ在线网站| 天天鲁一鲁摸一摸爽一爽| ww亚洲ww在线观看国产| 亚洲熟女乱综合一区二区| 日韩不卡一区二区| 六月婷婷在线视频| 亚洲天堂一区二区三区四区| 日韩成人av网站| 日韩高清一级| 国产91一区二区三区| 日日夜夜亚洲精品| 日韩美女免费视频| 国产欧洲在线| 久久久久久久久久久成人| 日日夜夜精品一区| 国产亚洲福利一区| 亚洲欧美日韩精品永久在线| 精品毛片乱码1区2区3区| 国产精品-色哟哟| 色www精品视频在线观看| 日本最新中文字幕| 亚洲激情欧美激情| 欧美 日韩 国产 一区二区三区| 国产女主播在线一区二区| 成年人免费观看视频网站| av一区二区三区黑人| 无码人妻丰满熟妇区毛片蜜桃精品 | 亚洲四区在线观看| 亚洲黄色网址大全| 国产精品免费aⅴ片在线观看| a天堂中文字幕| 国产午夜亚洲精品羞羞网站| 色无极影院亚洲| 91在线观看一区二区| 800av在线播放| 成人国产精品免费观看| 日本一区二区在线观看视频| 粉嫩嫩av羞羞动漫久久久| 超碰caoprom| 成人激情小说乱人伦| 中文字幕三级电影| 91尤物视频在线观看| chinese麻豆新拍video| 97精品电影院| 黄色a一级视频| 久久精品夜色噜噜亚洲a∨| 无码人妻精品一区二区中文| 国产欧美日韩另类一区| 国产欧美小视频| 综合久久国产九一剧情麻豆| 侵犯稚嫩小箩莉h文系列小说| 亚洲精品乱码久久久久| 国产黄在线免费观看| 亚洲夂夂婷婷色拍ww47| 国产乡下妇女做爰| 欧美性猛交xxxx富婆弯腰| 久久精品国产亚洲av麻豆蜜芽| 欧美性受xxxx| 国产丝袜在线视频| 亚洲第一免费网站| 欧美高清电影在线| 色噜噜狠狠狠综合曰曰曰88av| 免费在线看黄网站| 久久久久久久国产精品视频| 欧美亚洲日本精品| 国产精品中文字幕在线| 警花av一区二区三区| 精品欧美一区二区在线观看视频 | 日本精品入口免费视频| 欧美日韩免费不卡视频一区二区三区| 99久久久无码国产精品免费| 亚洲精品一区二区三区99| 亚洲欧洲精品视频| 色综合伊人色综合网| 七七久久电影网| 国产成人欧美在线观看| 99tv成人影院| 久久国产精品免费一区| re久久精品视频| 999一区二区三区| 日韩高清一级片| 中文字幕 欧美 日韩| 久久亚洲免费视频| 特一级黄色录像| 91成人国产精品| 亚洲经典一区二区三区| 在线精品视频视频中文字幕| 美女精品视频| 成人有码视频在线播放| 亚洲区小说区图片区qvod| 中国老女人av| 老司机精品福利视频| 国产乱国产乱老熟300部视频| 久久久久久久久免费| 九九九在线视频| 欧美在线色视频| 日韩一级在线播放| 久久视频免费观看| 亚洲第一二三四区| 国产在线一区二| 91精品秘密在线观看| 97公开免费视频| 99久久久久免费精品国产 | 国产裸舞福利在线视频合集| 欧美成人在线影院| 欧美日韩卡一| 秋霞在线观看一区二区三区| 国模 一区 二区 三区| 亚洲欧美日韩一二三区| 国产视频亚洲色图| 久久一区二区三区视频| 精品乱人伦小说| a级影片在线| 成人网在线免费观看| 凹凸成人精品亚洲精品密奴| a√天堂在线观看| 成人av电影在线播放| 深夜福利影院在线观看| 91精品国产色综合久久不卡电影| 第九色区av在线| 国产成人亚洲综合青青| 天堂在线精品| 国产午夜福利视频在线观看| 成人国产在线观看| 劲爆欧美第一页| 欧美一区二区视频在线观看2020 | 午夜影院免费视频| 午夜精品视频网站| 国产精品视屏| 亚洲不卡中文字幕无码| 成人av资源站| 一级片免费网址| 亚洲国产精品字幕| а√天堂中文资源在线bt| 极品尤物一区二区三区| 亚洲国产mv| 亚洲蜜桃精久久久久久久久久久久| 亚洲一区二区在线播放相泽| 丁香六月天婷婷| 久久久欧美精品| 欧美变态网站| 国产成人久久777777| 欧美国产1区2区| 国产一区二区三区黄片| 波霸ol色综合久久| 国产一区二区三区视频在线| 热久久最新地址| 粉嫩久久99精品久久久久久夜| 国产精品成人久久| 日韩的一区二区| 成人开心激情| 中文字幕精品一区日韩| 激情综合色丁香一区二区| 欧美被狂躁喷白浆精品| 亚洲成年人影院在线| 精品三级久久| 日韩午夜视频在线观看| 精品亚洲国内自在自线福利| 精品97人妻无码中文永久在线 | 五月天婷婷在线视频| 亚洲专区在线视频| 亚洲精品资源| 中文字幕免费在线看线人动作大片| 欧美无砖砖区免费| 呦呦在线视频| 蜜桃传媒视频麻豆一区| 日本美女视频一区二区| 欧美成欧美va| 亚洲女人天堂视频| 国产精品高潮久久| 国产91在线亚洲| 久久综合色鬼综合色| 国产一区二区小视频| 久久久久久久久久国产精品| 少妇精品久久久| 亚洲精品成人在线播放| 亚洲成av人影院| 91在线视频| 好看的日韩精品| 精品一区二区免费| 日韩三级小视频| 色妞欧美日韩在线| 国产精品jk白丝蜜臀av小说 | 国产ts人妖一区二区| 五月天婷婷导航| 欧美丰满少妇xxxxx做受| 精品在线观看入口| 国产精久久久久| 欧美性色aⅴ视频一区日韩精品| 影院在线观看全集免费观看| 欧美污视频久久久| 国产风韵犹存在线视精品| 久久人人爽人人爽人人片av免费| 九九热精品在线| 97精品国产一区二区三区|