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

你不會還在用這8個錯誤的SQL寫法吧?

數據庫 SQL Server
程序員在設計數據模型以及編寫SQL語句時,要把算法的思想或意識帶進來。編寫復雜SQL語句要養成使用 WITH 語句的習慣。簡潔且思路清晰的SQL語句也能減小數據庫的負擔 。

1、LIMIT 語句

分頁查詢是最常用的場景之一,但也通常也是最容易出問題的地方。比如對于下面簡單的語句,一般 DBA 想到的辦法是在 type, name, create_time 字段上加組合索引。這樣條件排序都能有效的利用到索引,性能迅速提升。

  1. SELECT *  
  2. FROM operation  
  3. WHERE type = 'SQLStats'  
  4.  AND name = 'SlowLog'  
  5. ORDER BY create_time  
  6. LIMIT 1000, 10; 

好吧,可能90%以上的 DBA 解決該問題就到此為止。但當 LIMIT 子句變成 “LIMIT 1000000,10” 時,程序員仍然會抱怨:我只取10條記錄為什么還是慢?

要知道數據庫也并不知道第1000000條記錄從什么地方開始,即使有索引也需要從頭計算一次。出現這種性能問題,多數情形下是程序員偷懶了。

[[277445]]

在前端數據瀏覽翻頁,或者大數據分批導出等場景下,是可以將上一頁的最大值當成參數作為查詢條件的。SQL 重新設計如下:

  1. SELECT *  
  2. FROM operation  
  3. WHERE type = 'SQLStats'  
  4. AND name = 'SlowLog'  
  5. AND create_time > '2017-03-16 14:00:00'  
  6. ORDER BY create_time limit 10; 

在新設計下查詢時間基本固定,不會隨著數據量的增長而發生變化。

2、隱式轉換

SQL語句中查詢變量和字段定義類型不匹配是另一個常見的錯誤。比如下面的語句:

  1. mysql> explain extended SELECT *  
  2.  > FROM my_balance b  
  3.  > WHERE b.bpn = 14000000123  
  4.  > AND b.isverified IS NULL ; 
  5. mysql> show warnings; 
  6. | Warning | 1739 | Cannot use ref access on index 'bpn' due to type or collation conversion on field 'bpn' 

其中字段 bpn 的定義為 varchar(20),MySQL 的策略是將字符串轉換為數字之后再比較。函數作用于表字段,索引失效。

上述情況可能是應用程序框架自動填入的參數,而不是程序員的原意。現在應用框架很多很繁雜,使用方便的同時也小心它可能給自己挖坑。

3、關聯更新、刪除

雖然 MySQL5.6 引入了物化特性,但需要特別注意它目前僅僅針對查詢語句的優化。對于更新或刪除需要手工重寫成 JOIN。

比如下面 UPDATE 語句,MySQL 實際執行的是循環/嵌套子查詢(DEPENDENT SUBQUERY),其執行時間可想而知。

  1. UPDATE operation o  
  2. SET status = 'applying'  
  3. WHERE o.id IN (SELECT id  
  4.  FROM (SELECT o.id,  
  5.  o.status  
  6.  FROM operation o  
  7.  WHERE o.group = 123  
  8.  AND o.status NOT IN ( 'done' )  
  9.  ORDER BY o.parent,  
  10.  o.id  
  11.  LIMIT 1) t); 

執行計劃:

  1. +----+--------------------+-------+-------+---------------+---------+---------+-------+------+-----------------------------------------------------+ 
  2. | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | 
  3. +----+--------------------+-------+-------+---------------+---------+---------+-------+------+-----------------------------------------------------+ 
  4. | 1 | PRIMARY | o | index | | PRIMARY | 8 | | 24 | Using where; Using temporary | 
  5. | 2 | DEPENDENT SUBQUERY | | | | | | | | Impossible WHERE noticed after reading const tables | 
  6. | 3 | DERIVED | o | ref | idx_2,idx_5 | idx_5 | 8 | const | 1 | Using where; Using filesort | 
  7. +----+--------------------+-------+-------+---------------+---------+---------+-------+------+-----------------------------------------------------+ 

