精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

久久久精品视频免费| 一级黄色片在线免费观看| 亚洲欧美日韩动漫| 免费观看在线色综合| 欧美成人四级hd版| 9.1成人看片| 色999久久久精品人人澡69| 亚洲国产综合91精品麻豆| 日本一区精品| 懂色av一区二区三区四区| 日韩精品电影一区亚洲| 色中色综合影院手机版在线观看| 黄色av网址在线观看| 全球中文成人在线| 日韩欧美成人区| 国产在线视频综合| av在线1区2区| 91色乱码一区二区三区| 97超碰在线播放| 在线观看中文字幕码| 久久成人在线| 久久久久国产一区二区三区| 欧美性生给视频| 亚洲自拍都市欧美小说| 精品区一区二区| 亚洲一区二区在线视频观看| 国模套图日韩精品一区二区| 亚洲国产综合在线| 天堂а√在线中文在线| 瑟瑟视频在线| 国产视频在线观看一区二区三区| 国产原创精品| 国产综合视频在线| 国产成人免费视频一区| 95av在线视频| 国产一区二区三区四区视频 | 麻豆md0077饥渴少妇| 黄上黄在线观看| 久久久美女艺术照精彩视频福利播放| 成人一区二区三区四区| 性欧美videos另类hd| 国产在线麻豆精品观看| 国产精品永久免费| 最近中文字幕在线视频| 日韩高清国产一区在线| 日本精品视频在线观看| 香蕉影院在线观看| 国产精品日韩精品欧美精品| 国内成人精品视频| 日韩欧美a级片| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲国产精品成人| 久久久精品国产一区二区| 免费成人深夜蜜桃视频| 欧美激情国产在线| 色偷偷噜噜噜亚洲男人的天堂 | 亚洲天天做日日做天天谢日日欢| 色噜噜一区二区| av在线免费一区| 欧美—级在线免费片| 亚洲国产精品一区二区第四页av | 国产欧美一区二区三区沐欲| 日本不卡高清视频一区| 国产色a在线| 国产欧美一区二区三区网站| 亚洲永久激情精品| 免费**毛片在线| 亚洲精选一二三| 可以看毛片的网址| 在线看片福利| 色婷婷综合久色| 999在线免费视频| 美女视频一区| 日韩免费视频线观看| 中国男女全黄大片| 日韩高清成人在线| 中文字幕不卡在线视频极品| 欧美做爰啪啪xxxⅹ性| 久久久久亚洲| 性欧美长视频免费观看不卡| 国产午夜性春猛交ⅹxxx| 日韩av午夜在线观看| 91久久精品国产| 免费av一级片| 久久久久久亚洲综合| 亚洲色图自拍| 男女羞羞视频在线观看| 一本到一区二区三区| 国产欧美激情视频| 免费萌白酱国产一区二区三区| 亚洲免费av网址| 亚洲区一区二区三| 亚洲伦理一区| 成人国产精品久久久| 亚洲精品久久久久久动漫器材一区| 99re视频这里只有精品| 亚洲国产精品123| 91福利区在线观看| 欧美男人的天堂一二区| 欧美双性人妖o0| 久久中文亚洲字幕| 1769国产精品| 99riav国产| 久久久久久一二三区| 国产人妻人伦精品| 电影久久久久久| 亚洲成av人乱码色午夜| 国产在线免费av| 亚洲精品极品| 91在线观看免费观看| 日本不卡免费播放| 亚洲夂夂婷婷色拍ww47| 污网站免费在线| 日韩电影不卡一区| 色综合天天狠天天透天天伊人| 国模私拍一区二区| 99热这里都是精品| 日韩在线视频在线| 久久亚洲国产精品尤物| 亚洲男人第一网站| 日本熟妇一区二区| 国产精品亚洲人在线观看| 日韩欧美视频第二区| yellow在线观看网址| 欧美色图12p| 在线免费观看麻豆| 亚洲乱码久久| 国产高清精品一区二区三区| 麻豆视频网站在线观看| 91黄色小视频| www.中文字幕av| 午夜在线a亚洲v天堂网2018| 成人看片在线| 99热国产在线| 欧美精品亚洲二区| 最新日韩免费视频| 青青国产91久久久久久| 日韩伦理一区二区三区av在线| 啊啊啊久久久| 亚洲精品美女在线观看| 久久国产在线视频| 国产·精品毛片| 99在线观看视频免费| 欧美电影在线观看一区| 久久国产加勒比精品无码| 91亚洲国产成人精品一区| 久久精品日产第一区二区三区高清版 | 国产一级久久久久毛片精品| 亚洲欧美日本国产专区一区| 久久精品午夜一区二区福利| 91九色美女在线视频| 亚洲精品在线一区二区| 国产真实夫妇交换视频| www.久久久久久久久| 免费拍拍拍网站| 久久香蕉精品香蕉| 欧美亚洲日本黄色| 好男人免费精品视频| 色94色欧美sute亚洲线路二| 亚洲黄色免费视频| 美女视频免费一区| 国产一级片91| 鲁大师精品99久久久| 91禁外国网站| 美女毛片在线看| 欧美在线观看视频在线| 久久免费手机视频| 国产经典欧美精品| 免费在线观看视频a| 免费观看久久av| 国产精品午夜视频| 直接在线观看的三级网址| 精品欧美一区二区三区精品久久 | 欧美二区在线观看| 欧美日韩在线视频免费| 成人免费av资源| 色婷婷综合久久久久中文字幕| 欧美三级情趣内衣| 亚洲自拍在线观看| 国产99在线观看| 中文字幕av一区二区三区谷原希美| 国产免费高清视频| 亚洲成人一区二区| 成人在线手机视频| 国产精品夜夜嗨| www.四虎成人| 亚洲精品国产偷自在线观看| 好吊色欧美一区二区三区| 欧美精选视频一区二区| 欧美国产第一页| 久久综合精品国产一区二区三区 | 国产成人亚洲欧洲在线| 久久久久久电影| 亚洲精品在线网址| 亚洲一区中文| 韩国黄色一级大片| 色天天色综合| 91久久中文字幕| 最新日韩精品| 美女av一区二区三区| 青青青草原在线| 7777女厕盗摄久久久| 国产一级精品视频| 亚洲天堂成人在线观看| 国产三级国产精品| 国产福利精品导航| 国产性生交xxxxx免费| 精品福利电影| 亚洲欧美日产图| 要久久电视剧全集免费| 2019国产精品视频| 99只有精品| 51久久精品夜色国产麻豆| 国产在线69| 在线电影av不卡网址| 色视频在线观看| 精品日韩成人av| 国产精品一区二区av白丝下载| 色婷婷久久久亚洲一区二区三区| 久久一区二区三| 中文字幕永久在线不卡| 国产高潮呻吟久久| 99久久99久久精品国产片果冻| 婷婷激情综合五月天| 欧美a级理论片| 日本在线观看a| 91久久亚洲| 黄色一级大片免费| 亚洲精品成人无限看| 一区二区三区四区视频在线 | 国产91丝袜在线观看| 免费精品99久久国产综合精品应用| 久久久久久9| 欧美精品色婷婷五月综合| 在线播放不卡| 无码人妻精品一区二区蜜桃网站| 国产精品99久久精品| 亚洲精品国产精品国自产| 国产欧美日韩视频在线| 蜜桃999成人看片在线观看| 超碰成人免费| 国产日韩亚洲精品| 国产精品久久久网站| 国产98在线|日韩| 999国产精品一区| 国产精品对白一区二区三区| 国产一区二区三区视频在线| 成人激情综合网| 欧美.com| 国产精品对白刺激久久久| 成人av影音| 国产一区在线观| 久久最新网址| 亚洲国产精品一区二区第一页| 欧美一区2区| 亚洲一区bb| 中国成人一区| 欧美极品少妇无套实战| 黄色成人精品网站| 999在线观看视频| 国产人成精品一区二区三| 黄色动漫网站入口| 久久久国产精品一区二区中文| av网址在线观看免费| 日本亚洲三级在线| 亚洲欧美手机在线| 国产成人精品免费看| 99精品一区二区三区无码吞精| 91在线国产福利| 亚洲无人区码一码二码三码的含义| 国产精品久久三| 五月婷婷一区二区| 亚洲一区二区视频| 99免费在线观看| 狠狠色香婷婷久久亚洲精品| 波多野结衣视频在线观看| 欧美日韩国产欧美日美国产精品| 国产精品爽爽久久| 亚洲国产精久久久久久久| 国产中文字幕在线观看| 久久精品一区中文字幕| 欧美性猛片xxxxx免费中国 | www.xxx麻豆| 翔田千里一区二区| 超碰人人草人人| 99riav一区二区三区| 婷婷综合在线视频| 午夜精品123| 亚洲综合五月天婷婷丁香| 亚洲成人激情图| av中文字幕在线| 性色av一区二区咪爱| 日本成人一区二区| 精品无人区一区二区三区竹菊| 久久精品国产99久久| 国产免费黄色小视频| 麻豆精品精品国产自在97香蕉| 性高潮免费视频| 国产精品乱人伦| 中文字幕亚洲精品一区| 91精品国产欧美日韩| 可以在线观看的黄色| 欧美高清性猛交| 福利一区视频| 久久精品中文字幕一区二区三区| 爽成人777777婷婷| 免费在线观看亚洲视频| 国产一区二区在线免费观看| 中文字幕 自拍| 亚洲国产成人av网| 97人妻精品一区二区三区视频| 亚洲精品在线视频| 免费电影网站在线视频观看福利| 国产精品久久久久久一区二区 | 亚洲欧洲午夜一线一品| 青春草在线免费视频| 国产一区红桃视频| 国产一区不卡| 播放灌醉水嫩大学生国内精品| 国产在线播放一区| 亚洲精品国产精品国自| 色综合久久中文综合久久牛| 亚洲精选一区二区三区| 久久久精品一区| 国产亚洲精彩久久| 神马影院一区二区三区| 久久久久久色| 艳妇乳肉亭妇荡乳av| 亚洲一区视频在线观看视频| 97人妻一区二区精品免费视频| 亚洲性线免费观看视频成熟| 韩国成人漫画| 欧美12av| 日韩中文欧美在线| 精品少妇一区二区三区免费观| 午夜精品福利一区二区蜜股av| 亚洲国产精品久久久久久6q| 免费av一区二区| 免费观看亚洲天堂| 91嫩草国产丨精品入口麻豆| 国产真实乱子伦精品视频| www.黄色com| 欧美剧在线免费观看网站 | 一级黄色录像在线观看| 中国av一区二区三区| 中文字幕乱码人妻二区三区| 中日韩美女免费视频网站在线观看| 欧美粗大gay| 日韩免费一区二区三区| 日韩电影在线观看电影| 日本人亚洲人jjzzjjz| 欧美日韩大陆一区二区| 日本视频在线观看| 亚洲永久在线观看| 黄色日韩在线| jlzzjizz在线播放观看| 精品日韩美女的视频高清| 青青青手机在线视频观看| 国产精品1区2区在线观看| 成人羞羞网站入口| 99999精品| 亚洲一级二级在线| 西西人体44www大胆无码| 日韩av毛片网| 日本a口亚洲| 小日子的在线观看免费第8集| 一区二区激情视频| 偷拍自拍在线| 国产精品成人久久久久| 99久久久久久中文字幕一区| 男男受被啪到高潮自述| 天天综合日日夜夜精品| 精品av中文字幕在线毛片| 国产主播在线一区| 欧美日韩少妇| 粉嫩av蜜桃av蜜臀av| 欧美日本韩国一区二区三区视频| 中文字幕在线观看播放| 精品国产一区二区三区麻豆小说 | 日本视频在线免费| 日韩一区二区三| 一级毛片久久久| 小说区视频区图片区| 成人毛片在线观看| 不卡av电影在线| 欧美成年人网站| 婷婷综合福利| 午夜一级免费视频| 日韩欧美一区二区三区久久| 在线看免费av| 国产三区二区一区久久| 日韩av一区二区三区四区| 久久高清无码视频| 亚洲一级黄色片| 中文无码日韩欧| 亚洲成人av免费看| 午夜精品久久久久久久99樱桃| 国产二区视频在线观看| 国产精品国产精品| 久久精品国产99久久6|