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

解讀 MySQL Explain 關鍵字:優化查詢執行計劃的實用指南

數據庫 MySQL 開發
本文將深入探討 MySQL 中的 EXPLAIN 關鍵字,探究其背后的工作原理和輸出信息含義。

在MySQL數據庫中,優化查詢性能是每個開發人員和數據庫管理員都需要面對的重要挑戰之一。其中,EXPLAIN關鍵字是一個強大的工具,可以幫助我們深入了解MySQL是如何執行查詢的,以及如何優化查詢性能。

本文將深入探討MySQL中的EXPLAIN關鍵字,探究其背后的工作原理和輸出信息含義。通過本文的闡述,您將了解如何解讀EXPLAIN的輸出結果,優化查詢執行計劃,提升數據庫性能,以及避免常見的查詢性能陷阱。

無論您是初學者還是有經驗的數據庫專家,本文都將為您提供有價值的見解和實用的技巧,助您在MySQL數據庫中更好地利用EXPLAIN關鍵字,優化查詢性能,提升數據庫應用的效率和穩定性。

詳解explain對應關鍵字

通過explain關鍵字可以獲取我們給定查詢SQL經由成本和規則優化后的執行計劃,通過這個計劃我們可以得到查詢語句實際的工作步驟,這里我們就針對這關鍵字得出的執行計劃的每一列都進行介紹。

為了更直觀的演示explain各個關鍵字段的信息,我們這里不妨通過兩張表針對每一種訪問方式進行講解,對應數據表的DDL如下所示,可以看到筆者基于MySQL8.0創建了一張s1表,其中:

  • id作為主鍵。
  • key1作為普通索引。
  • key2是唯一索引。
  • key_part1+key_part2+key_part3構成唯一索引。

s2與s1結構一致,這里就不多做介紹,對應DDL語句如下所示:

CREATE TABLE s1
(
    id           INT NOT NULL AUTO_INCREMENT,
    key1         VARCHAR(100),
    key2         INT,
    key3         VARCHAR(100),
    key_part1    VARCHAR(100),
    key_part2    VARCHAR(100),
    key_part3    VARCHAR(100),
    common_field VARCHAR(100),
    PRIMARY KEY (id),
    KEY          idx_key1 (key1),
    UNIQUE KEY idx_key2 (key2),
    KEY          idx_key3 (key3),
    KEY          idx_key_part(key_part1,key_part2,key_part3)
) Engine = InnoDB CHARSET = utf8;

注意,筆者一直強調MySQL的版本為8.0,所以后續的執行計劃都是基于MySQL8.0版本展開探討的,讀者在基于筆者文章進行實踐是需要注意保持版本一致性。

1. id字段(執行計劃唯一標識)

針對每一個select語句都會為其分配一個id字段,該id就代表的每一個select語句的執行計劃信息。

我們先說個簡單的例子,針對下面這句單表執行的語句,它就只有一行數據,所以就只有一個id為1的執行計劃:

explain select * FROM  s1 WHERE s1.common_field =1;

我們再來一個union合并查詢:

explain select * FROM  s1 union select * from s2;

從執行計劃可以看到s1的id為1,s2的id為2,分別進行了一個select查詢:

需要注意的是連接查詢的驅動表和被驅動表的id都是一樣的,出現在前面的是驅動表,而后面的就是被驅動表:

explain select * from s1 inner join s2 on s1.id =s2.id ;

從執行計劃就可以看出,s1就是驅動表,s2就是被驅動表:

我們再來一個特殊的SQL,這句原本是子查詢,正常情況下應該是s1表的id為1,s2表的id為2:

explain select * FROM s1  where key1 in (select key3 from s2 );

但是SQL優化器經過分析發現這句可以被優化為連接查詢,即下面這句SQL:

explain select * from s1 inner join s2 on s1.key1 =s2.key3 ;

所以執行計劃就顯示id是一樣的,且s1作為驅動表,s2作為被驅動表:

2. table字段(執行計劃針對的數據表)

table字段含義比較簡單,它表示當前查詢計劃所針對的數據表,例如下面這個簡單查詢語句:

explain select * FROM  s1 WHERE s1.common_field =1;

它所查詢的就是針對s1表:

而下面這句涉及連接查詢,所以從執行計劃中也能看出不同執行計劃所針對的表:

