亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > MySql子查詢IN的執(zhí)行和優(yōu)化的實現(xiàn)

MySql子查詢IN的執(zhí)行和優(yōu)化的實現(xiàn)

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

IN為什么慢?

在應(yīng)用程序中使用子查詢后,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語句的執(zhí)行計劃:

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

復(fù)制代碼 代碼如下:
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優(yōu)化器直接把IN子句轉(zhuǎn)換成了EXISTS的相關(guān)子查詢。下面這條相關(guān)IN子查詢:

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

查看SQL語句的執(zhí)行計劃:

就是相關(guān)子查詢,通過EXPLAIN EXTENDED 和 SHOW WARNINGS命令,看到如下結(jié)果:

復(fù)制代碼 代碼如下:
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`))))

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

IN和EXISTS哪個快?

網(wǎng)上百度到很多認為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列的索引。

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

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

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);

執(zhí)行結(jié)果是:

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

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);

執(zhí)行結(jié)果是:

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

可以看到IN和EXISTS的執(zhí)行計劃是一樣的,對此得出的結(jié)論兩者的執(zhí)行效率應(yīng)該是一樣的。

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

如何提高效率?

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

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

執(zhí)行效果如圖:

可以發(fā)現(xiàn)優(yōu)化減少了6s多的執(zhí)行時間,下面是SQL的執(zhí)行計劃:

同樣的還是相關(guān)子查詢,但是減少了內(nèi)部遍歷查詢的操作。所以可以通過預(yù)查詢來減少遍歷操作,而提高效率。

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

MySQL5.6對子查詢的優(yōu)化?

SEMI JOIN策略

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

半連接和常規(guī)連接之間存在兩個非常重要的區(qū)別:

  • 在半連接中,內(nèi)表不會導(dǎo)致重復(fù)的結(jié)果。
  • 此操作不會有內(nèi)表中的字段添加到結(jié)果中去。

因此,半連接的結(jié)果常常是來自外表記錄的一個子集。從有效性上看,半連接的優(yōu)化在于有效的消除了來自內(nèi)表的重復(fù)項,MySQL應(yīng)用了四個不同的半連接執(zhí)行策略用來去重。

Table Pullout優(yōu)化

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.將子查詢轉(zhuǎn)變?yōu)橐粋€連接,或是利用table pullout并將查詢作為子查詢表和外表之間的一個內(nèi)連接來執(zhí)行。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的作用就是根據(jù)唯一索引將子查詢重寫為JOIN語句,在MySql 5.5中,上述的SQL語句執(zhí)行計劃:

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

復(fù)制代碼 代碼如下:
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中,優(yōu)化器會對SQL語句重寫,得到的執(zhí)行計劃:

在MySql 5.6中,優(yōu)化器沒有將獨立子查詢重寫為相關(guān)子查詢,通過EXPLAIN EXTENDED 和 SHOW WARNINGS命令,得到優(yōu)化器的執(zhí)行方式為:

復(fù)制代碼 代碼如下:
/* 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))

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

Duplicate Weedout優(yōu)化

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

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

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

因為CustomerID是主鍵,所以應(yīng)該對子查詢得到的結(jié)果進行去重。在MySql 5.6中的執(zhí)行計劃:

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

復(fù)制代碼 代碼如下:
/* 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優(yōu)化不同的是,顯示的是semi join而不是join,其中原因在于多了一些去重的工作,對于上述的執(zhí)行計劃,其掃描成本約為830+830*1=1660次。
而在MySql 5.5中的執(zhí)行計劃為:

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

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

Materialization優(yōu)化

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.

上面的子查詢是相關(guān)子查詢,如果子查詢是獨立子查詢,則優(yōu)化器可以選擇將獨立子查詢產(chǎn)生的結(jié)果填充到單獨一張物化臨時表中,如圖:

根據(jù)JOIN的順序,Materialization優(yōu)化可分為:

  • Materialization scan:JOIN是將物化臨時表和表進行關(guān)聯(lián)。
  • Materialization lookup:JOIN是將表和物化臨時表進行關(guān)聯(lián)。

下面的子查詢可以利用Materialization來進行優(yōu)化:

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

SQL語句的執(zhí)行計劃:

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

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

SQL語句的執(zhí)行計劃:

先掃描的是subquery2,再是driver表,這就是Materialization scan的優(yōu)化。

FirstMacth優(yōu)化

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.為了對記錄進行合并而在掃描內(nèi)表,并且對于給定值群組有多個實例時,選擇其一而不是將它們?nèi)糠祷亍_@為表掃描提供了一個早期退出機制而且還消除了不必要記錄的產(chǎn)生。

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

LooseScan優(yōu)化

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之外的每個策略可以用變量控制開關(guān),semijoin控制semi-joins優(yōu)化是否開啟,如果設(shè)置開啟,其他的策略也有獨立的變量控制。所有的變量在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優(yōu)化、LooseScan優(yōu)化的具體效果沒有很好的例子去顯示出來。有機會可以交流學(xué)習(xí)。

參考

《MySql技術(shù)內(nèi)幕:SQL編程》

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

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

到此這篇關(guān)于MySql子查詢IN的執(zhí)行和優(yōu)化的實現(xiàn)的文章就介紹到這了,更多相關(guān)MySql子查詢IN 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

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

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

巨人網(wǎng)絡(luò)通訊聲明:本文標題《MySql子查詢IN的執(zhí)行和優(yōu)化的實現(xiàn)》,本文關(guān)鍵詞  MySql,子,查詢,的,執(zhí)行,和,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySql子查詢IN的執(zhí)行和優(yōu)化的實現(xiàn)》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySql子查詢IN的執(zhí)行和優(yōu)化的實現(xiàn)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产一区二区精品| 成人免费高清视频| 精品视频免费看| 日韩一级黄色| 国产精品自拍在线| 国产精品1024在线永久免费| 精品视频免费看| 二级特黄绝大片免费视频大片| 一级毛片视频在线观看| 91麻豆精品国产自产在线| 亚洲精品久久玖玖玖玖| 国产精品123| 国产成人精品影视| 亚洲精品久久久中文字| 国产成a人片在线观看视频| 久草免费在线色站| 精品毛片视频| 99色视频在线观看| 日本免费乱人伦在线观看| 青青青草影院 | 欧美一级视频高清片| 尤物视频网站在线观看| 日本特黄特色aaa大片免费| 99久久精品国产高清一区二区| 亚洲天堂免费| 国产a毛片| 成人免费一级毛片在线播放视频| 欧美a免费| 天天做日日爱夜夜爽| 日韩在线观看免费| 国产美女在线观看| 韩国三级香港三级日本三级la| 青青青草视频在线观看| 国产成人精品影视| 美女免费精品视频在线观看| 美女免费精品视频在线观看| 九九精品在线播放| 精品国产三级a∨在线观看| 免费毛片基地| 午夜在线亚洲| 亚欧成人毛片一区二区三区四区| 国产视频久久久| 亚久久伊人精品青青草原2020| 日韩欧美一及在线播放| 九九久久国产精品大片| 久久国产一区二区| 国产不卡精品一区二区三区| 国产91精品一区二区| 久草免费在线色站| 国产91精品一区二区| 国产高清视频免费观看| 韩国妈妈的朋友在线播放| 你懂的在线观看视频| 色综合久久天天综合观看| 国产高清在线精品一区二区| 久久国产一久久高清| 国产精品123| 尤物视频网站在线观看| 毛片成人永久免费视频| 日日日夜夜操| 欧美另类videosbestsex高清| 青青青草视频在线观看| 亚洲第一视频在线播放| 一级毛片视频免费| 日韩欧美一二三区| 精品视频在线看| 四虎影视库| 日本免费乱理伦片在线观看2018| 日韩在线观看视频免费| 99久久精品国产麻豆| 美女免费黄网站| 韩国妈妈的朋友在线播放| 久久久久久久免费视频| 一级女性全黄生活片免费| 久久国产精品自由自在| 久草免费在线色站| 99热热久久| 日韩一级黄色片| 精品国产亚洲一区二区三区| 美女免费精品高清毛片在线视 | 天堂网中文字幕| 亚洲女人国产香蕉久久精品| 国产综合91天堂亚洲国产| 免费国产在线观看不卡| 欧美爱色| 成人免费观看网欧美片| 精品国产一区二区三区久 | 精品国产一区二区三区久| 九九精品在线播放| 99久久精品国产片| 在线观看导航| 国产一区二区精品尤物| 日韩中文字幕一区二区不卡| 日韩在线观看视频免费| 精品国产香蕉伊思人在线又爽又黄| 亚洲 男人 天堂| 久久国产一区二区| 欧美激情一区二区三区视频高清| 97视频免费在线| 国产综合91天堂亚洲国产| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 亚欧乱色一区二区三区| 美女免费精品高清毛片在线视 | 91麻豆精品国产自产在线观看一区| 美国一区二区三区| 九九免费精品视频| 免费国产在线视频| 国产麻豆精品hdvideoss| 成人免费观看视频| 四虎影视库国产精品一区| 国产视频一区二区三区四区 | 亚洲 激情| 精品国产香蕉伊思人在线又爽又黄| 国产网站免费视频| 日本在线www| 成人影院一区二区三区| 成人影视在线观看| 午夜激情视频在线观看| 毛片高清| 一级女性大黄生活片免费| 日日夜人人澡人人澡人人看免| 国产伦精品一区二区三区在线观看| 成人a大片高清在线观看| 日韩字幕在线| 国产一区免费在线观看| 欧美a免费| 国产不卡在线看| 久久国产精品自线拍免费| 欧美国产日韩久久久| 国产视频一区二区在线观看| 精品视频在线观看一区二区 | 天天色色色| 999精品视频在线| 亚洲女人国产香蕉久久精品| 国产韩国精品一区二区三区| 久草免费资源| 亚洲天堂一区二区三区四区| 日本免费乱人伦在线观看| 黄色福利片| 国产精品1024在线永久免费| 欧美爱色| 免费一级片在线观看| 国产精品1024在线永久免费| 日韩一级黄色| 午夜欧美福利| 亚洲 男人 天堂| 国产精品1024在线永久免费| 毛片电影网| 国产成人欧美一区二区三区的| 精品久久久久久影院免费| 国产极品精频在线观看| 黄色免费三级| 黄色免费网站在线| 亚洲天堂一区二区三区四区| 高清一级做a爱过程不卡视频| 香蕉视频一级| 国产伦精品一区三区视频| 天天做日日干| 午夜在线影院| 精品久久久久久影院免费| 久久精品道一区二区三区| 亚洲第一页色| 国产成a人片在线观看视频| 日韩在线观看视频免费| 99久久精品国产麻豆| 99热热久久| 欧美激情一区二区三区视频| 国产综合成人观看在线| 亚欧视频在线| 尤物视频网站在线观看| 黄色免费网站在线| 美女免费精品视频在线观看| 中文字幕一区二区三区精彩视频| 日韩中文字幕一区| 精品视频免费在线| 成人av在线播放| 国产精品1024永久免费视频| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产激情视频在线观看| 成人免费高清视频| 91麻豆高清国产在线播放| 99久久精品国产国产毛片| 四虎影视库| 成人免费网站视频ww| 99久久精品国产片| 国产网站麻豆精品视频| 国产国产人免费视频成69堂| 美女免费黄网站| 黄视频网站在线看| 99久久网站| 91麻豆精品国产高清在线| 国产不卡在线看| 尤物视频网站在线| 精品视频免费看| 99久久视频| 久久99中文字幕久久| 色综合久久久久综合体桃花网| 麻豆系列 在线视频| 日韩在线观看免费| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 |