黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

您的位置:首頁技術文章
文章詳情頁

MySQL之select in 子查詢優化的實現

瀏覽:21日期:2023-10-11 11:20:39

下面的演示基于MySQL5.7.27版本

一、關于MySQL子查詢的優化策略介紹:

子查詢優化策略

對于不同類型的子查詢,優化器會選擇不同的策略。

1. 對于 IN、=ANY 子查詢,優化器有如下策略選擇:

semijoin Materialization exists

2. 對于 NOT IN、<>ALL 子查詢,優化器有如下策略選擇:

Materialization exists

3. 對于 derived 派生表,優化器有如下策略選擇:derived_merge,將派生表合并到外部查詢中(5.7 引入 );將派生表物化為內部臨時表,再用于外部查詢。注意:update 和 delete 語句中子查詢不能使用 semijoin、materialization 優化策略

二、創建數據進行模擬演示

為了方便分析問題先建兩張表并插入模擬數據:

CREATE TABLE `test02` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `a` (`a`)) ENGINE=InnoDB;drop procedure idata;delimiter ;;create procedure idata()begin declare i int; set i=1; while(i<=10000)do insert into test02 values(i, i, i); set i=i+1; end while;end;;delimiter ;call idata();create table test01 like test02;insert into test01 (select * from test02 where id<=1000)

三、舉例分析SQL實例

子查詢示例:

SELECT * FROM test01 WHERE test01.a IN (SELECT test02.b FROM test02 WHERE id < 10)

大部分人可定會簡單的認為這個 SQL 會這樣執行:

SELECT test02.b FROM test02 WHERE id < 10

結果:1,2,3,4,5,6,7,8,9

SELECT * FROM test01 WHERE test01.a IN (1,2,3,4,5,6,7,8,9);

但實際上 MySQL 并不是這樣做的。MySQL 會將相關的外層表壓到子查詢中,優化器認為這樣效率更高。也就是說,優化器會將上面的 SQL 改寫成這樣:

select * from test01 where exists(select b from test02 where id < 10 and test01.a=test02.b);

提示: 針對mysql5.5以及之前的版本

查看執行計劃如下,發現這條SQL對表test01進行了全表掃描1000,效率低下:

root@localhost [dbtest01]>desc select * from test01 where exists(select b from test02 where id < 10 and test01.a=test02.b);+----+--------------------+--------+------------+-------+---------------+---------+---------+------+--------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+--------------------+--------+------------+-------+---------------+---------+---------+------+--------+----------+-------------+| 1 | PRIMARY | test01 | NULL | ALL | NULL | NULL | NULL | NULL | 1000 | 100.00 | Using where || 2 | DEPENDENT SUBQUERY | test02 | NULL | range | PRIMARY | PRIMARY | 4 | NULL | 9 | 10.00 | Using where |+----+--------------------+--------+------------+-------+---------------+---------+---------+------+--------+----------+-------------+2 rows in set, 2 warnings (0.00 sec)

但是此時實際執行下面的SQL,發現也不慢啊,這不是自相矛盾嘛,別急,咱們繼續往下分析:

SELECT * FROM test01 WHERE test01.a IN (SELECT test02.b FROM test02 WHERE id < 10)

查看此條SQL的執行計劃如下:

root@localhost [dbtest01]>desc SELECT * FROM test01 WHERE test01.a IN (SELECT test02.b FROM test02 WHERE id < 10);+----+--------------+-------------+------------+-------+---------------+---------+---------+---------------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+--------------+-------------+------------+-------+---------------+---------+---------+---------------+------+----------+-------------+| 1 | SIMPLE | <subquery2> | NULL | ALL | NULL | NULL | NULL | NULL | NULL | 100.00 | Using where || 1 | SIMPLE | test01 | NULL | ref | a | a | 5 | <subquery2>.b | 1 | 100.00 | NULL || 2 | MATERIALIZED | test02 | NULL | range | PRIMARY | PRIMARY | 4 | NULL | 9 | 100.00 | Using where |+----+--------------+-------------+------------+-------+---------------+---------+---------+---------------+------+----------+-------------+3 rows in set, 1 warning (0.00 sec)

發現優化器使用到了策略MATERIALIZED。于是對此策略進行了資料查詢和學習。https://dev.mysql.com/doc/refman/5.6/en/subquery-optimization.html

原因是從MySQL5.6版本之后包括MySQL5.6版本,優化器引入了新的優化策略:materialization=[off|on],semijoin=[off|on],(off代表關閉此策略,on代表開啟此策略)可以采用show variables like ’optimizer_switch’; 來查看MySQL采用的優化器策略。當然這些策略都是可以在線進行動態修改的set global optimizer_switch=’materialization=on,semijoin=on’;代表開啟優化策略materialization和semijoin

MySQL5.7.27默認的優化器策略:

root@localhost [dbtest01]>show variables like ’optimizer_switch’; +------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| Variable_name | Value |+------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| 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 |+------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

所以在MySQL5.6及以上版本時