重寫為 JOIN 之后,子查詢的選擇模式從 DEPENDENT SUBQUERY 變成 DERIVED,執行速度大大加快,從7秒降低到2毫秒。

  1. UPDATE operation o  
  2.  JOIN (SELECT o.id,  
  3.  o.status  
  4.  FROM operation o  
  5.  WHERE o.group = 123  
  6.  AND o.status NOT IN ( 'done' )  
  7.  ORDER BY o.parent,  
  8.  o.id  
  9.  LIMIT 1) t 
  10.  ON o.id = t.id  
  11. SET status = 'applying'  

執行計劃簡化為:

  1. +----+-------------+-------+------+---------------+-------+---------+-------+------+-----------------------------------------------------+ 
  2. | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | 
  3. +----+-------------+-------+------+---------------+-------+---------+-------+------+-----------------------------------------------------+ 
  4. | 1 | PRIMARY | | | | | | | | Impossible WHERE noticed after reading const tables | 
  5. | 2 | DERIVED | o | ref | idx_2,idx_5 | idx_5 | 8 | const | 1 | Using where; Using filesort | 
  6. +----+-------------+-------+------+---------------+-------+---------+-------+------+-----------------------------------------------------+ 

4、混合排序

MySQL 不能利用索引進行混合排序。但在某些場景,還是有機會使用特殊方法提升性能的。

  1. SELECT *  
  2. FROM my_order o  
  3.  INNER JOIN my_appraise a ON a.orderid = o.id  
  4. ORDER BY a.is_reply ASC,  
  5.  a.appraise_time DESC  
  6. LIMIT 0, 20 

執行計劃顯示為全表掃描:

  1. +----+-------------+-------+--------+-------------+---------+---------+---------------+---------+-+ 
  2. | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra  
  3. +----+-------------+-------+--------+-------------+---------+---------+---------------+---------+-+ 
  4. | 1 | SIMPLE | a | ALL | idx_orderid | NULL | NULL | NULL | 1967647 | Using filesort | 
  5. | 1 | SIMPLE | o | eq_ref | PRIMARY | PRIMARY | 122 | a.orderid | 1 | NULL | 
  6. +----+-------------+-------+--------+---------+---------+---------+-----------------+---------+-+ 

由于 is_reply 只有0和1兩種狀態,我們按照下面的方法重寫后,執行時間從1.58秒降低到2毫秒。

  1. SELECT *  
  2. FROM ((SELECT * 
  3.  FROM my_order o  
  4.  INNER JOIN my_appraise a  
  5.  ON a.orderid = o.id  
  6.  AND is_reply = 0  
  7.  ORDER BY appraise_time DESC  
  8.  LIMIT 0, 20)  
  9.  UNION ALL  
  10.  (SELECT * 
  11.  FROM my_order o  
  12.  INNER JOIN my_appraise a  
  13.  ON a.orderid = o.id  
  14.  AND is_reply = 1  
  15.  ORDER BY appraise_time DESC  
  16.  LIMIT 0, 20)) t  
  17. ORDER BY is_reply ASC,  
  18.  appraisetime DESC  
  19. LIMIT 20; 

5、EXISTS語句

MySQL 對待 EXISTS 子句時,仍然采用嵌套子查詢的執行方式。如下面的 SQL 語句:

  1. SELECT * 
  2. FROM my_neighbor n  
  3.  LEFT JOIN my_neighbor_apply sra  
  4.  ON n.id = sra.neighbor_id  
  5.  AND sra.user_id = 'xxx'  
  6. WHERE n.topic_status < 4  
  7.  AND EXISTS(SELECT 1  
  8.  FROM message_info m  
  9.  WHERE n.id = m.neighbor_id  
  10.  AND m.inuser = 'xxx')  
  11.  AND n.topic_type <> 5  

