午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > MySql子查詢IN的執行和優化的實現

MySql子查詢IN的執行和優化的實現

熱門標簽:智能外呼系統復位 拉卡拉外呼系統 大眾點評星級酒店地圖標注 云南電商智能外呼系統價格 話務外呼系統怎么樣 高清地圖標注道路 400電話可以辦理嗎 外東北地圖標注 臨清電話機器人

IN為什么慢?

在應用程序中使用子查詢后,SQL語句的查詢性能變得非常糟糕。例如:

SELECT driver_id FROM driver where driver_id in (SELECT driver_id FROM driver where _create_date > '2016-07-25 00:00:00');

獨立子查詢返回了符合條件的driver_id,這個問題是解決了,但是所用的時間需要6秒,可以通過EXPLAIN查看SQL語句的執行計劃:

可以看到上面的SQL語句變成了相關子查詢,通過EXPLAIN EXTENDED 和 SHOW WARNINGS命令,可以看到如下結果:

復制代碼 代碼如下:
select `northwind`.`driver`.`driver_id` AS `driver_id` from `northwind`.`driver` where in_optimizer>(`northwind`.`driver`.`driver_id`,exists>(select 1 from `northwind`.`driver` where ((`northwind`.`driver`.`_create_date` > '2016-07-25 00:00:00') and (cache>(`northwind`.`driver`.`driver_id`) = `northwind`.`driver`.`driver_id`))))

可以看出MySql優化器直接把IN子句轉換成了EXISTS的相關子查詢。下面這條相關IN子查詢:

SELECT driver_id FROM driver where driver_id in (SELECT driver_id FROM user where user.uid = driver.driver_id);

查看SQL語句的執行計劃:

就是相關子查詢,通過EXPLAIN EXTENDED 和 SHOW WARNINGS命令,看到如下結果:

復制代碼 代碼如下:
select `northwind`.`driver`.`driver_id` AS `driver_id` from `northwind`.`driver` where in_optimizer>(`northwind`.`driver`.`driver_id`,exists>(select 1 from `northwind`.`user` where ((`northwind`.`user`.`uid` = `northwind`.`driver`.`driver_id`) and (cache>(`northwind`.`driver`.`driver_id`) = `northwind`.`driver`.`driver_id`))))

可以看出無論是獨立子查詢還是相關子查詢,MySql 5.5之前的優化器都是將IN轉換成EXISTS語句。如果子查詢和外部查詢分別返回M和N行,那么該子查詢被掃描為O(N+N*M),而不是O(N+M)。這也就是為什么IN慢的原因。

IN和EXISTS哪個快?

網上百度到很多認為IN和EXISTS效率一樣是錯誤的文章。

如果查詢的兩個表大小相當,那么用in和exists差別不大。
如果兩個表中一個較小,一個是大表,則子查詢表大的用exists,子查詢表小的用in:
例如:表A(小表),表B(大表)
1:
select * from A where cc in (select cc from B) 效率低,用到了A表上cc列的索引;
select * from A where exists(select cc from B where cc=A.cc) 效率高,用到了B表上cc列的索引。

相反的

2:
select * from B where cc in (select cc from A) 效率高,用到了B表上cc列的索引;
select * from B where exists(select cc from A where cc=B.cc) 效率低,用到了A表上cc列的索引。

總結上面的描述,個人認為其主要的原因在于對索引的使用。任何情況下,只要是大表的索引被使用,就可以使效率提高。

但是在編輯本文的時候,多次測試,卻沒能得到上面所總結的結果。下面是測試SQL語句,先是外表為大表,內表為小表。(示例一)

SELECT count(driver_id) FROM driver where driver_id in (SELECT uid FROM user);
SELECT count(driver_id) FROM driver where exists (SELECT 1 FROM user where uid = driver.driver_id);

執行結果是:

再是外表是小表,內表是大表。(示例二)

select count(uid) from user where uid in (SELECT driver_id FROM driver);
select count(uid) from user where exists (SELECT 1 FROM driver where driver.driver_id = user.uid);

執行結果是:

可以發現IN和EXISTS的執行效率,在任何情況下都正好是相同的。基于此,我們繼續查看示例一兩條SQL語句的執行計劃,如下:

可以看到IN和EXISTS的執行計劃是一樣的,對此得出的結論兩者的執行效率應該是一樣的。

《MySql技術內幕:SQL編程》:書中描述的確實有很多DBA認為EXISTS比IN的執行效率更高,可能是當時優化器還不是很穩定和足夠優秀,但是目前絕大數的情況下,IN和EXISTS都具有相同的執行計劃。

如何提高效率?

上面示例二中的SQL語句執行時間約8秒,因為存在M*N的原因造成慢查詢,但是還是可以進行優化,注意到慢的原因就是內部每次與外部比較時,都需要遍歷一次表操作,可以采用另外一個方法,在嵌套一層子查詢,避免多次遍歷操作,語句如下:

SELECT count(driver_id) FROM driver where exists (SELECT uid FROM (SELECT uid from user) as b where b.uid = driver.driver_id);

執行效果如圖:

可以發現優化減少了6s多的執行時間,下面是SQL的執行計劃:

同樣的還是相關子查詢,但是減少了內部遍歷查詢的操作。所以可以通過預查詢來減少遍歷操作,而提高效率。

其實在實際編程中,很多開發人員選擇不使用連接表查詢,而是自己先把數據從一張表中取出,再到另一張表中執行WHEREIN操作,這原理和上面SQL語句實現的是一樣的。

MySQL5.6對子查詢的優化?

SEMI JOIN策略

優化器會識別出需要子查詢的IN語句以便從區域表返回每個區域鍵的一個實例。這就導致了MySQL會以半連接的方式執行SELECT語句,所以全局表中每個區域只會有一個實例與記錄相匹配。

半連接和常規連接之間存在兩個非常重要的區別:

  • 在半連接中,內表不會導致重復的結果。
  • 此操作不會有內表中的字段添加到結果中去。

因此,半連接的結果常常是來自外表記錄的一個子集。從有效性上看,半連接的優化在于有效的消除了來自內表的重復項,MySQL應用了四個不同的半連接執行策略用來去重。

Table Pullout優化

Convert the subquery to a join, or use table pullout and run the query as an inner join between subquery tables and outer tables. Table pullout pulls a table out from the subquery to the outer query.將子查詢轉變為一個連接,或是利用table pullout并將查詢作為子查詢表和外表之間的一個內連接來執行。Table pullout會為外部查詢從子查詢抽取出一個表。

有些時候,一個子查詢可以被重寫為JOIN,例如:

SELECT OrderID FROM Orders where EmployeeID IN (select EmployeeID from Employees where EmployeeID > 3);

如果知道OrderID是唯一的,即主鍵或者唯一索引,那么SQL語句會被重寫為Join形式。

SELECT OrderID FROM Orders join Employees where Orders.EmployeeID = Employees.EmployeeID and Employees.EmployeeID > 3;

Table pullout的作用就是根據唯一索引將子查詢重寫為JOIN語句,在MySql 5.5中,上述的SQL語句執行計劃:

如果通過EXPLAIN EXTENDED 和 SHOW WARNINGS命令,可以看到如下結果:

復制代碼 代碼如下:
select `northwind`.`Orders`.`OrderID` AS `OrderID` from `northwind`.`Orders` where in_optimizer>(`northwind`.`Orders`.`EmployeeID`,exists>(primary_index_lookup>(cache>(`northwind`.`Orders`.`EmployeeID`) in Employees on PRIMARY where ((`northwind`.`Employees`.`EmployeeID` > 3) and (cache>(`northwind`.`Orders`.`EmployeeID`) = `northwind`.`Employees`.`EmployeeID`)))))

正是上面說的in為什么慢?

在MySql 5.6中,優化器會對SQL語句重寫,得到的執行計劃:

在MySql 5.6中,優化器沒有將獨立子查詢重寫為相關子查詢,通過EXPLAIN EXTENDED 和 SHOW WARNINGS命令,得到優化器的執行方式為:

復制代碼 代碼如下:
/* select#1 */ select `northwind`.`orders`.`OrderID` AS `OrderID` from `northwind`.`employees` join `northwind`.`orders` where ((`northwind`.`orders`.`EmployeeID` = `northwind`.`employees`.`EmployeeID`) and (`northwind`.`employees`.`EmployeeID` > 3))