執行下面的SQL是不會慢的。因為MySQL的優化器策略materialization和semijoin 對此SQL進行了優化

SELECT * FROM test01 WHERE test01.a IN (SELECT test02.b FROM test02 WHERE id < 10)

然而咱們把mysql的優化器策略materialization和semijoin 關閉掉測試,發現SQL確實對test01進行了全表的掃描(1000):

set global optimizer_switch=’materialization=off,semijoin=off’;

執行計劃如下test01表確實進行了全表掃描:

root@localhost [dbtest01]>desc SELECT * FROM test01 WHERE test01.a IN (SELECT test02.b FROM test02 WHERE id < 10);+----+--------------------+--------+------------+-------+---------------+---------+---------+------+--------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+--------------------+--------+------------+-------+---------------+---------+---------+------+--------+----------+-------------+| 1 | PRIMARY | test01 | NULL | ALL | NULL | NULL | NULL | NULL | 1000 | 100.00 | Using where || 2 | DEPENDENT SUBQUERY | test02 | NULL | range | PRIMARY | PRIMARY | 4 | NULL | 9 | 10.00 | Using where |+----+--------------------+--------+------------+-------+---------------+---------+---------+------+--------+----------+-------------+2 rows in set, 1 warning (0.00 sec)

下面咱們分析下這個執行計劃:

!!!!再次提示:如果是mysql5.5以及之前的版本,或者是mysql5.6以及之后的版本關閉掉優化器策略materialization=off,semijoin=off,得到的SQL執行計劃和下面的是相同的

root@localhost [dbtest01]>desc select * from test01 where exists(select b from test02 where id < 10 and test01.a=test02.b);+----+--------------------+--------+------------+-------+---------------+---------+---------+------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+--------------------+--------+------------+-------+---------------+---------+---------+------+------+----------+-------------+| 1 | PRIMARY | test01 | NULL | ALL | NULL | NULL | NULL | NULL | 1000 | 100.00 | Using where || 2 | DEPENDENT SUBQUERY | test02 | NULL | range | PRIMARY | PRIMARY | 4 | NULL | 9 | 10.00 | Using where |+----+--------------------+--------+------------+-------+---------------+---------+---------+------+------+----------+-------------+2 rows in set, 2 warnings (0.00 sec)

不相關子查詢變成了關聯子查詢(select_type:DEPENDENT SUBQUERY),子查詢需要根據 b 來關聯外表 test01,因為需要外表的 test01 字段,所以子查詢是沒法先執行的。執行流程為:

掃描 test01,從 test01 取出一行數據 R; 從數據行 R 中,取出字段 a 執行子查詢,如果得到結果為 TRUE,則把這行數據 R 放到結果集; 重復 1、2 直到結束。

總的掃描行數為 1000+1000*9=10000(這是理論值,但是實際值比10000還少,怎么來的一直沒想明白,看規律是子查詢結果集每多一行,總掃描行數就會少幾行)。

Semi-join優化器:

這樣會有個問題,如果外層表是一個非常大的表,對于外層查詢的每一行,子查詢都得執行一次,這個查詢的性能會非常差。我們很容易想到將其改寫成 join 來提升效率:

select test01.* from test01 join test02 on test01.a=test02.b and test02.id<10;

# 查看此SQL的執行計劃:

desc select test01.* from test01 join test02 on test01.a=test02.b and test02.id<10;root@localhost [dbtest01]>EXPLAIN extended select test01.* from test01 join test02 on test01.a=test02.b and test02.id<10;+----+-------------+--------+------------+-------+---------------+---------+---------+-------------------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref| rows | filtered | Extra |+----+-------------+--------+------------+-------+---------------+---------+---------+-------------------+------+----------+-------------+| 1 | SIMPLE | test02 | NULL | range | PRIMARY | PRIMARY | 4 | NULL | 9 | 100.00 | Using where || 1 | SIMPLE | test01 | NULL | ref | a | a | 5 | dbtest01.test02.b | 1 | 100.00 | NULL |+----+-------------+--------+------------+-------+---------------+---------+---------+-------------------+------+----------+-------------+2 rows in set, 2 warnings (0.00 sec)

這樣優化可以讓 t2 表做驅動表,t1 表關聯字段有索引,查找效率非常高。

但這里會有個問題,join 是有可能得到重復結果的,而 in(select ...) 子查詢語義則不會得到重復值。而 semijoin 正是解決重復值問題的一種特殊聯接。在子查詢中,優化器可以識別出 in 子句中每組只需要返回一個值,在這種情況下,可以使用 semijoin 來優化子查詢,提升查詢效率。這是 MySQL 5.6 加入的新特性,MySQL 5.6 以前優化器只有 exists 一種策略來“優化”子查詢。

經過 semijoin 優化后的 SQL 和執行計劃分為:

root@localhost [dbtest01]>desc SELECT * FROM test01 WHERE test01.a IN (SELECT test02.b FROM test02 WHERE id < 10);+----+--------------+-------------+------------+-------+---------------+---------+---------+---------------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+--------------+-------------+------------+-------+---------------+---------+---------+---------------+------+----------+-------------+| 1 | SIMPLE | <subquery2> | NULL | ALL | NULL | NULL | NULL | NULL | NULL | 100.00 | Using where || 1 | SIMPLE | test01 | NULL | ref | a | a | 5 | <subquery2>.b | 1 | 100.00 | NULL || 2 | MATERIALIZED | test02 | NULL | range | PRIMARY | PRIMARY | 4 | NULL | 9 | 100.00 | Using where |+----+--------------+-------------+------------+-------+---------------+---------+---------+---------------+------+----------+-------------+3 rows in set, 1 warning (0.00 sec)

select `test01`.`id`,`test01`.`a`,`test01`.`b` from `test01` semi join `test02` where ((`test01`.`a` = `<subquery2>`.`b`) and (`test02`.`id` < 10));

##注意這是優化器改寫的SQL,客戶端上是不能用 semi join 語法的

semijoin 優化實現比較復雜,其中又分 FirstMatch、Materialize 等策略,上面的執行計劃中 select_type=MATERIALIZED 就是代表使用了 Materialize 策略來實現的 semijoin這里 semijoin 優化后的執行流程為:

先執行子查詢,把結果保存到一個臨時表中,這個臨時表有個主鍵用來去重;從臨時表中取出一行數據 R;從數據行 R 中,取出字段 b 到被驅動表 t1 中去查找,滿足條件則放到結果集;重復執行 2、3,直到結束。這樣一來,子查詢結果有 9 行,即臨時表也有 9 行(這里沒有重復值),總的掃描行數為 9+9+9*1=27 行,比原來的 10000 行少了很多。

MySQL 5.6 版本中加入的另一種優化特性 materialization,就是把子查詢結果物化成臨時表,然后代入到外查詢中進行查找,來加快查詢的執行速度。內存臨時表包含主鍵(hash 索引),消除重復行,使表更小。如果子查詢結果太大,超過 tmp_table_size 大小,會退化成磁盤臨時表。這樣子查詢只需要執行一次,而不是對于外層查詢的每一行都得執行一遍。不過要注意的是,這樣外查詢依舊無法通過索引快速查找到符合條件的數據,只能通過全表掃描或者全索引掃描,

semijoin 和 materialization 的開啟是通過 optimizer_switch 參數中的 semijoin={on|off}、materialization={on|off} 標志來控制的。上文中不同的執行計劃就是對 semijoin 和 materialization 進行開/關產生的總的來說對于子查詢,先檢查是否滿足各種優化策略的條件(比如子查詢中有 union 則無法使用 semijoin 優化)然后優化器會按成本進行選擇,實在沒得選就會用 exists 策略來“優化”子查詢,exists 策略是沒有參數來開啟或者關閉的。

下面舉一個delete相關的子查詢例子:

把上面的2張測試表分別填充350萬數據和50萬數據來測試delete語句

root@localhost [dbtest01]>select count(*) from test02;+----------+| count(*) |+----------+| 3532986 |+----------+1 row in set (0.64 sec)root@localhost [dbtest01]>create table test01 like test02;Query OK, 0 rows affected (0.01 sec)root@localhost [dbtest01]>insert into test01 (select * from test02 where id<=500000)root@localhost [dbtest01]>select count(*) from test01;+----------+| count(*) |+----------+| 500000 |

執行delete刪除語句執行了4s

root@localhost [dbtest01]>delete FROM test01 WHERE test01.a IN (SELECT test02.b FROM test02 WHERE id < 10);Query OK, 9 rows affected (4.86 sec)

查看 執行計劃,對test01表進行了幾乎全表掃描:

root@localhost [dbtest01]>desc delete FROM test01 WHERE test01.a IN (SELECT test02.b FROM test02 WHERE id < 10);+----+--------------------+--------+------------+-------+---------------+---------+---------+------+--------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+--------------------+--------+------------+-------+---------------+---------+---------+------+--------+----------+-------------+| 1 | DELETE | test01 | NULL | ALL | NULL | NULL | NULL | NULL | 499343 | 100.00 | Using where || 2 | DEPENDENT SUBQUERY | test02 | NULL | range | PRIMARY | PRIMARY | 4 | NULL | 9 | 10.00 | Using where |+----+--------------------+--------+------------+-------+---------------+---------+---------+------+--------+----------+-------------+2 rows in set (0.00 sec)

于是修改上面的delete SQL語句偽join語句