執行計劃為:

  1. +----+--------------------+-------+------+-----+------------------------------------------+---------+-------+---------+ -----+ 
  2. | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | 
  3. +----+--------------------+-------+------+ -----+------------------------------------------+---------+-------+---------+ -----+ 
  4. | 1 | PRIMARY | n | ALL | | NULL | NULL | NULL | 1086041 | Using where | 
  5. | 1 | PRIMARY | sra | ref | | idx_user_id | 123 | const | 1 | Using where | 
  6. | 2 | DEPENDENT SUBQUERY | m | ref | | idx_message_info | 122 | const | 1 | Using index condition; Using where | 
  7. +----+--------------------+-------+------+ -----+------------------------------------------+---------+-------+---------+ -----+ 

去掉 exists 更改為 join,能夠避免嵌套子查詢,將執行時間從1.93秒降低為1毫秒。

  1. SELECT * 
  2. FROM my_neighbor n  
  3.  INNER JOIN message_info m  
  4.  ON n.id = m.neighbor_id  
  5.  AND m.inuser = 'xxx'  
  6.  LEFT JOIN my_neighbor_apply sra  
  7.  ON n.id = sra.neighbor_id  
  8.  AND sra.user_id = 'xxx'  
  9. WHERE n.topic_status < 4  
  10.  AND n.topic_type <> 5  

新的執行計劃:

  1. +----+-------------+-------+--------+ -----+------------------------------------------+---------+ -----+------+ -----+ 
  2. | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | 
  3. +----+-------------+-------+--------+ -----+------------------------------------------+---------+ -----+------+ -----+ 
  4. | 1 | SIMPLE | m | ref | | idx_message_info | 122 | const | 1 | Using index condition | 
  5. | 1 | SIMPLE | n | eq_ref | | PRIMARY | 122 | ighbor_id | 1 | Using where | 
  6. | 1 | SIMPLE | sra | ref | | idx_user_id | 123 | const | 1 | Using where | 
  7. +----+-------------+-------+--------+ -----+------------------------------------------+---------+ -----+------+ -----+ 

6、條件下推

外部查詢條件不能夠下推到復雜的視圖或子查詢的情況有:

  • 聚合子查詢;
  • 含有 LIMIT 的子查詢;
  • UNION 或 UNION ALL 子查詢;
  • 輸出字段中的子查詢;

如下面的語句,從執行計劃可以看出其條件作用于聚合子查詢之后:

  1. SELECT *  
  2. FROM (SELECT target,  
  3.  Count(*)  
  4.  FROM operation  
  5.  GROUP BY target) t  
  6. WHERE target = 'rm-xxxx'  
  1. +----+-------------+------------+-------+---------------+-------------+---------+-------+------+-------------+ 
  2. | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | 
  3. +----+-------------+------------+-------+---------------+-------------+---------+-------+------+-------------+ 
  4. | 1 | PRIMARY | <derived2> | ref | <auto_key0> | <auto_key0> | 514 | const | 2 | Using where | 
  5. | 2 | DERIVED | operation | index | idx_4 | idx_4 | 519 | NULL | 20 | Using index | 
  6. +----+-------------+------------+-------+---------------+-------------+---------+-------+------+-------------+ 

確定從語義上查詢條件可以直接下推后,重寫如下:

  1. SELECT target,  
  2.  Count(*)  
  3. FROM operation  
  4. WHERE target = 'rm-xxxx'  
  5. GROUP BY target 

執行計劃變為:

  1. +----+-------------+-----------+------+---------------+-------+---------+-------+------+--------------------+ 
  2. | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | 
  3. +----+-------------+-----------+------+---------------+-------+---------+-------+------+--------------------+ 
  4. | 1 | SIMPLE | operation | ref | idx_4 | idx_4 | 514 | const | 1 | Using where; Using index | 
  5. +----+-------------+-----------+------+---------------+-------+---------+-------+------+--------------------+ 

7、提前縮小范圍

先上初始 SQL 語句:

  1. SELECT *  
  2. FROM my_order o  
  3.  LEFT JOIN my_userinfo u  
  4.  ON o.uid = u.uid 
  5.  LEFT JOIN my_productinfo p  
  6.  ON o.pid = p.pid  
  7. WHERE ( o.display = 0 )  
  8.  AND ( o.ostaus = 1 )  
  9. ORDER BY o.selltime DESC  
  10. LIMIT 0, 15  