explain select * from s1 inner join s2;

可以看到驅動表s1進行全表掃描,而被驅動表s2是通過hash join進行連接查詢:

3. select_type(SQL語句查詢類型)

select_type決定了你的SQL涉及的查詢類型,常見的有:

(1) SIMPLE:簡單查詢,如下所示,可以看到簡單的SQL語句就屬于這種查詢類型

explain select * from s1

對應的執行計劃如下所示:

(2) PRIMARY:涉及關聯或者子查詢的語句對應左邊的語句就是PRIMARY,如下SQL所示,可以看到對應的u表的查詢就可以作為PRIMARY語句:

explain select * FROM  s1 union select * from s2;

我們查看執行計劃的截圖,可以看到涉及這種嵌套查詢的SQL左邊的SQL就是PRIMARY:

(3) UNION:從執行計劃的截圖就可以看出union關鍵字后面的SQL就屬于union

explain select * FROM  s1 union select * from s2;

對應執行計劃如下圖所示:

(4) UNION RESULT:包含union的處理結果集,在union和union all語句中,基于其它查詢結果進行合并(可能有去重的過程),需要通過一個臨時表才能完成的操作就是UNION RESULT也就是我們上述那句SQL的第三步。

(5) DEPENDENT SUBQUERY:如下SQL所示,在SQL優化器明確指明子查詢無法轉為半連接查詢的情況下,第一個select的子查詢對應的select type就是DEPENDENT SUBQUERY:

explain select * from s1 where s1.common_field in (SELECT id from s2 WHERE s1.common_field=s2.common_field) or key3='a';

對應的執行計劃如下所示,可以看到s2的執行類型就是DEPENDENT SUBQUERY:

(6) DEPENDENT UNION:如下SQL所示,在涉及union的子查詢中有無數個小查詢,除去union的左邊哪個小查詢,其余的都是DEPENDENT UNION

explain select * from s1 WHERE key1 IN (SELECT key1 from s1 union SELECT key1 from s2)

這一點,從執行計劃中就可以看出,子查詢內部的s2查詢的類型就是DEPENDENT UNION

(7) DERIVED:在FROM列表中包含的子查詢被標記為DERIVED(衍生);MySQL會遞歸執行這些子查詢, 把結果放在臨時表里:

explain SELECT * from (select COUNT(*)  from student as a) b

對應的我們可以在執行計劃中印證這一點:

4. type字段(重點,SQL查詢訪問方法)

type決定了進行SQL查詢的時的訪問方法,該字段對于SQL執行性能分析有著至關重要的參考價值:

(1) system:表中只有一行或者空表,即存儲引擎中統計的數據是正確的。

(2) const:基于聚簇索引或者非空的唯一二級索進行定位數據,時間復雜度為O(1),這種高速的常量級查詢我們就可以稱為const

explain select * FROM  s1 WHERE id=1;

對應執行計劃如下:

(3) eq_ref:該查詢意味著進行關聯查詢時,被驅動表內部走了聚簇索引或者非空的二級索引查詢

explain SELECT * FROM s1 inner join  s2 on s1.id=s2.id;

(4) ref:通過那些非唯一的二級索引進行精準定位,這種在二級索引區間構成一個掃描區間進行定位,然后再通過回表獲取所有數據的執行就是ref

explain select * from s1 WHERE  key1='a';

對應的執行計劃截圖如下圖所示:

(5) fulltext:全文匹配,大字符索引匹配。

(6) ref_or_null:基于普通二級索引查詢且查詢時還需要查詢可能為空的情況:

explain select * from s1 WHERE  key1='a' or key1 is NULL ;

(7) unique_subquery:即子查詢被優化為exist,且子查詢返回的是聚簇索引:

explain select * from s1 where s1.common_field in (SELECT id from s2 WHERE s1.common_field=s2.common_field) or key3='a';

(8) index_subquery:和上述查詢類似,只不過子查詢內部返回的是普通二級索引:

  • range:范圍查詢
  • index_merge:索引合并,即進行SQL查詢時對應的條件都是索引類型,SQL優化器進行查詢時讓兩個索引分別到自己的二級索引樹拿到有序的id集合然后取交集得到聚簇索引值進行回表