root@localhost [dbtest01]>desc delete test01.* from test01 join test02 on test01.a=test02.b and test02.id<10;+----+-------------+--------+------------+-------+---------------+---------+---------+-------------------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref| rows | filtered | Extra |+----+-------------+--------+------------+-------+---------------+---------+---------+-------------------+------+----------+-------------+| 1 | SIMPLE | test02 | NULL | range | PRIMARY | PRIMARY | 4 | NULL | 9 | 100.00 | Using where || 1 | DELETE | test01 | NULL | ref | a | a | 5 | dbtest01.test02.b | 1 | 100.00 | NULL |+----+-------------+--------+------------+-------+---------------+---------+---------+-------------------+------+----------+-------------+2 rows in set (0.01 sec)執行非常的快root@localhost [dbtest01]>delete test01.* from test01 join test02 on test01.a=test02.b and test02.id<10;Query OK, 9 rows affected (0.01 sec)root@localhost [dbtest01]>select test01.* from test01 join test02 on test01.a=test02.b and test02.id<10;Empty set (0.00 sec)

下面的這個表執行要全表掃描,非常慢,基本對表test01進行了全表掃描:

root@lcalhost [dbtest01]>desc delete FROM test01 WHERE id IN (SELECT id FROM test02 WHERE id=’350000’);+----+--------------------+--------+------------+-------+---------------+---------+---------+-------+--------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+--------------------+--------+------------+-------+---------------+---------+---------+-------+--------+----------+-------------+| 1 | DELETE | test01 | NULL | ALL | NULL | NULL | NULL | NULL | 499343 | 100.00 | Using where || 2 | DEPENDENT SUBQUERY | test02 | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | Using index |+----+--------------------+--------+------------+-------+---------------+---------+---------+-------+--------+----------+-------------+2 rows in set (0.00 sec)

然而采用join的話,效率非常的高:

root@localhost [dbtest01]>desc delete test01.* FROM test01 inner join test02 WHERE test01.id=test02.id and test02.id=350000 ;+----+-------------+--------+------------+-------+---------------+---------+---------+-------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+--------+------------+-------+---------------+---------+---------+-------+------+----------+-------------+| 1 | DELETE | test01 | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL || 1 | SIMPLE | test02 | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | Using index |+----+-------------+--------+------------+-------+---------------+---------+---------+-------+------+----------+-------------+2 rows in set (0.01 sec) root@localhost [dbtest01]> desc delete test01.* from test01 join test02 on test01.a=test02.b and test02.id=350000;+----+-------------+--------+------------+-------+---------------+---------+---------+-------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+--------+------------+-------+---------------+---------+---------+-------+------+----------+-------+| 1 | SIMPLE | test02 | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL || 1 | DELETE | test01 | NULL | ref | a | a | 5 | const | 1 | 100.00 | NULL |+----+-------------+--------+------------+-------+---------------+---------+---------+-------+------+----------+-------+2 rows in set (0.00 sec)

參考文檔:

https://www.cnblogs.com/zhengyun_ustc/p/slowquery1.htmlhttps://www.jianshu.com/p/3989222f7084https://dev.mysql.com/doc/refman/5.6/en/subquery-optimization.html