很顯然,優化器將上述子查詢重寫為JOIN語句,這就是Table Pullout優化。

Duplicate Weedout優化

Run the semi-join as if it was a join and remove duplicate records using a temporary table.執行半連接,就如同它是一個連接并利用臨時表移除了重復的記錄。

上面內部表查出的列是唯一的,因此優化器會將子查詢重寫為JOIN語句,以提高SQL執行的效率。Duplicate Weedout優化是指外部查詢條件是列是唯一的,MySql優化器會先將子查詢查出的結果進行去重。比如下面這條SQL語句:

SELECT ContactName FROM Customers where CustomerID in (select CustomerID from Orders where OrderID > 10000 and Customers.Country = Orders.ShipCountry);

因為CustomerID是主鍵,所以應該對子查詢得到的結果進行去重。在MySql 5.6中的執行計劃:

Extra選項提示的Start temporary表示創建一張去重的臨時表,End temporary表示刪除該臨時表。而通過EXPLAIN EXTENDED 和 SHOW WARNINGS命令,得到優化器的執行方式為:

復制代碼 代碼如下:
/* select#1 */ select `northwind`.`customers`.`ContactName` AS `ContactName` from `northwind`.`customers` semi join (`northwind`.`orders`) where ((`northwind`.`customers`.`CustomerID` = `northwind`.`orders`.`CustomerID`) and (`northwind`.`customers`.`Country` = `northwind`.`orders`.`ShipCountry`) and (`northwind`.`orders`.`OrderID` > 10000))

與Table Pullout優化不同的是,顯示的是semi join而不是join,其中原因在于多了一些去重的工作,對于上述的執行計劃,其掃描成本約為830+830*1=1660次。
而在MySql 5.5中的執行計劃為:

可以看到,在MySql 5.5中還是將語句轉化為相關子查詢,掃描成本約為93+93*9=930次。

我們可以看到MySql 5.6優化以后比5.5的掃描成本反而大,其實這只是在兩張表較小的的情況下的結果,如果表很大,優化的效果會非常明顯。

Materialization優化

Materialize the subquery into a temporary table with an index and use the temporary table to perform a join. The index is used to remove duplicates. The index might also be used later for lookups when joining the temporary table with the outer tables; if not, the table is scanned.

上面的子查詢是相關子查詢,如果子查詢是獨立子查詢,則優化器可以選擇將獨立子查詢產生的結果填充到單獨一張物化臨時表中,如圖:

根據JOIN的順序,Materialization優化可分為:

  • Materialization scan:JOIN是將物化臨時表和表進行關聯。
  • Materialization lookup:JOIN是將表和物化臨時表進行關聯。

下面的子查詢可以利用Materialization來進行優化:

SELECT OrderID FROM Orders where OrderID in (select OrderID from `Order Details` where UnitPrice  50 );

SQL語句的執行計劃:

可以看到,在進行JOIN時(也就是id為1的步驟),先掃描的表是Orders,然后是subquery2,因此這是Materialization lookup的優化。對于下面的SQL:

select * FROM driver where driver_id in (select uid from user);

SQL語句的執行計劃:

先掃描的是subquery2,再是driver表,這就是Materialization scan的優化。

FirstMacth優化

When scanning the inner tables for row combinations and there are multiple instances of a given value group, choose one rather than returning them all. This "shortcuts" scanning and eliminates production of unnecessary rows.為了對記錄進行合并而在掃描內表,并且對于給定值群組有多個實例時,選擇其一而不是將它們全部返回。這為表掃描提供了一個早期退出機制而且還消除了不必要記錄的產生。

半連接的最先匹配(FirstMatch)策略執行子查詢的方式與MySQL稍早版本中的IN-TO-EXISTS是非常相似的。對于外表中的每條匹配記錄,MySQL都會在內表中進行匹配檢查。當發現存在匹配時,它會從外表返回記錄。只有在未發現匹配的情況下,引擎才會回退去掃描整個內表。

LooseScan優化

Scan a subquery table using an index that enables a single value to be chosen from each subquery's value group.利用索引來掃描一個子查詢表可以從每個子查詢的值群組中選出一個單一的值。

SEMI JOIN變量