該SQL語句原意是:先做一系列的左連接,然后排序取前15條記錄。從執行計劃也可以看出,最后一步估算排序記錄數為90萬,時間消耗為12秒。

  1. +----+-------------+-------+--------+---------------+---------+---------+-----------------+--------+----------------------------------------------------+ 
  2. | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | 
  3. +----+-------------+-------+--------+---------------+---------+---------+-----------------+--------+----------------------------------------------------+ 
  4. | 1 | SIMPLE | o | ALL | NULL | NULL | NULL | NULL | 909119 | Using where; Using temporary; Using filesort | 
  5. | 1 | SIMPLE | u | eq_ref | PRIMARY | PRIMARY | 4 | o.uid | 1 | NULL | 
  6. | 1 | SIMPLE | p | ALL | PRIMARY | NULL | NULL | NULL | 6 | Using where; Using join buffer (Block Nested Loop) | 
  7. +----+-------------+-------+--------+---------------+---------+---------+-----------------+--------+----------------------------------------------------+ 

由于最后 WHERE 條件以及排序均針對最左主表,因此可以先對 my_order 排序提前縮小數據量再做左連接。SQL 重寫后如下,執行時間縮小為1毫秒左右。

  1. SELECT *  
  2. FROM ( 
  3. SELECT *  
  4. FROM my_order o  
  5. WHERE ( o.display = 0 )  
  6.  AND ( o.ostaus = 1 )  
  7. ORDER BY o.selltime DESC  
  8. LIMIT 0, 15 
  9. ) o  
  10.  LEFT JOIN my_userinfo u  
  11.  ON o.uid = u.uid  
  12.  LEFT JOIN my_productinfo p  
  13.  ON o.pid = p.pid  
  14. ORDER BY o.selltime DESC 
  15. limit 0, 15 

再檢查執行計劃:子查詢物化后(select_type=DERIVED)參與 JOIN。雖然估算行掃描仍然為90萬,但是利用了索引以及 LIMIT 子句后,實際執行時間變得很小。

  1. +----+-------------+------------+--------+---------------+---------+---------+-------+--------+----------------------------------------------------+ 
  2. | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | 
  3. +----+-------------+------------+--------+---------------+---------+---------+-------+--------+----------------------------------------------------+ 
  4. | 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 15 | Using temporary; Using filesort | 
  5. | 1 | PRIMARY | u | eq_ref | PRIMARY | PRIMARY | 4 | o.uid | 1 | NULL | 
  6. | 1 | PRIMARY | p | ALL | PRIMARY | NULL | NULL | NULL | 6 | Using where; Using join buffer (Block Nested Loop) | 
  7. | 2 | DERIVED | o | index | NULL | idx_1 | 5 | NULL | 909112 | Using where | 
  8. +----+-------------+------------+--------+---------------+---------+---------+-------+--------+----------------------------------------------------+ 

8、中間結果集下推

再來看下面這個已經初步優化過的例子(左連接中的主表優先作用查詢條件):

  1. SELECT a.*,  
  2.  c.allocated  
  3. FROM (  
  4.  SELECT resourceid  
  5.  FROM my_distribute d  
  6.  WHERE isdelete = 0  
  7.  AND cusmanagercode = '1234567'  
  8.  ORDER BY salecode limit 20) a  
  9. LEFT JOIN  
  10.  (  
  11.  SELECT resourcesid, sum(ifnull(allocation, 0) * 12345) allocated  
  12.  FROM my_resources  
  13.  GROUP BY resourcesid) c  
  14. ON a.resourceid = c.resourcesid 

那么該語句還存在其它問題嗎?不難看出子查詢 c 是全表聚合查詢,在表數量特別大的情況下會導致整個語句的性能下降。