對應的SQL如下,可以看到我們查詢條件都走了索引,查詢結果是基于多個索引的掃描區間共同構成的聚簇索引,然后取并集進行回表:

EXPLAIN select * FROM s1 WHERE KEY1='a' or key3='b'

這一點我們可以通過查詢執行計劃印證:

(9) index:進行SQL查詢時,基于二級索引全掃描但無需回表的訪問方法就是index,這里我們給出一個比較特殊的例子,可以看到這條SQL查詢條件是key_part2(即聯合索引由key_part1、key_part2、key_part3構成的聯合索引),雖然不符合最左匹配原則,但是在MySQL8.0版所提供的Index Skip Scan即索引跳躍這一特性的支持下,這條SQL的執行計劃也是顯示走index的:

explain select s1.key_part1,s1.key_part2,s1.key_part3 from s1 WHERE  key_part2='a';

對應執行計劃如下圖所示:

這里我們也簡單補充一下索引跳越的工作機制,以我們上述的SQL為例,其底層本質工作過程為:

  • 基于聯合索引獲取所有key_part1的值X、Y、Z。
  • 基于前導結果構建出類似于where (key_part1=X and key_part2='a') or (key_part1=Y and key_part2='a') or (key_part1=Z and key_part2='a') 的查詢SQL利用最左匹配原則走聯合索引進行結果查詢并合并:

(10) ALL:全表掃描,這種方式就不做強調了,當查詢語句沒有用到索引亦或者MySQL優化器認為索引無法有效、高效過濾數據時,就會執行全表掃描,該方式執行流程也非常簡單,它會直接掃描數據所有數據頁的數據加載到內存結合我們給定的條件進行過濾聚合,從而得出需要的結果。

對應的我們也給出全表掃描對應的SQL示例,即查詢時使用沒有創建索引的字段common_field:

explain SELECT * FROM s1 WHERE common_field='1';

對應的執行計劃如下所示:

5. extra(SQL語句額外信息)

這個字段也很重要,它表示當前SQL語句的一些額外的信息:

  • Using filesort:即代表SQL查詢時用到了文件掃描,使用了外部的索引進行排序,并沒有用到我們自己定義的索引,性能較差。
  • using index:這種方式性能就不錯了,使用了索引并且不需要回表就得到了我們需要的數據,即用到了索引覆蓋。
  • Using temporary:MySQL查詢排序時使用了臨時表性能較于filesort更差。
  • using where:即代表查詢時僅僅用到了普通的where條件,并沒有用到任何索引,查詢需要在server層進行判斷。
  • Using join buffer:在進行連接查詢時,被驅動表的數據定位并沒有走索引,于是將驅動表的數據放入緩沖區進行關聯匹配。
  • impossible where:說明where條件基本得不到需要的結果,篩選數據時一直處于false的狀態。

6. possible_keys(可能用到的索引信息)

表示當前查詢可能用到的索引。如下這個執行計劃,它就以為著可能用到了主鍵

7. key(用到的索引名稱)

表示用到的索引名稱,如下所示下面這條sql可能就用到了這兩個索引。

8. key_len(使用索引時,對應的索引長度)

key_len表示使用索引時,對應使用到的索引的長度,在MySQL的EXPLAIN語句中,key_len列表示使用索引的鍵部分的字節數。它是一個估計值,根據查詢中使用的索引類型和數據類型來計算。通常,key_len越小,性能就越好,因為它意味著需要讀取更少的數據塊。 例如,如果你有一個使用VARCHAR(100)數據類型的列作為索引,并且查詢中只使用了前10個字符作為搜索條件,則key_len將是10。如果你使用的是INT(10)數據類型的列作為索引,則key_len將是4,因為INT類型占用4個字節。 在優化查詢時,理解key_len可以幫助你確定哪些索引可以更有效地支持查詢,以及如何進一步優化索引設計。

例如下面這一句,實際上索引長度就是303,原因很簡單:

  • key1為varchar(100)且用的是utf8,所以長度為300字節。
  • 允許空再加一個字節。
  • varchar需要2字節維護長度進行再加2字節。 最終得到303字節:
explain select * from s1 WHERE key1>'a' and key1<'b';

9. ref(與索引匹配時,比對條件的類型)