Each of these strategies except Duplicate Weedout can be enabled or disabled using the optimizer_switch system variable. The semijoin flag controls whether semi-joins are used. If it is set to on, the firstmatch, loosescan, and materialization flags enable finer control over the permitted semi-join strategies. These flags are on by default.除Duplicate Weedout之外的每個策略可以用變量控制開關,semijoin控制semi-joins優化是否開啟,如果設置開啟,其他的策略也有獨立的變量控制。所有的變量在5.6默認是打開的。

mysql> SELECT @@optimizer_switch\G;
*************************** 1. row ***************************
@@optimizer_switch: index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mrr=on,mrr_cost_based=on,block_nested_loop=on,batched_key_access=off,materialization=on,semijoin=on,loosescan=on,firstmatch=on,duplicateweedout=on,subquery_materialization_cost_based=on,use_index_extensions=on,condition_fanout_filter=on,derived_merge=on
1 row in set (0.00 sec)

EXPLAIN查看策略

  • Semi-joined tables show up in the outer select. EXPLAIN EXTENDED plus SHOW WARNINGS shows the rewritten query, which displays the semi-join structure. From this you can get an idea about which tables were pulled out of the semi-join. If a subquery was converted to a semi-join, you will see that the subquery predicate is gone and its tables and WHERE clause were merged into the outer query join list and WHERE clause.
  • Temporary table use for Duplicate Weedout is indicated by Start temporary and End temporary in the Extra column. Tables that were not pulled out and are in the range of EXPLAIN output rows covered by Start temporary and End temporary will have their rowid in the temporary table.
  • FirstMatch(tbl_name) in the Extra column(列) indicates join shortcutting.
  • LooseScan(m..n) in the Extra column indicates use of the LooseScan strategy. m and n are key part numbers.
  • As of MySQL 5.6.7, temporary table use for materialization is indicated by rows with a select_type value of MATERIALIZED and rows with a table value of .
  • Before MySQL 5.6.7, temporary table use for materialization is indicated in the Extra column by Materialize if a single table is used, or by Start materialize and End materialize if multiple tables are used. If Scan is present, no temporary table index is used for table reads. Otherwise, an index lookup is used.

上面介紹中FirstMacth優化、LooseScan優化的具體效果沒有很好的例子去顯示出來。有機會可以交流學習。

參考

《MySql技術內幕:SQL編程》

http://dev.mysql.com/doc/refman/5.6/en/subquery-optimization.html

http://tech.it168.com/a2013/0506/1479/000001479749.shtml

到此這篇關于MySql子查詢IN的執行和優化的實現的文章就介紹到這了,更多相關MySql子查詢IN 內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 詳細聊聊MySQL中慢SQL優化的方向
  • 淺談MySQL之select優化方案
  • Mysql縱表轉換為橫表的方法及優化教程
  • MySQL千萬級數據表的優化實戰記錄
  • 帶你快速搞定Mysql優化
  • mysql 數據插入優化方法之concurrent_insert
  • mysql優化之query_cache_limit參數說明
  • MySQL優化之如何寫出高質量sql語句
  • mysql查詢優化之100萬條數據的一張表優化方案
  • MYSQL 的10大經典優化案例場景實戰

標簽:溫州 三明 無錫 定西 福州 山西 揚州 阿里