其實對于子查詢 c,左連接最后結果集只關心能和主表 resourceid 能匹配的數據。因此我們可以重寫語句如下,執行時間從原來的2秒下降到2毫秒。

  1. SELECT a.*,  
  2.  c.allocated  
  3. FROM (  
  4.  SELECT resourceid  
  5.  FROM my_distribute d  
  6.  WHERE isdelete = 0  
  7.  AND cusmanagercode = '1234567'  
  8.  ORDER BY salecode limit 20) a  
  9. LEFT JOIN  
  10.  (  
  11.  SELECT resourcesid, sum(ifnull(allocation, 0) * 12345) allocated  
  12.  FROM my_resources r,  
  13.  (  
  14.  SELECT resourceid  
  15.  FROM my_distribute d  
  16.  WHERE isdelete = 0  
  17.  AND cusmanagercode = '1234567'  
  18.  ORDER BY salecode limit 20) a  
  19.  WHERE r.resourcesid = a.resourcesid  
  20.  GROUP BY resourcesid) c  
  21. ON a.resourceid = c.resourcesid 

但是子查詢 a 在我們的SQL語句中出現了多次。這種寫法不僅存在額外的開銷,還使得整個語句顯的繁雜。使用 WITH 語句再次重寫:

  1. WITH a AS  
  2. (  
  3.  SELECT resourceid  
  4.  FROM my_distribute d  
  5.  WHERE isdelete = 0  
  6.  AND cusmanagercode = '1234567'  
  7.  ORDER BY salecode limit 20) 
  8. SELECT a.*,  
  9.  c.allocated  
  10. FROM a  
  11. LEFT JOIN  
  12.  (  
  13.  SELECT resourcesid, sum(ifnull(allocation, 0) * 12345) allocated  
  14.  FROM my_resources r,  
  15.  a  
  16.  WHERE r.resourcesid = a.resourcesid  
  17.  GROUP BY resourcesid) c  
  18. ON a.resourceid = c.resourcesid 

總結

數據庫編譯器產生執行計劃,決定著SQL的實際執行方式。但是編譯器只是盡力服務,所有數據庫的編譯器都不是盡善盡美的。

上述提到的多數場景,在其它數據庫中也存在性能問題。了解數據庫編譯器的特性,才能避規其短處,寫出高性能的SQL語句。

程序員在設計數據模型以及編寫SQL語句時,要把算法的思想或意識帶進來。

編寫復雜SQL語句要養成使用 WITH 語句的習慣。簡潔且思路清晰的SQL語句也能減小數據庫的負擔 。

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2021-12-06 17:44:56

MHAMySQL高可用

2025-10-28 01:45:00

setTimeouAPI日志

2022-10-28 09:51:18

PrintfLinux開發

2012-07-19 10:03:32

2023-11-02 08:25:25

組件ReactUI

2024-11-12 16:28:34

2024-10-28 10:55:50

Jedis組件客戶端

2023-02-27 08:53:54

JedislettuceRedis

2022-10-26 08:16:58

jar包依賴關系Maven

2020-12-07 05:50:54

print()Python代碼

2021-04-21 10:36:47

StringBuildJava8StringJoine

2021-06-10 10:33:22

Jenkins持續集成工具自動化

2020-03-04 14:05:35

戴爾

2025-06-11 08:10:00

JavaScripAPI代碼

2024-04-28 10:28:11

lodashnum排序

2025-04-02 08:47:23

DOM文檔結構API

2025-07-29 08:05:37

2023-01-05 07:55:59

Zookeeper服務注冊

2020-04-25 19:46:13

CSS開發工具前端

2025-02-19 12:40:33

JWT
點贊
收藏

51CTO技術棧公眾號