表示進行索引匹配時,與之比對的數據類型,例如下面這句key1比對的是一個函數計算值,所以ref是func:

explain select * FROM s1 inner join s2 on s2.key1 =UPPER(s1.key1);

例如這句與索引匹配的是常數,所以得到的是const:

explain select * from s1 WHERE  key1='a';

當然進行關聯查詢時被驅動表得到的就是驅動表的id,如下返回的就是s1.id:

explain SELECT * FROM s1 inner join  s2 on s1.id=s2.id;

10. rows(數據掃描體量評估)

rows意味著我們查詢時大體需要掃描多少行,對于單表查詢沒什么,但是對于多表查詢,從這個數據我們可以得知關聯查詢哪個作為驅動表:

explain SELECT * FROM customer c inner join customer_balances cb on c.id =cb.c_id ;

因為cb的rows為1,可知這張表變為被驅動表走索引定位:

id|select_type|table|partitions|type|possible_keys             |key                       |key_len|ref    |rows   |filtered|Extra|
--+-----------+-----+----------+----+--------------------------+--------------------------+-------+-------+-------+--------+-----+
 1|SIMPLE     |c    |          |ALL |PRIMARY                   |                          |       |       |4270364|   100.0|     |
 1|SIMPLE     |cb   |          |ref |customer_balances_c_id_IDX|customer_balances_c_id_IDX|8      |db.c.id|      1|   100.0|     |

11. filter(讀取和過濾占比)

表示選取的行和讀取的行占比,例如下面這句SQL:

explain select * from  s1 WHERE key1 > '1' and s1.common_field ='1';

從筆者執行計劃來看,可能會掃描49902,只有大約10%的符合要求:

該查詢在單表查詢中沒有太大意義,但是在連接查詢中就比較有參考價值了,例如下面這句SQL:

explain
 select
 *
from
 s1
inner join s2 on
 s1.key1 = s2.key1
WHERE
 s1.common_field = 'a'

從執行計劃可以看出s1作為驅動表大約掃描99805列數據,有10%符合要求,而被驅動表s2過濾值為1和100%比例,這意味著針對被驅動表的查詢次數可能是99805*0.1大約9980次。

小結

通過本文的探索,我們深入了解了MySQL中的EXPLAIN關鍵字的重要性和作用。EXPLAIN不僅可以幫助我們分析查詢執行計劃,還可以為我們提供優化查詢性能的關鍵線索。

通過解讀EXPLAIN的輸出結果,我們學會了如何識別潛在的性能瓶頸,并優化查詢以提高數據庫的效率和響應速度。了解索引的使用、表連接順序以及訪問類型等信息,能夠幫助我們更好地優化查詢并避免常見的查詢性能問題。

在實際應用中,不斷深入學習和理解EXPLAIN的輸出結果,結合實際場景進行優化實踐,將為我們的數據庫應用帶來明顯的性能改善和優勢。通過不斷優化查詢性能,我們可以提升數據庫系統的整體效率,提供更好的用戶體驗和服務質量。

在今后的數據庫開發和維護工作中,讓我們繼續積極運用EXPLAIN關鍵字,不斷優化查詢執行計劃,提升數據庫性能,為應用程序的穩定性和可靠性打下堅實的基礎。

責任編輯:趙寧寧 來源: 寫代碼的SharkChili
相關推薦

2025-01-24 14:57:24

2023-09-21 10:55:51

MysqlSQL語句

2024-09-12 15:16:14

2023-03-30 08:28:57

explain關鍵字MySQL

2022-02-15 07:36:21

SQLEXPLAIN數據庫

2021-03-17 09:35:51

MySQL數據庫explain

2020-08-26 14:40:38

explainMySQL數據庫

2021-02-20 08:40:19

HiveExplain底層

2025-01-09 10:30:40

2021-11-09 07:59:50

開發

2020-05-21 10:02:51

Explain SQL優化

2021-01-04 15:42:37

SQL索引Explain

2023-11-10 09:29:30

MySQLExplain

2021-05-28 10:46:36

MySQL執行計劃

2020-09-15 08:44:57

MySQL慢日志SQL

2022-08-08 08:03:44

MySQL數據庫CBO

2011-08-18 09:19:19

SQL Server的SQL查詢優化

2011-09-14 17:03:17