巨人網絡通訊聲明:本文標題《MySql子查詢IN的執行和優化的實現》,本文關鍵詞  MySql,子,查詢,的,執行,和,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySql子查詢IN的執行和優化的實現》相關的同類信息!
  • 本頁收集關于MySql子查詢IN的執行和優化的實現的相關信息資訊供網民參考!
  • 推薦文章
    国产a视频精品免费观看| 日韩最新中文字幕| 国产精品极品美女在线观看免费 | 日本人体一区二区| 亚洲精品永久www嫩草| 91ts人妖另类精品系列| 丰满少妇被猛烈进入| 蜜桃av噜噜一区二区三区麻豆| 成人晚上爱看视频| 99精品国产99久久久久久97| 成人av免费在线播放| 欧美一级久久久| 欧美交换配乱吟粗大25p| 无码人妻精品一区二| 天天射综合影视| 国产精品99久久久久久久久久久久| 日韩少妇中文字幕| 久久久精品三级| 国产高潮失禁喷水爽到抽搐 | 国产精品av电影| 成人在线国产精品| 国产一区二区三区无遮挡| 黄色免费视频大全| 欧美日韩a v| 免费精品99久久国产综合精品| 91污片在线观看| 在线观看日韩电影| 日韩欧美在线观看| 国产69精品久久久久99| av免费在线播放网站| 神马午夜在线观看| 亚洲成人国产精品| 波多野结衣之无限发射| 国产露脸无套对白在线播放| 93久久精品日日躁夜夜躁欧美| 色狠狠综合天天综合综合| 久久精品电影一区二区| 亚洲自拍另类欧美丝袜| 亚洲成年人av| 男人操女人的视频网站| 国产jjizz一区二区三区视频| 日本黄色一级网站| 91视频这里只有精品| 91成年人视频| 国产精品久久久久久久午夜片| 日本精品视频一区二区| 欧美疯狂性受xxxxx另类| 天堂…中文在线最新版在线| 免费看黄色91| 欧美国产视频日韩| 成人h动漫精品一区| 中文字幕理论片| 国产精品久久久久久久久免费桃花| 91精品久久久久久久99蜜桃 | 亚洲一区二区三区精品在线观看| 成人免费视频在线观看超级碰| 亚洲va欧美va国产综合剧情 | 欧美一区二区三区不卡| 99re6在线| 性农村xxxxx小树林| 亚洲av人无码激艳猛片服务器| 久久久久久久综合| 欧美亚洲国产日本| 欧美国产在线看| 日韩欧美电影在线| 欧美在线观看成人| 美女网站色91| 欧美精品一区二区蜜臀亚洲| 91精品国产综合久久久久久丝袜| 国产二区视频在线播放| 人妻 日韩精品 中文字幕| 亚洲自拍偷拍综合| 孩xxxx性bbbb欧美| 日本中文字幕久久看| 成人免费激情视频| 神马影院午夜我不卡| 国产国语老龄妇女a片| 免费一级片91| 色又黄又爽网站www久久| 国产精品伊人日日| 美女爆乳18禁www久久久久久| 色呦呦网站一区| av在线无限看| 亚洲午夜国产一区99re久久| 一区二区免费电影| 亚洲av成人无码久久精品老人| 亚洲美女性视频| 亚洲精品日韩成人| 国产情侣在线视频| 亚洲v精品v日韩v欧美v专区| 国产一区二区三区免费不卡| 亚洲精品mv在线观看| av中文字幕免费观看| 自拍偷拍色综合| 激情六月婷婷久久| 亚洲第一免费播放区| 中文字幕中文字幕一区三区| 欧美黑人猛猛猛| 亚洲一区二区三区四区五区中文 | 91极品视觉盛宴| 国产福利视频在线播放| 亚洲欧美激情在线| 爱情岛论坛成人| 亚洲高清免费观看| 欧洲亚洲一区二区| 91精品视频免费在线观看| 日本韩国一区二区三区视频| 国产成人成网站在线播放青青| 五月婷婷六月香| 色婷婷av一区二区三区大白胸| 欧美大黄免费观看| 成人黄色免费在线观看| 免费一级特黄录像| www.国产色| 色av成人天堂桃色av| 天堂а√在线中文在线| 日本韩国欧美中文字幕| 日韩欧美激情在线| 农村妇女精品一二区| 久久精品成人| 亚洲品质视频自拍网| 中文字幕一区二区三区四区五区| 日韩成人免费在线视频| 精品久久久久久久中文字幕| 亚洲免费不卡| 国语对白做受69按摩| 99久久精品国产网站| 亚洲高清免费观看高清完整版| 99在线观看视频| xxxx黄色片| 天天射综合影视| 日韩精品一区在线视频| 99草在线视频| 亚洲天堂网站在线观看视频| 中文字幕亚洲精品一区| 国产精品久久久久久久美男| 国产福利一区二区| 超薄肉色丝袜足j调教99| 国产色婷婷亚洲99精品小说| 99精品视频免费版的特色功能| 91老师国产黑色丝袜在线| 91麻豆国产精品| 中文字幕在线一| 久久精品国产亚洲精品2020| 亚洲综合久久av一区二区三区| 99久久免费精品| 久久亚洲私人国产精品va| 亚洲一区和二区| 欧美性大战xxxxx久久久| 国产熟妇搡bbbb搡bbbb| 亚洲综合一区二区| 成人毛片视频网站| 亚洲人成亚洲人成在线观看图片| 欧美激情一二三| 中国av免费看| 欧美日韩国产激情| 一道本视频在线观看| 亚洲香蕉伊在人在线观| 91视频国产一区| 国产叼嘿视频在线观看| 亚洲国产精品推荐| 国产精品久久久久久久av福利| 久久久久久夜精品精品免费| 国产精品老女人视频| 亚洲成人日韩在线| 亚洲视频资源在线| 丰满少妇一区二区| 国产一区二区美女视频| www.av免费| 欧美亚洲日本国产| 在线视频日韩一区| 久久一二三区| 国产在线播放一区二区| 国产一区999| 色七七在线观看| 亚洲成人精品在线| 午夜免费福利视频| 日本黄色播放器| 日韩一区二区三区免费看| jizz亚洲少妇| 久久视频在线直播| 中文字幕一区二区三区精品| 欧美亚洲激情在线| 一区二区三区精| 成人在线一区二区| 国产人妖一区二区三区| 久久精品2019中文字幕| 无码熟妇人妻av| 57pao国产成人免费| 成人18视频日本| 日本精品福利视频| 国产日韩亚洲欧美综合| 午夜剧场高清版免费观看| 国产91在线观看丝袜| 婷婷精品国产一区二区三区日韩| 国产欧美日韩一区二区三区在线观看| 97公开免费视频| 亚洲人成在线观看网站高清| 免费成人在线网站| 逼特逼视频在线观看| 国产精品美腿一区在线看| 久久久久久久久久久久久女国产乱 | 国产三级精品在线不卡| 97超碰欧美中文字幕| 丰满人妻中伦妇伦精品app| 国产精品88888| 亚洲一区二区日本| 美国毛片一区二区| 漂亮人妻被中出中文字幕| 亚洲国产私拍精品国模在线观看| 日韩精品一区二区三区在线视频| 欧美男生操女生| 我想看黄色大片| 国产91精品青草社区| 国产一区二区不卡老阿姨| 国内不卡一区二区三区| 国产普通话bbwbbwbbw| 国产精品二区三区四区| 国产精品国产三级国产专播品爱网| 亚洲三级在线视频| 亚洲日本中文字幕| 国产三级第一页| 国产精品免费一区二区三区在线观看| 香蕉视频成人在线| 黄色免费高清视频| 欧洲国内综合视频| 日本xxxx裸体xxxx| 亚洲高清久久久久久| 黑人精品无码一区二区三区AV| 欧美亚洲精品日韩| 亚洲第一狼人社区| 国产伦理一区二区| 精品国产一区二区三区免费| 一级精品视频在线观看宜春院| 国产精品扒开腿做爽爽| 欧美日韩亚洲国产一区| 亚洲AV无码成人精品区东京热| 精品日本一区二区| 亚洲风情亚aⅴ在线发布| 91首页免费视频| 日韩三级视频在线| 中文字幕日本最新乱码视频| 午夜精品视频网站| 亚洲一区在线观看视频| 国产精品久久久久久久免费| 日本三级免费观看| 色偷偷综合社区| 另类欧美日韩国产在线| 冲田杏梨av在线| 国产午夜一区二区| 亚洲精品视频网| 久久国产精品网| 亚洲自拍与偷拍| 88久久精品无码一区二区毛片| 国产精品久久久久久超碰| 国产精品精品国产色婷婷| 国产绿帽刺激高潮对白| 精品久久久久久久久久中文字幕| 亚洲乱码国产乱码精品精天堂| 免费成人在线看| 亚洲aⅴ日韩av电影在线观看| 91网站在线观看视频| 五月天婷婷色综合| 国产精品乱子乱xxxx| 日韩欧美在线影院| 国产九色精品成人porny| 伊人国产在线观看| a在线观看免费视频| 国产精品成人免费电影| 中文在线一区二区| 性猛交ⅹxxx富婆video| 好吊色欧美一区二区三区视频| 日韩欧美成人区| 亚洲美女综合网| 欧美一区二区三区电影在线观看 | 麻豆国产va免费精品高清在线| 在线观看国产一区二区| 91午夜交换视频| 国产中文字幕乱人伦在线观看| 最新国产精品亚洲| 2014亚洲片线观看视频免费| 人妻精品无码一区二区三区| 欧美有码在线视频| 91国偷自产一区二区三区成为亚洲经典| 国产一区二区小视频| 亚洲天堂久久新| 韩国日本美国免费毛片| 久久福利一区二区| 欧美日韩在线精品| 日韩男女性生活视频| 日韩精品免费在线观看| 一区二区三区四区乱视频| 久久中文在线| 午夜免费看毛片| 亚洲自拍高清视频网站| 一本久道久久综合中文字幕 | 色婷婷狠狠18禁久久| 久久夜精品va视频免费观看| 蜜桃一区二区三区四区| 在线看片中文字幕| 日韩中文字幕三区| 日韩av电影免费播放| 97精品免费视频| 亚洲欧洲日韩女同| 日韩av免费播放| 中文字幕久久av| 国产精品yjizz| 一区二区三区日韩精品| 99视频在线观看免费| 午夜剧场免费看| 伊人久久大香线蕉成人综合网| 欧美高清一区二区| 国产精品手机播放| 日本亚洲精品在线观看| 一区二区成人精品| 综合av色偷偷网| 亚洲国产成人av在线| 黑人极品videos精品欧美裸| 国产欧美日韩综合精品一区二区 | 97超碰免费观看| 久久久久久久一区二区| 日韩欧美一区二区在线| av电影在线观看一区| 亚洲 欧美 精品| 看片网站在线观看| 青青在线免费观看| 国内精品美女av在线播放| 亚洲国产成人av好男人在线观看| 亚洲av无码乱码国产精品| 天堂www中文在线资源| 久久精品一二三区| 8090成年在线看片午夜| 欧美精品一区二区三区在线| 色综合久久综合| 精品制服美女丁香| 中文 日韩 欧美| 亚洲欧美日韩精品久久久 | 91人人爽人人爽人人精88v| 成人黄色免费网站在线观看| 国产精品美女999| 久久免费观看视频| 久久偷看各类女兵18女厕嘘嘘| 日韩一区二区不卡| 亚洲国产一二三| 国产日韩欧美不卡在线| 熟妇高潮一区二区高潮| 久久久久久久久久久网| 女同激情久久av久久| 亚洲成色www久久网站| 久久精品国产美女| 欧美中文在线观看| 欧美日本一道本在线视频| 成人高清在线视频| www.日韩高清| 黄色小视频在线免费看| 性猛交╳xxx乱大交| 欧美一级爱爱视频| 国产富婆一区二区三区| 日韩欧美中文一区| 91久久久免费一区二区| 一区二区三区日韩精品视频| 成人美女视频在线看| 亚洲欧美丝袜中文综合| 亚洲自拍第二页| 波多野结衣喷潮| 欧美精品成人久久| 丰满人妻一区二区三区免费| 国产成人在线视频免费播放| 国产色91在线| 欧美三级电影在线看| 亚洲高清不卡av| 中文字幕在线精品| 国产成人精品av在线| 亚洲最大成人免费视频| 性色av一区二区三区免费| 中文字幕v亚洲ⅴv天堂| 日韩福利视频在线观看| 日韩三级视频在线观看| 在线观看亚洲a| 五月天亚洲精品| 精品高清一区二区三区| 欧美性生交大片免费| 欧美丝袜第三区| 精品国产老师黑色丝袜高跟鞋| 99久久精品费精品国产一区二区| 亚洲精品911| 一道本无吗一区| 久久久久久久久久一级| 日韩三级一区二区三区| 三级影片在线看| 国产jk精品白丝av在线观看 | 欧美视频xxx| 亚洲图片在线播放| 亚洲黄色免费观看| 成人午夜视频在线播放| 一区二区日韩在线观看| 天天综合天天色| 国产成人综合自拍| 97se亚洲国产综合自在线不卡| 国产精品伦理在线| 亚洲一区二区成人在线观看| 一区二区三区欧美| 专区另类欧美日韩| 中文字幕在线不卡视频| 亚洲午夜免费视频| 亚洲成人免费av| 欧美伊人久久久久久久久影院| 欧美日韩mp4| 亚洲精品成人av| 亚洲第一网站男人都懂|