国产欧美视频在线| eeuss影院在线观看| 在线日韩中文| 国产亚洲一区二区在线| 亚洲欧美日韩一二三区| 三级在线观看视频| 中文字幕一区二区三区四区| 丁香婷婷久久久综合精品国产| 国产精品免费无码| 免费欧美网站| 色菇凉天天综合网| 欧洲成人一区二区| 国产成人三级一区二区在线观看一| 99久久夜色精品国产亚洲1000部| 精品视频1区2区3区| 亚洲中文字幕无码一区二区三区| 超碰在线观看av| 丝袜美腿亚洲综合| 久久久久久国产免费| 国产成人av无码精品| 欧美大片网站| 日韩欧美在线第一页| 久久久99精品视频| 日本www在线| 久久久夜色精品亚洲| av资源站久久亚洲| 亚洲视频免费播放| 欧美aⅴ99久久黑人专区| 亚洲视屏在线播放| 日韩精品一区二区三区高清免费| 制服丝袜专区在线| 伊人婷婷欧美激情| 一区二区三区四区视频在线| 你懂的视频在线免费| 日本亚洲最大的色成网站www| 亚洲天堂免费视频| 岛国精品资源网站| 日韩亚洲精品在线观看| 欧美日韩国产系列| 一区二区三区国产免费| 自拍视频在线看| 午夜国产精品一区| 正在播放国产精品| avav免费在线观看| 日本一区二区三区在线观看| 欧美精品二区三区四区免费看视频 | 成人小视频在线| 国产在线久久久| 真实新婚偷拍xxxxx| 国产一区91| 57pao成人国产永久免费| 日韩av在线天堂| 在线看片一区| 俺也去精品视频在线观看| 麻豆av免费看| 风间由美性色一区二区三区四区 | 一级一级黄色片| 亚洲一区视频| 欧美中文在线观看| 五月婷婷激情视频| 青青草国产精品亚洲专区无| 欧美成年人视频网站| 日本黄色的视频| 亚洲精品毛片| 欧美另类z0zxhd电影| 日韩av自拍偷拍| 欧美舌奴丨vk视频| 一区av在线播放| 亚洲v日韩v欧美v综合| av福利在线播放| 18涩涩午夜精品.www| 91嫩草国产丨精品入口麻豆| 日韩三级电影视频| 精品日韩中文字幕| 亚洲国产精品无码观看久久| 黄色软件视频在线观看| 一本高清dvd不卡在线观看| 老子影院午夜伦不卡大全| caoporn视频在线| 色噜噜狠狠色综合欧洲selulu| 福利在线一区二区| 中日韩脚交footjobhd| 精品视频在线看| 爱情岛论坛成人| 手机看片久久久| 日韩影片中文字幕| 亚洲精品第一国产综合野| 国产日韩av网站| 影音成人av| 欧美xingq一区二区| 大又大又粗又硬又爽少妇毛片| 风间由美中文字幕在线看视频国产欧美| 欧美日本一区二区| 最新中文字幕日本| 天堂99x99es久久精品免费| 最新国产精品亚洲| 日本三级视频在线| 99国产精品久久久久久久| 久久国产精品久久久久久| 中文字幕在线观看免费视频| 日韩电影在线免费观看| 99国产超薄肉色丝袜交足的后果| 99热这里只有精品99| 99视频超级精品| 国产精品h视频| 天堂中文av在线资源库| 5566中文字幕一区二区电影| 美女久久久久久久久久| 伊人久久大香线蕉综合四虎小说 | 亚洲一区中文字幕| 欧洲综合视频| 亚洲精品一二三| 成人亚洲视频在线观看| 大桥未久女教师av一区二区| 亚洲国产日韩精品在线| 黄色网址在线视频| 99tv成人| 国产精品成av人在线视午夜片| 伊人网视频在线| 久久精品噜噜噜成人av农村| 免费在线成人av电影| 男人添女人下部高潮视频在线观看 | 久久久精品五月天| 国产精品国产三级国产aⅴ9色| 中文字幕精品在线观看| 97久久精品人人爽人人爽蜜臀| 蜜桃视频成人| 黄页网站在线观看免费| 日韩一区二区三区观看| 欧美精品欧美极品欧美激情| 欧美三级不卡| 亚洲一区二区三区视频| 日夜干在线视频| 午夜精品视频一区| 欧美丰满熟妇bbb久久久| 中文字幕一区二区三区欧美日韩| 久久久久亚洲精品国产| 亚洲黄色激情视频| 久久99日本精品| 一区二区成人国产精品 | 久久porn| 久久频这里精品99香蕉| 丰满肉肉bbwwbbww| 亚洲一区二区三区三| 日韩欧美xxxx| 成人污污视频| 大量国产精品视频| jlzzjlzzjlzz亚洲人| 亚洲私人黄色宅男| 国产精品动漫网站| 国产一区二区三区四区二区| 九九热这里只有精品免费看| 国产成人一级片| 91美女视频网站| 国内外成人免费激情视频| 亚洲免费观看高清完整版在线观| 九九热r在线视频精品| 99er热精品视频| 亚洲综合视频在线观看| 手机看片福利日韩| 久久视频在线| 亚洲自拍高清视频网站| 国产一线二线在线观看| 日韩激情在线视频| 超碰在线观看91| 亚洲图片你懂的| 国产老头和老头xxxx×| 亚洲精品护士| 日韩免费av一区二区三区| 九九久久国产| 欧美多人爱爱视频网站| 亚洲天堂自拍偷拍| 最新成人av在线| 性欧美18—19sex性高清| 性欧美videos另类喷潮| 午夜精品短视频| 亚洲视频三区| 国产精品v日韩精品| av在线网址观看| 国产视频精品一区二区三区| 中文字幕乱伦视频| 一区二区三区91| 中文字幕国产综合| 国内精品国产成人| av黄色在线网站| 一本一本久久a久久综合精品| 国产精品电影观看| 精品美女视频在线观看免费软件 | 欧美成人免费一级人片100| 国产情侣呻吟对白高潮| 亚洲男同1069视频| aa一级黄色片| 国产一区激情在线| 欧美a v在线播放| 999久久久亚洲| 美乳视频一区二区| 另类视频一区二区三区| 日本精品久久久久影院| 久久电影视频| 精品国一区二区三区| 国语对白一区二区| 中文字幕中文字幕在线一区| 亚洲国产第一区| 精品亚洲国内自在自线福利| 狠狠97人人婷婷五月| 91精品啪在线观看国产18| 亚洲自拍在线观看| 欧洲av一区二区| 欧美激情欧美激情在线五月| 2019中文字幕在线视频| 日韩精品免费电影| 亚洲av无码乱码国产精品| 亚洲成人av一区二区| 999精品视频在线观看播放| 久久精品视频一区| 国产极品一区二区| 国产传媒一区在线| 日本国产一级片| 日产欧产美韩系列久久99| 一区二区三区四区欧美日韩| 国产99久久久国产精品成人免费| 国产精品视频成人| 毛片在线导航| 久久精品电影网| av电影在线观看| 亚洲午夜色婷婷在线| 天天舔天天干天天操| 日韩欧美一二三区| 国产男女裸体做爰爽爽| 激情久久av一区av二区av三区| 亚洲a v网站| 国产在线精品一区二区不卡了| 岛国大片在线播放| 国产综合婷婷| 欧美大片免费播放| 久久精品影视| 性欧美18一19内谢| 99精品在线免费在线观看| 亚洲国产精品一区二区第四页av| 在线综合色站| 国产精品二区三区| 精品国产18久久久久久洗澡| 国产精品一区二区av| 大桥未久女教师av一区二区| 国产精品久久久一区二区三区| 日韩欧美一区二区三区免费观看| 欧美xxxx做受欧美.88| 成人午夜在线观看视频| 最近2019中文字幕mv免费看 | 国产亚洲精品美女久久久| 精品人妻一区二区三区日产乱码| 色嗨嗨av一区二区三区| 在线视频精品免费| 欧美日韩综合在线免费观看| 中文字幕有码视频| 欧美精品久久99久久在免费线| 欧美h在线观看| 91国产免费看| 亚洲天堂中文在线| 色老汉av一区二区三区| 免费在线观看av的网站| 欧美日本高清视频在线观看| 99久久亚洲精品日本无码| 91国偷自产一区二区三区观看 | 女~淫辱の触手3d动漫| 久久久久久亚洲综合影院红桃| 人妻av一区二区三区| av高清不卡在线| 中文字幕在线1| 亚洲欧洲一区二区在线播放| 欧美人妻一区二区| 高跟丝袜欧美一区| 在线观看免费黄色小视频| 日韩一区二区三区免费看 | 亚洲最新在线视频| 亚洲 国产 欧美 日韩| 日韩精品一区在线观看| 欧美熟女一区二区| 亚洲网站在线播放| 影音先锋中文在线视频| 26uuu另类亚洲欧美日本一| 97超碰免费在线| 国产精品视频yy9099| 精品三区视频| 国产精品午夜视频| 一区二区三区四区高清视频 | 91亚洲精华国产精华精华液| 一级肉体全黄裸片| 亚洲精品菠萝久久久久久久| 国产精品人人人人| 9191成人精品久久| 国产美女精品视频国产| 亚洲国产古装精品网站| 1pondo在线播放免费| 国产91精品不卡视频| 一区二区三区| 日本在线观看一区二区三区| 欧美日韩性在线观看| 亚洲巨乳在线观看| 在线成人h网| 国产成人a亚洲精v品无码| 午夜在线a亚洲v天堂网2018| 成年网站在线免费观看| 国产精品一区二区黑丝| www久久久久久久| 精品日本高清在线播放| 天堂网一区二区| 在线播放欧美女士性生活| 飘雪影院手机免费高清版在线观看 | 精品国产乱码| 高清欧美精品xxxxx| 国产自产高清不卡| 国产1区2区在线观看| 精品女同一区二区三区在线播放| 欧美日韩一级黄色片| 欧美成人免费网站| 巨大荫蒂视频欧美大片| 欧美日本中文字幕| 26uuu亚洲电影| 国产一区喷水| 午夜国产精品视频| 日韩va在线观看| 国产精品对白交换视频| 波多野结衣电车| 亚洲免费视频一区二区| 狠狠操一区二区三区| 国产精品永久免费观看| 国产91久久精品一区二区| 国精产品一区一区三区视频| 国产成人av电影| 黄色一级视频在线观看| 日韩一级免费一区| 超鹏97在线| 91嫩草国产在线观看| 欧美不卡高清| 少妇愉情理伦片bd| 亚洲精品五月天| 99久久精品日本一区二区免费| 亚洲精品美女久久久久| 888av在线视频| 国产主播一区二区三区四区| 在线日韩电影| 黄色a一级视频| 日韩欧美在线视频观看| 99精品国产99久久久久久97| 精品亚洲国产成av人片传媒| 天堂在线中文网官网| 麻豆精品传媒视频| 免费看黄裸体一级大秀欧美| 亚洲最大成人网站| 在线视频国内自拍亚洲视频| 黄色av网址在线免费观看| 国产精品无av码在线观看| 91精品一区二区三区综合在线爱| 黄色片视频在线免费观看| 久久影音资源网| 少妇无套内谢久久久久| 色多多国产成人永久免费网站 | 啪一啪鲁一鲁2019在线视频| 国产日韩欧美中文在线| 日韩精品久久久毛片一区二区| 亚洲人人精品| 欧美熟妇一区二区| 欧美三级日韩在线| 超碰在线网址| 精品视频一区二区| 尤物精品在线| 国产精品久久久久无码av色戒| 亚洲成年人网站在线观看| 香蕉视频黄色片| 国产精品青青在线观看爽香蕉| 国产成人手机高清在线观看网站| 久久国产精品视频在线观看| 久久一区二区三区四区| 这里只有精品999| 久久99国产精品久久久久久久久| **国产精品| 国产手机免费视频| 国产精品午夜在线| 北条麻妃一二三区| 欧美综合一区第一页| 日韩欧美中文字幕电影| 日本 片 成人 在线| 亚洲一区二区三区四区在线免费观看| 国产精品一区二区人人爽| 在线视频中文亚洲| av在线不卡精品| 亚洲国产精品综合| 成人国产精品免费观看动漫 | 色老综合老女人久久久| 精品欧美色视频网站在线观看| 91精品视频一区| 国产欧美亚洲一区| 永久免费看片直接| 日韩欧美国产一区二区在线播放| 少妇视频在线| 视频一区免费观看| 成人高清视频在线| 一区二区美女视频| 热99精品里视频精品|