數據庫執行計劃解析

2019-10-11 16:48:53

BingGoogle搜索引擎

2010-02-02 14:27:54

C++ static關
點贊
收藏

51CTO技術棧公眾號

一区二区三区高清| 亚洲精品2区| 色狠狠一区二区三区香蕉| 美女主播视频一区| 亚洲一区二区影视| 国产韩日影视精品| 精品99999| 久久久久国产精品熟女影院| 免费超碰在线| proumb性欧美在线观看| 国产精品一久久香蕉国产线看观看| 羞羞视频在线观看欧美| 香蕉久久夜色精品国产| 这里只有精品视频在线| 亚洲区 欧美区| 亚洲三级欧美| 亚洲视频你懂的| 久久国产精品一区二区三区四区| 亚洲系列在线观看| 亚洲精品色图| 久久综合九色九九| 精品人妻一区二区三区蜜桃视频| 综合久久成人| 欧美日韩你懂的| 国产资源在线视频| 在线播放免费av| 国产人成亚洲第一网站在线播放 | 国产在线乱码一区二区三区| 亚洲2020天天堂在线观看| 三级全黄做爰视频| 亚洲资源网你懂的| 亚洲第一色中文字幕| 三级一区二区三区| 黄色精品视频| 日韩欧美在线一区| 久在线观看视频| 欧美6一10sex性hd| 亚洲男人的天堂在线aⅴ视频| 深田咏美在线x99av| 午夜av免费观看| 国产在线不卡一区| 成人xxxxx| 毛片在线免费播放| 首页亚洲欧美制服丝腿| 97精品免费视频| 国产在线观看你懂的| 欧美国产综合| 九九热r在线视频精品| 日本激情视频一区二区三区| 久久成人综合| 日韩综合中文字幕| 熟女av一区二区| 91精品99| 欧美日本啪啪无遮挡网站| 国产男女猛烈无遮挡在线喷水| 久久在线播放| www国产精品视频| 欧美风情第一页| 精品理论电影在线| 中文欧美日本在线资源| 成人一级片免费看| 我不卡伦不卡影院| 免费91在线视频| 精品一区二区三区人妻| 亚洲精品偷拍| 欧美做受高潮1| 狠狠人妻久久久久久综合| 久久黄色影院| 国产精品私拍pans大尺度在线| 一本色道久久综合熟妇| 国产精品一区二区三区四区| 99久久久精品免费观看国产| 丁香六月色婷婷| 91丨九色丨尤物| 日韩激情视频| 国产原创精品视频| 亚洲国产视频在线| 丁香啪啪综合成人亚洲| 国产精品.xx视频.xxtv| 欧美一卡二卡在线观看| 国产视频精品视频| 久久99高清| 日韩视频―中文字幕| 唐朝av高清盛宴| 亚洲一区国产| 国产精品自拍偷拍| 国产三级第一页| 97久久久精品综合88久久| 日韩精品一区二区三区丰满| 在线中文字幕第一页| 欧美日韩国产精品一区| 亚洲欧美日韩综合网| 北条麻妃一区二区三区在线观看 | 成人动漫在线播放| 亚洲欧美日韩电影| av天堂永久资源网| 激情不卡一区二区三区视频在线| 亚洲精品xxxx| 久久国产高清视频| 性色一区二区三区| 亚洲一区美女视频在线观看免费| av女名字大全列表| 综合久久国产九一剧情麻豆| 日本免费黄视频| 综合欧美精品| 亚洲欧美日韩精品久久亚洲区 | 成人信息集中地| 亚洲高清不卡| 91精品视频专区| 撸视在线观看免费视频| 一区二区三区四区精品在线视频| 少妇性l交大片| 国产伦精品一区二区三区在线播放| 尤物九九久久国产精品的分类 | 欧美日韩国产系列| 亚洲一区二区三区四区五区六区| 亚洲最新色图| 国产精品一区久久| 欧美日韩视频精品二区| 亚洲综合丝袜美腿| 最新av免费在线观看| 国产免费久久| 2018日韩中文字幕| www国产在线| 国产精品电影院| 国产成人精品视频ⅴa片软件竹菊| 久本草在线中文字幕亚洲| 欧美成人精品一区二区三区| 在线观看av大片| 国产性天天综合网| 国产乱子伦农村叉叉叉| 成人自拍在线| 欧美国产视频一区二区| 一区二区久久精品66国产精品| 久久久国产一区二区三区四区小说| 丝袜人妻一区二区三区| 草莓视频一区二区三区| 欧美成人自拍视频| 99精品久久久久久中文字幕 | 日本在线免费观看| 国产suv精品一区二区6| 国产成人三级视频| 国产成人免费av一区二区午夜| 中文字幕视频在线免费欧美日韩综合在线看 | www.久久av.com| 日韩欧美一区免费| 国产精品欧美日韩久久| 成人在线二区| 欧美精品日韩一区| 亚洲区一区二区三| 激情小说亚洲一区| 日本一区二区免费高清视频| 国产精品成人3p一区二区三区| 精品国产一区二区三区久久| 国产精品久久久久久久免费看| 日韩一区有码在线| 手机精品视频在线| 欧美啪啪一区| 国产日韩精品久久| 欧美成人a交片免费看| 国产亚洲精品va在线观看| 中文字幕av片| 亚洲天堂av老司机| 国产无套精品一区二区三区| 亚洲高清资源| 免费影院在线观看一区| 免费污视频在线一区| 色婷婷综合成人| www.欧美国产| 五月天中文字幕一区二区| a级在线观看视频| 秋霞电影一区二区| 国产成人精品免费看在线播放 | 欧美乱偷一区二区三区在线| 九九九伊在线综合永久| 精品国产视频在线| 色香蕉在线视频| 欧美三区在线观看| 激情综合网五月天| 久久亚洲影视婷婷| 91女神在线观看| 亚洲午夜在线| 日本不卡久久| 日本少妇精品亚洲第一区| 97久久精品国产| 69久久精品| 欧美刺激午夜性久久久久久久| 99热只有这里有精品| 国产精品嫩草久久久久| 韩国黄色一级片| 日韩成人精品在线| 欧美精品在欧美一区二区| 九色成人国产蝌蚪91| 91久久久久久久久久久| www.九色在线| 精品国产一区二区三区久久久| 无码精品黑人一区二区三区 | 黑人精品一区二区三区| 在线观看日韩一区| 国产 日韩 欧美 成人| 国产精品视频你懂的| 国产伦精品一区二区免费| 蜜臀av一区二区| 缅甸午夜性猛交xxxx| 国产精品久久久久久影院8一贰佰| 国产精品一区而去| 91九色成人| 日韩av手机在线看| missav|免费高清av在线看| 日韩中文字幕久久| 久青草国产在线| 欧美精品一区二区三区高清aⅴ | 蜜桃传媒一区二区三区| 国产大片一区| 欧美精品尤物在线| 国产精品一区二区三区美女| 成人网在线视频| 69堂免费精品视频在线播放| 97婷婷涩涩精品一区| 伊人在我在线看导航| www.亚洲成人| 99se视频在线观看| 亚洲人成在线免费观看| 日韩有码第一页| 精品捆绑美女sm三区| 97免费观看视频| 欧美视频日韩视频在线观看| aaa人片在线| 亚洲电影第三页| 欧美日韩免费一区二区| 亚洲欧洲性图库| 日日操免费视频| 精品国产乱子伦一区二区| 在线播放视频一区| 中文字幕xxxx| 日韩欧美中文第一页| www成人在线| 欧美日韩激情小视频| 亚洲国产精品午夜在线观看| 一区二区三区欧美| 唐朝av高清盛宴| 亚洲综合色视频| 国产亚洲精品成人| 亚洲高清免费在线| 国产精品白浆一区二小说| 一区二区免费在线播放| 久久一二三四区| 亚洲高清在线精品| 日韩精品视频免费播放| 午夜精品福利一区二区蜜股av | 91中文字幕永久在线| 91在线你懂得| 人妻无码一区二区三区| 久久久久久夜精品精品免费| www.av天天| 国产精品入口麻豆原神| 中文字幕精品亚洲| 综合色中文字幕| 久久精品一级片| 精品成人在线视频| 男人天堂2024| 欧美日韩一区在线| av天堂一区二区三区| 亚洲电影在线观看| 日本黄在线观看| 中文字幕日韩视频| 一色桃子av在线| 538国产精品一区二区在线| 欧美舌奴丨vk视频| 国产精品一二三视频| 日本在线成人| 久久精品国产一区二区三区不卡| 深爱激情综合网| 中文字幕一区二区三区最新| 亚洲视频观看| 日av中文字幕| 韩国视频一区二区| 中文字幕三级电影| 国产欧美日韩另类一区| jizz亚洲少妇| 欧美日韩在线一区| 亚洲天堂网视频| 精品国产一区二区三区久久久蜜月 | 亚洲一级视频在线观看| 日韩欧美一区二区久久婷婷| 深夜福利在线看| 日韩中文字幕网| av不卡高清| 国产欧美在线观看| 精品无人区一区二区| 亚洲精品第一区二区三区| 国精品一区二区| 高清一区二区视频| 成人黄色国产精品网站大全在线免费观看| 偷拍女澡堂一区二区三区| 亚洲欧美激情小说另类| 久久青青草原亚洲av无码麻豆 | 国产精品免费久久久久久| 9l视频自拍蝌蚪9l视频成人| 日韩三级在线播放| 亚洲国产日韩在线| 红桃视频 国产| 久久婷婷综合激情| 国产精品99精品无码视| 欧美三电影在线| 天堂成人在线| 欧美精品激情在线观看| 久久精品 人人爱| 久久99精品国产99久久| 欧美91福利在线观看| 在线观看的毛片| 91视频你懂的| 国产在线观看成人| 欧美一区二区三区视频在线 | 一区二区美女| 黄色三级中文字幕| 精品一区二区三区久久| 欧美黄色一级生活片| 精品国产老师黑色丝袜高跟鞋| 国产精品国产三级国产普通话对白| 亚洲欧美色婷婷| 理论片午夜视频在线观看| 产国精品偷在线| 亚洲欧美日韩高清在线| 欧美激情第3页| 中文字幕成人av| 精品国产乱子伦| 亚洲伦理中文字幕| 久热在线观看视频| 精品无人区一区二区三区| 国产一区清纯| 国产精品99精品无码视亚| 成人欧美一区二区三区白人| 中文字幕视频一区二区| aaa在线播放视频| 成人在线小视频| 久久精品高清| 污污的视频免费| 亚洲天堂av一区| 99久久国产热无码精品免费| 精品国内亚洲在观看18黄| 国产精品伊人| 夜夜爽99久久国产综合精品女不卡| 日本亚洲三级在线| 欧美激情视频二区| 欧美视频三区在线播放| 91精彩在线视频| 成人精品福利视频| 亚洲成人精品| 性高潮久久久久久| 一区二区三区四区视频精品免费 | 久久免费视频网站| 国产精品2023| 欧美一级在线看| 国产色婷婷亚洲99精品小说| 天天天天天天天干| 日韩中文字幕不卡视频| 视频精品一区| 亚洲中文字幕无码av永久| 99精品久久只有精品| 久久青青草原亚洲av无码麻豆| 国产午夜精品一区二区三区 | 69成人精品免费视频| 亚洲羞羞网站| 精品久久久久久综合日本| 免费日韩av| 网站永久看片免费| 日韩午夜激情视频| 黄在线观看免费网站ktv| 日韩成人av网站| 国产综合色视频| 日韩精品久久久久久久| 国产一区二区动漫| 美女日韩一区| 97国产精东麻豆人妻电影 | 欧美精品videos极品| 亚洲国产精品福利| 国产成人精品123区免费视频| 一区二区精品免费视频| 粉嫩av一区二区三区粉嫩| 久久久久久91亚洲精品中文字幕| 中文国产亚洲喷潮| 亚洲亚洲一区二区三区| 国产亚洲综合视频| 最近日韩中文字幕| 日韩午夜影院| 亚洲一区二区久久久久久久| 亚洲欧美卡通另类91av| 99热6这里只有精品| 亚洲精品国产免费| 日韩黄色碟片| 欧美牲交a欧美牲交| 亚洲天天做日日做天天谢日日欢| 亚洲三级黄色片| 92国产精品视频| 久久婷婷亚洲| 久久久久久av无码免费网站| 一本色道久久88亚洲综合88| caoporn成人| 爱豆国产剧免费观看大全剧苏畅 |