到此這篇關于MySQL之select in 子查詢優化的實現的文章就介紹到這了,更多相關MySQL select in 子查詢優化內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: MySQL 數據庫
相關文章:
主站蜘蛛池模板: 欲妇荡岳丰满少妇岳91在线 | 手机看片久久久 | 午夜精品久久久久久久久久久久久 | 国产91丝袜在线播放0 | av在线天堂网| 99er久久 | 亚洲综合av在线在线播放 | 狠狠色丁香九九婷婷综合五月 | 2000xxx亚洲精品 | 97涩涩图| 亚洲精品欧美二区三区中文字幕 | 美美女高清毛片视频免费观看 | 国产老太婆免费交性大片 | 羞羞视频网址 | 免费看污片的网站 | 色猫咪免费人成网站在线观看 | 中文字幕久久熟女蜜桃 | 91精品国产高清一区二区三密臀 | www视频一区 | 中文有码在线观看 | a毛片视频| 成人福利视频 | 欧美日本国产 | 91蜜桃婷婷狠狠久久综合9色 | 久久成人国产精品免费软件 | 亚洲国产精品尤物yw在线观看 | 色欲综合久久中文字幕网 | 真实国产老熟女无套中出 | 午夜一二三区 | 日韩一二三区在线 | 国产欧美在线观看不卡 | 午夜国产 | 色婷婷久久一区二区三区麻豆 | 人人干狠狠干 | 99在线观看精品视频 | 精品久久久久久久久久国产潘金莲 | av手机在线免费观看 | 亚洲性猛交xxxx | 人人澡人人添人人爽一区二区 | 图片区偷拍区小说区 | 国产精品538一区二区在线 | 午夜av无码福利免费看网站 | 欧美日韩国产高清视频 | 精品卡一卡二卡3卡高清乱码 | 91精品久久久久久久久中文字幕 | 亚洲h视频 | 欧美三级韩国三级日本三斤在线观看 | 欧美成人精品网站 | 综合五月激情二区视频 | 国产精品国产三级国产专区51区 | 人人草人人做人人爱 | 精品国产粉嫩内射白浆内射双马尾 | 天天爱天天插 | 国产精品18hdxxxⅹ在线 | 国产高潮好爽受不了了夜色 | 中文字幕在线第一页 | 欧美精品久久久久久久免费 | 国产精品欧美久久久久久 | 青青草综合 | jizz美女| 国产黄色av | 中国xxxx性xxxx产国 | 久久精品国产99精品国产亚洲性色 | 粉色午夜视频 | 无码人妻一区二区三区精品视频 | 国产一区自拍视频 | 亚洲精品97久久中文字幕无码 | 日本欧美久久久久免费播放网 | 精品一区免费观看 | 日批免费在线观看 | 麻豆精品久久 | 天天干天天操天天拍 | 中国特级毛片 | 国精品无码一区二区三区左线 | 日韩第一页 | 老女人x88av导航 | 天堂国产女人av | 不卡视频在线 | 久久久久九九九 | 少妇视频| 秋霞影院午夜丰满少妇在线视频 | 玩弄放荡人妻一区二区三区 | 亚洲情在线 | 香蕉影院在线观看 | 国产高清黄色 | 欧美无吗 | 欧美精品一二 | 天天摸天天做天天爽 | 色综合综合 | 毛片.com| 欧美激情精品久久久久久蜜臀 | 国产乱码精品一区二区三区中文 | 国产人免费人成免费视频 | 综合久久精品 | 国产欧美日韩a片免费软件 九九久久精品无码专区 | 欧美婷婷久久五月精品三区 | 日韩a片无码毛片免费看 | 九九九九精品视频在线观看 | 久久精品91视频 | 无码熟妇人妻av在线网站 | 国产精品丝袜美腿一区二区三区 | 日日操网站 | 欧美黄视频在线观看 | 天堂精品一区 | 无码人妻一区二区三区在线 | 狠狠色图片| 97se亚洲国产综合自在线观看 | 日韩欧美成人免费观看 | 天天干在线观看 | 亚洲区欧美| 91黄色免费观看 | 日本人与黑人做爰视频 | 日韩精品a片一区二区三区妖精 | 久久综合88熟人妻 | 亚洲欧美男人天堂 | 丰满少妇免费做爰大片人 | 亚洲国产日本 | 国产又粗又深又猛又爽又在线观看 | 大学生久久香蕉国产线看观看 | 亚洲午夜精品一区二区 | 成人18视频免费69 | 无遮挡又色又刺激的女人视频 | 亚洲国产经典 | 一级片久久 | 国产乱对白刺激视频 | 免费看一区二区三区 | 成年网站在线观看 | 成人做爰9片免费看网站 | 小明看平台日韩综合45页 | 午夜视频欧美 | 免费毛片大肚孕妇孕交av | 精品一区二区三区免费毛片 | 免费在线观看av网址 | 天天做天天爱夜夜爽 | 中文字幕无码无码专区 | 国产精品黄在线观看 | www亚洲天堂 | 在线地址一地址二免费看 | 二级黄色大片 | 亚洲精品动漫成人3d无尽在线 | 柠檬福利第一导航在线 | 久久久www免费人成黑人精品 | 亚洲精品国产摄像头 | 欧美大片高清免费观看 | 国产午夜麻豆影院在线观看 | 日本高清视频www | 青青成人在线 | 天堂av播放 | 久久摸摸碰碰97网站 | 思热99re视热频这里只精品 | 97国产精品理伦影院 | 一本大道久久精品 | 日本精品一二三 | 日韩视频在线观看视频 | 日韩射| 国色天香精品一卡2卡3卡 | 久久99精品久久久久麻豆 | 性少妇中国内射xxxx狠干 | 真实的国产乱xxxx | 国产精品99久久久久人最新消息 | 国产成人涩涩涩视频在线观看 | 不卡视频在线观看免费 | 婷婷射精av这里只有精品 | 国产在线最新 | 国产精品亚洲综合 | 蜜桃视频一区二区三区四区开放时间 | 超碰啪啪| 麻豆观看 | 精品人妻午夜一区二区三区四区 | 日本人妻巨大乳挤奶水 | av免费福利 | 国产精品另类激情久久久免费 | 国内精品美女a∨在线播放 精品人妻一区二区三区浪潮在线 | 中文一区二区在线观看 | 天堂资源网在线 | aⅴ一区二区三区无卡无码 aⅴ在线免费观看 | 大桥未久亚洲精品久久久强制中出 | 国产乱码一区二区三区在线观看 | 国产国产人免费人成免费 | 日本人配人免费视频人 | 色婷婷激情av | 99国内精品| 国产又大又粗又爽 | www亚洲最大aⅴ成人天堂 | 与子敌伦刺激对白播放 | 亚洲人成人伊人成综合网无码 | 绯色av一区二区 | 男女男精品网站 | 中文字幕av一区二区三区谷原希美 | 日韩女同互慰一区二区 | 美女张开腿黄网站免费下载 | av资源站最新av | 污视频免费在线观看 | 久久婷婷精品一区二区三区日本 | 波多野吉衣一区二区 | 韩国av精华合集3小时 | fc2ppv在线观看 | 五月天爱爱 | 午夜伦视频 | 香蕉免费一区二区三区 | 日韩亚州 | 中文字幕高清在线免费播放 | 精品国产品香蕉在线 | 又湿又紧又大又爽a视频 | 国模冰莲自慰肥美胞极品人体图 | 91黄色片| www色五月| 色老头一区二区 | 国产盼盼私拍福利视频99 | 日韩在线视频中文字幕 | 色哟哟免费观看 | 亚洲国产精品国自产拍张津瑜 | 7m视频国产精品 | 中文字幕永久在线观看 | 奇米影视欧美 | 极品少妇xxxx精品少妇 | 亚洲欧美日韩精品久久亚洲区 | 污污视频网站免费在线观看 | 日韩精品无码视频一区二区蜜桃 | 在线观看国产一级片 | 久久久久av综合网成人 | 中文在线字幕 | 午夜免费观看 | 亚洲精品456在线播放第一页 | 日本一本在线 | 少妇太紧太爽又黄又硬又爽 | www国产在线视频 | 在线国产二区 | 精品国产粉嫩内射白浆内射双马尾 | 国产精品无套呻吟在线 | 久久a级片 | 极品销魂美女少妇尤物 | 亚洲网站免费观看 | 丁香啪啪综合成人亚洲小说 | 黄色一级一级 | 中文字幕乱码在线人视频 | 亚洲国产精品色拍网站 | 丰满少妇猛烈进入三区视频 | 日韩欧美一区二区三区在线 | 国产视频你懂的 | 黄色大片免费在线观看 | 国产婷婷综合在线视频 | 美女撒尿aaaaa级 | 精品无码一区二区三区爱欲九九 | 久久久精品456亚洲影院 | 久久久wwww | 九九热视频在线播放 | 摸大乳喷奶水www视频 | 黄瓜视频在线播放 | 特黄特色大片免费播放器下 | 中文字幕第12页 | 精品一区二区三区三区 | аⅴ资源天堂资源库在线 | 少妇太紧太爽又黄又硬又爽小说 | 影视av| 国产成人无码a区视频在线观看 | 国产乱码一二三区精品 | 97久久精品一区二区三区观看 | 国产女人爽到高潮免费视频 | 精品久久久久成人码免费动漫 | 免费无码成人av片在线在线播放 | 国产精品无码av一区二区三区 | 激情偷乱人成视频在线观看 | 亚洲男人在线天堂 | 日韩精品久久久久久久的张开腿让 | 婷婷久久综合九色综合绿巨人 | 欧美日韩黄色网 | 国产一级在线视频 | 亚洲精品美女久久久久99 | 成人激情四射网 | 欧美中文日韩 | 真实国产乱子伦对白视频 | 2022国产成人精品视频人 | 国产三级在线观看免费 | 国产精品乱码一区二区三区 | 成人含羞草tv免费入口 | av天堂亚洲国产av | 在线观看av的网站 | 香蕉网在线观看 | 两个黑人大战嫩白金发美女 | 日本色综合 | 天干天干天啪啪夜爽爽av网站 | 精品久久久久久中文字幕大豆网 | 又嫩又硬又黄又爽的视频 | 一级a爰片久久毛片 | 欧美理伦| 成人91免费版 | 免费黄色激情视频 | 最爽无遮挡行房视频 | 五月天综合激情 | 亚洲欧美日韩中文字幕一区二区三区 | 校园春色综合网 | av老司机在线观看 | 中文字幕天堂网 | 毛片在线观看视频 | 欧美性猛交ⅹxxx乱大交妖精 | www.欧美激情 | 手机成人av在线 | 人人爱人人澡 | 亚洲精品三区 | 久久在线免费观看 | 男女全黄一级高潮 | 欧美日韩日本国产 | 国产午夜激情 | 亚洲精品国产精品乱码不卡 | 亚洲日韩欧美一区二区三区 | 日日噜噜噜夜夜爽爽狠狠视频寻花 | 亚洲精品电影院 | 精品久久国产字幕高潮 | 男女做性无遮挡免费视频 | 无码乱人伦一区二区亚洲一 | 久久久久香蕉国产线看观看伊 | 男人的天堂日本 | 精品视频一二区 | 免费在线网站 | 菲律宾av| 国产美女免费 | 国产目拍亚洲精品区一区 | 久久精品视频一区二区三区 | www.国产在线视频 | 国产亚洲精品久久久网站好莱 | 日本欧美久久久免费播放网 | 激情爆乳一区二区三区 | 久久久99久久久国产自输拍 | 婷婷啪啪 | 天天摸天天做天天爽 | 69av在线视频| 青青青青青手机视频在线观看视频 | 凹凸成人精品亚洲精品密奴 | 国产极品粉嫩在线观看的软件 | 亚洲春色在线 | 国产精品人妖 | 少妇高潮喷潮久久久影院 | 亚洲欧美日韩精品成人 | 亚洲精品国产精品乱码不66 | 久久av高潮av无码av喷吹 | 亚洲欧美综合区自拍另类 | 性做久久久久久久免费看 | 爱情岛论坛自拍亚洲品质极速福利 | 免费在线一区二区 | 伊人狠狠色丁香婷婷综合 | 欧美在线成人免费 | 亚洲天堂日韩av | 青青草精品 | 五月天激情婷婷婷久久 | 久久99精品久久久久久动态图 | 在线xxxxx| 日本国产在线播放 | 国产一区视频网站 | 国产卡一卡二在线 | 久久精品国产最新地址 | 亚洲人成中文字幕在线观看 | 乱人伦中文视频在线观看 | 一二区在线观看 | 日本真人做爰免费视频120秒 | 国模一区二区三区白浆 | 国产午夜精品一区二区三区漫画 | 日韩精品a片一区二区三区妖精 | 毛片黄片免费看 | 国内毛片毛片毛片毛片毛片毛片 | 网站黄在线观看 | 免费精品久久久久久久一区二区 | 在线看片免费人成视频播 | 国产 欧美 日韩 一区 | 狠狠撸在线视频 | 精品无码一区二区三区的天堂 | 激情插插插 | 亚洲 欧美日韩 国产 中文 | 女邻居丰满的奶水 | 又粗又猛又爽又黄少妇视频网站 | 午夜无码片在线观看影院 | 亚洲专区一 | 毛片在线网站 | 成人三级无码视频在线观看 | 日韩一卡二卡三卡 | wwww日本60| 操操操操网 | 亚洲19禁大尺度做爰无遮挡 | 久久久久爽爽爽爽一区老女人 | 三级经典三级日本三级欧美 | 色爱情人网站 | 日韩欧美在线看 | 美女黄视频大全 | 成人av免费在线看 | 久久精品国产精品国产一区 | 亚洲成人三级 | 香港三级网站 | 国产精品无套呻吟在线 | 日韩综合色 | 亚洲第一免费播放区 | 97视频在线免费 | 91久久国产精品 | 91污网站| 欧美日韩中文在线观看 | 91丝袜放荡丝袜脚交 | 亚洲中文字幕无码永久在线 | 免费三级网站 | 欧美成人在线免费观看 | 黄色aaa网站 | 无码精品a∨在线观看中文 亚洲熟妇自偷自拍另欧美 无码少妇a片一区二区三区 | 精品久久久一二三区播放播放播放视频 | 久久免费视频观看 | 涩涩视频免费看 | 日日夜夜一区二区 | 久久久久久久久免费 | 九九热精品国产 | 一个人免费观看视频www中文 | 中国大陆一级毛片 | 欧美在线中文字幕 | 全黄性性激高免费视频 | 天天曰夜夜曰 | 欧美 日韩 国产 成人 在线观看 | 女主播户外勾搭啪啪 | 一本一生久久a久久精品综合蜜 | 国产97色在线 | 日韩 | 日韩亚洲制服丝袜中文字幕 | 成人激情视频在线 | 大杳蕉狼人伊人 | a级毛片,黄,免费观看 m | 偷拍青青草 | 亚洲一区欧美一区 | 亚洲欧美一 | 国产激情美女久久久久久吹潮 | 国产免费一区二区三区四在线播放 | 中文精品无码中文字幕无码专区 | 欧美成人午夜 | 国产精品视频全国免费观看 | 在线观看国产黄色 | av中文字幕网站 | 无码专区人妻系列日韩 | 日本少妇xx洗澡xxxx偷窥 | 毛片无码一区二区三区a片视频 | 亚洲蜜桃精久久久久久久久久久久 | 香蕉视频在线观看网址 | 新中文字幕| 人妻洗澡被强公日日澡电影 | 国产日韩欧美成人 | 久草在线观看资源 | 99啦porny丨首页入口 | 日本啪啪动态图 | 亚洲欧洲日产国码久在线 | 欧美一二三 | 4438xx亚洲最大五色丁香一 | 蜜桃一区二区三区 | 国产精品一区在线观看你懂的 | 亚洲天堂网一区 | 真人与拘做受免费视频 | 日本特级黄色录像 | 黄色福利视频 | 国产真实夫妇交换视频 | 国产呻吟对白刺激无套视频在线 | 国产精品福利视频推女郎 | av草逼| 亚洲自拍三区 | 男女晚上黄羞羞视频播放 | 无码精品视频一区二区三区 | 日韩va亚洲va欧美va久久 | 日韩精品无码视频一区二区蜜桃 | 黄色成人av | 少妇一级淫免费放 | 日韩精品资源 | 亚洲欧美日韩另类在线 | 俺也去五月婷婷 | 日本高清视频www在线观看 | 夜夜高潮夜夜爽夜夜爱爱 | 日韩一区二区精品视频 | a级黄色网址 | 日韩欧美中文字幕在线播放 | 强制中出し~大桥未久在线 | 酒店大战丝袜高跟鞋人妻 | 天天狠天天干 | 国产无遮挡免费视频 | 久久久久久午夜 | 亚洲色图另类图片 | 国产精品对白交换绿帽视频 | www.国产com| 亚洲精品国产一区二区在线观看 | 2019精品手机国产品在线 | 40一50一60老女人毛片 | 男女的隐私视频播放 | 黑人性猛爱xxxxx免费 | 湿女导航福利av导航 | 精品一区二区三区久久久 | 亚洲精品久久久久成人2007 | 久久久午夜精品福利内容 | 国产成人av一区 | 狠狠色综合久久婷婷色天使 | www国产成人免费观看视频深夜成人网 | 内射毛片内射国产夫妻 | 国产精品系列在线观看 | 午夜免费视频 | 国产精品免费久久久 | 成人自拍视频 | av无码精品一区二区三区宅噜噜 | 久久午夜无码鲁丝片 | 亚洲色欲久久久综合网东京热 | 日韩超碰| 国产色视频免费 | sm在线看| 亚洲乱人伦 | 欧洲成人精品 | 日日噜噜夜夜狠狠 | av怡红院一区二区三区 | 亚洲高清无吗 | 香蕉免费毛片视频 | 国产精品久久久久久久乖乖 | 亚洲国产精品久久久天堂不卡 | 男人和女人高潮做爰视频 | a级黄色片免费看 | 国产成人精品日本亚洲专区61 | 少妇高潮喷水久久久久久久久久 | 欧美一级片| 五月天丁香在线 | 爽爽淫人 | 色婷婷综合网 | 国产一级黄色 | 99久久精品午夜一区二区小说 | 亚洲精品中文字幕乱码三区91 | 亚洲第一天堂无码专区 | 日韩欧美一区二区三区免费观看 | 欧美黑人又粗又大又爽免费 | 国产女人高潮抽搐喷水免费视频 | 四虎影视www在线播放 | 专干老肥女人88av | 国产中文视频 | 久久久久在线视频 | 99久久精品一区二区三区 | 91深夜视频| 欧美做受69| 97碰碰碰免费公开在线视频 | 国产91在线播放九色快色 | 欧美在线不卡 | 99国产精品久久久久久久成人热 | 欧美成人精品在线 | 网站久久久| 中文字幕av一区二区三区人妻少妇 | 做爰丰满少妇1314 | 精品视频在线播放 | 中文字幕488页在线 中文字幕58页 | 中日韩精品视频在线观看 | 免费视频爱爱太爽了激情 | 亚洲成a人片 | 亚洲黄色片视频 | 中文字幕一区二区三区四区 | 永久免费网站看黄yyy45视频 | 成人欧美一区二区三区黑人孕妇 | 国产精品无码久久久久 | 国内精品国产三级国产 | 乱码精品国产成人观看免费 | 亚洲婷婷综合色高清在线 | 国产精品最新乱视频二区 | 高清免费视频日本 | 日韩激情网站 | 中国三级毛片 | 狠狠操一区二区 | 亚洲精品一二 | 少妇的性生话免费视频 | 亚洲精品麻豆 | 国产欧美日韩三区 | 日本高清有码视频 | 熟女人妻少妇精品视频 | 亚洲中文字幕在线观看 | 一本久久精品一区二区 | 日韩bbw| 亚洲国产综合精品2020 | 亚洲综合一区二区三区葵つかさ | 国产色婷婷精品综合在线手机播放 | 亚洲天堂手机在线 | 377p粉嫩大胆色噜噜噜 | 女人张开腿让男人桶个爽 | 97色伦图片97综合影院 | 1024香蕉视频| 你懂的网址在线播放 | 久久乐国产精品亚洲综合 | 国产精品视频二区不卡 | 性欧美高清 | 黄色的视频网站 | 成人h动漫精品一区二区器材 | 女同三级在线观看bd | 国产精品久久久久久久久久不蜜月 | 多p混交群体交乱在线观看 多男一女一级淫片免费播放口 | 婷婷丁香六月激情综合啪 | 国产黄色免费在线观看 | 国产在线aaa片一区二区99 | aaaaa级少妇高潮大片免费看 | 日本熟妇色xxxxx日本免费看 | 成人在线观看a | 五月婷婷一区二区三区 | 91麻豆成人精品国产免费网站 | 精品中文字幕在线观看 | 国产精品区二区三区日本 | 午夜福利92国语 | 爱情岛亚洲首页论坛小巨 | 怡红院男人天堂 | 国产福利视频一区二区 | 久久香蕉精品视频 | 床戏高潮呻吟声片段 | 欧美大片在线免费观看 | 无遮挡很爽很污很黄的网站 | 91精品国自产拍在线观看不卡 | 男人午夜影院 | 91精品中文字幕 | 国产交换配乱淫视频免费 | 亚洲精品国产a | 久久九九精品99国产精品 | 韩国一级淫片 | 国产乱码精品一区二区 | 欧美巨鞭大战丰满少妇 | 99久久精品免费看国产四区 | 丁香色婷婷国产精品视频 | 欧洲成人一区 | 久久久久毛片 | 色噜噜狠狠狠综合曰曰曰 | 亚洲中文字幕无码久久2017 | 性激烈的欧美三级 |