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

優化SQL語句的一般步驟

數據庫 MySQL
慢查詢日志在查詢結束以后才記錄,所以在應用反映執行效率出現問題的時候慢查詢日志并不能定位問題,可以使用 show processlist 命令查看當前 mysql 在進行的線程,包括線程的狀態、是否鎖表等,可以實時的查看 sql 的執行情況,同時對一些鎖表操作進行優化。

[[201750]]

一、通過 show status 命令了解各種 sql 的執行頻率

mysql 客戶端連接成功后,通過 show [session|global] status 命令可以提供服務器狀態信息,也可以在操作系統上使用 mysqladmin extend-status 命令獲取這些消息。

show status 命令中間可以加入選項 session(默認) 或 global:

  • session (當前連接)
  • global (自數據上次啟動至今)
  1. # Com_xxx 表示每個 xxx 語句執行的次數。 
  2. mysql> show status like 'Com_%'

 

我們通常比較關心的是以下幾個統計參數:

  • Com_select : 執行 select 操作的次數,一次查詢只累加 1。
  • Com_insert : 執行 insert 操作的次數,對于批量插入的 insert 操作,只累加一次。
  • Com_update : 執行 update 操作的次數。
  • Com_delete : 執行 delete 操作的次數。

上面這些參數對于所有存儲引擎的表操作都會進行累計。下面這幾個參數只是針對 innodb 的,累加的算法也略有不同:

  • Innodb_rows_read : select 查詢返回的行數。
  • Innodb_rows_inserted : 執行 insert 操作插入的行數。
  • Innodb_rows_updated : 執行 update 操作更新的行數。
  • Innodb_rows_deleted : 執行 delete 操作刪除的行數。

通過以上幾個參數,可以很容易地了解當前數據庫的應用是以插入更新為主還是以查詢操作為主,以及各種類型的 sql 大致的執行比例是多少。對于更新操作的計數,是對執行次數的計數,不論提交還是回滾都會進行累加。

對于事務型的應用,通過 Com_commit 和 Com_rollback 可以了解事務提交和回滾的情況,對于回滾操作非常頻繁的數據庫,可能意味著應用編寫存在問題。

此外,以下幾個參數便于用戶了解數據庫的基本情況:

  • Connections : 試圖連接 mysql 服務器的次數。
  • Uptime : 服務器工作時間。
  • Slow_queries : 慢查詢次數。

二、定義執行效率較低的 sql 語句

1. 通過慢查詢日志定位那些執行效率較低的 sql 語句,用 --log-slow-queries[=file_name] 選項啟動時,mysqld 寫一個包含所有執行時間超過 long_query_time 秒的 sql 語句的日志文件。

2. 慢查詢日志在查詢結束以后才記錄,所以在應用反映執行效率出現問題的時候慢查詢日志并不能定位問題,可以使用 show processlist 命令查看當前 mysql 在進行的線程,包括線程的狀態、是否鎖表等,可以實時的查看 sql 的執行情況,同時對一些鎖表操作進行優化。

三、通過 explain 分析低效 sql 的執行計劃

測試數據庫地址:https://downloads.mysql.com/d...

統計某個 email 為租賃電影拷貝所支付的總金額,需要關聯客戶表 customer 和 付款表 payment , 并且對付款金額 amount 字段做求和(sum) 操作,相應的執行計劃如下:

  1. mysql> explain select sum(amount) from customer a , payment b where a.customer_id= b.customer_id and a.email='JANE.BENNETT@sakilacustomer.org'\G   
  2.  
  3. *************************** 1. row *************************** 
  4.            id: 1 
  5.   select_type: SIMPLE 
  6.         table: a 
  7.    partitions: NULL 
  8.          type: ALL 
  9. possible_keys: PRIMARY 
  10.           keyNULL 
  11.       key_len: NULL 
  12.           ref: NULL 
  13.          rows: 599 
  14.      filtered: 10.00 
  15.         Extra: Using where 
  16. *************************** 2. row *************************** 
  17.            id: 1 
  18.   select_type: SIMPLE 
  19.         table: b 
  20.    partitions: NULL 
  21.          type: ref 
  22. possible_keys: idx_fk_customer_id 
  23.           key: idx_fk_customer_id 
  24.       key_len: 2 
  25.           ref: sakila.a.customer_id 
  26.          rows: 26 
  27.      filtered: 100.00 
  28.         Extra: NULL 
  29. rows in set, 1 warning (0.00 sec) 

 

  • select_type: 表示 select 類型,常見的取值有:
    • simple:簡單表,及不使用表連接或者子查詢
    • primary:主查詢,即外層的查詢
    • union:union 中的第二個或后面的查詢語句
    • subquery: 子查詢中的***個 select
  • table : 輸出結果集的表
  • type : 表示 mysql 在表中找到所需行的方式,或者叫訪問類型,常見類型性能由差到***依次是:all、index、range、ref、eq_ref、const,system、null:

1. type=ALL,全表掃描,mysql 遍歷全表來找到匹配的行:

  1. mysql> explain select * from film where rating > 9 \G 
  2.  
  3. *************************** 1. row *************************** 
  4.           id: 1 
  5.  select_type: SIMPLE 
  6.        table: film 
  7.   partitions: NULL 
  8.         type: ALL 
  9. possible_keys: NULL 
  10.          keyNULL 
  11.      key_len: NULL 
  12.          ref: NULL 
  13.         rows: 1000 
  14.     filtered: 33.33 
  15.        Extra: Using where 
  16. 1 row in set, 1 warning (0.01 sec) 

 

2. type=index, 索引全掃描,mysql 遍歷整個索引來查詢匹配的行

  1. mysql> explain select title form film\G 
  2.  
  3. *************************** 1. row *************************** 
  4.           id: 1 
  5.  select_type: SIMPLE 
  6.        table: film 
  7.   partitions: NULL 
  8.         type: index 
  9. possible_keys: NULL 
  10.          key: idx_title 
  11.      key_len: 767 
  12.          ref: NULL 
  13.         rows: 1000 
  14.     filtered: 100.00 
  15.        Extra: Using index 
  16. 1 row in set, 1 warning (0.00 sec) 

 

3. type=range,索引范圍掃描,常見于<、<=、>、>=、between等操作:

  1. mysql> explain select * from payment where customer_id >= 300 and customer_id <= 350 \G   
  2.  
  3. *************************** 1. row *************************** 
  4.           id: 1 
  5.  select_type: SIMPLE 
  6.        table: payment 
  7.   partitions: NULL 
  8.         type: range 
  9. possible_keys: idx_fk_customer_id 
  10.          key: idx_fk_customer_id 
  11.      key_len: 2 
  12.          ref: NULL 
  13.         rows: 1350 
  14.     filtered: 100.00 
  15.        Extra: Using index condition 
  16. 1 row in set, 1 warning (0.07 sec) 

 

4. type=ref, 使用非唯一索引掃描或唯一索引的前綴掃描,返回匹配某個單獨值的記錄行,例如:

  1. mysql> explain select * from payment where customer_id = 350 \G   
  2. *************************** 1. row *************************** 
  3.           id: 1 
  4.  select_type: SIMPLE 
  5.        table: payment 
  6.   partitions: NULL 
  7.         type: ref 
  8. possible_keys: idx_fk_customer_id 
  9.          key: idx_fk_customer_id 
  10.      key_len: 2 
  11.          ref: const 
  12.         rows: 23 
  13.     filtered: 100.00 
  14.        Extra: NULL 
  15. 1 row in set, 1 warning (0.01 sec) 

 

索引 idx_fk_customer_id 是非唯一索引,查詢條件為等值查詢條件 customer_id = 350, 所以掃描索引的類型為 ref。ref 還經常出現在 join 操作中:

  1. mysql> explain select b.*, a.* from payment a,customer b where a.customer_id = b.customer_id \G  
  2.  
  3. *************************** 1. row *************************** 
  4.           id: 1 
  5.  select_type: SIMPLE 
  6.        table: b 
  7.   partitions: NULL 
  8.         type: ALL 
  9. possible_keys: PRIMARY 
  10.          keyNULL 
  11.      key_len: NULL 
  12.          ref: NULL 
  13.         rows: 599 
  14.     filtered: 100.00 
  15.        Extra: NULL 
  16. *************************** 2. row *************************** 
  17.           id: 1 
  18.  select_type: SIMPLE 
  19.        table: a 
  20.   partitions: NULL 
  21.         type: ref 
  22. possible_keys: idx_fk_customer_id 
  23.          key: idx_fk_customer_id 
  24.      key_len: 2 
  25.          ref: sakila.b.customer_id 
  26.         rows: 26 
  27.     filtered: 100.00 
  28.        Extra: NULL 
  29. rows in set, 1 warning (0.00 sec) 

 

5. type=eq_ref,類似 ref,區別就在使用的索引時唯一索引,對于每個索引的鍵值,表中只要一條記錄匹配;簡單的說,就是多表連接中使用 primary key 或者 unique index 作為關聯條件。

  1. mysql> explain select * from film a , film_text b where a.film_id = b.film_id \G 
  2.  
  3. *************************** 1. row *************************** 
  4.           id: 1 
  5.  select_type: SIMPLE 
  6.        table: b 
  7.   partitions: NULL 
  8.         type: ALL 
  9. possible_keys: PRIMARY 
  10.          keyNULL 
  11.      key_len: NULL 
  12.          ref: NULL 
  13.         rows: 1000 
  14.     filtered: 100.00 
  15.        Extra: NULL 
  16. *************************** 2. row *************************** 
  17.           id: 1 
  18.  select_type: SIMPLE 
  19.        table: a 
  20.   partitions: NULL 
  21.         type: eq_ref 
  22. possible_keys: PRIMARY 
  23.          keyPRIMARY 
  24.      key_len: 2 
  25.          ref: sakila.b.film_id 
  26.         rows: 1 
  27.     filtered: 100.00 
  28.        Extra: Using where 
  29. rows in set, 1 warning (0.03 sec) 

 

6. type=const/system,單表中最多有一個匹配行,查起來非常迅速,所以這個匹配行中的其他列的值可以被優化器在當前查詢中當作常量來處理,例如,根據主鍵 primary key 或者唯一索引 unique index 進行查詢。

  1. mysql> create table test_const ( 
  2.    ->         test_id int
  3.    ->         test_context varchar(10), 
  4.    ->         primary key (`test_id`), 
  5.    ->     ); 
  6.     
  7. insert into test_const values(1,'hello'); 
  8.  
  9. explain select * from ( select * from test_const where test_id=1 ) a \G 
  10. *************************** 1. row *************************** 
  11.           id: 1 
  12.  select_type: SIMPLE 
  13.        table: test_const 
  14.   partitions: NULL 
  15.         type: const 
  16. possible_keys: PRIMARY 
  17.          keyPRIMARY 
  18.      key_len: 4 
  19.          ref: const 
  20.         rows: 1 
  21.     filtered: 100.00 
  22.        Extra: NULL 
  23.  1 row in set, 1 warning (0.00 sec) 

 

7. type=null, mysql 不用訪問表或者索引,直接就能夠得到結果:

  1. mysql> explain select 1 from dual where 1 \G 
  2. *************************** 1. row *************************** 
  3.           id: 1 
  4.  select_type: SIMPLE 
  5.        tableNULL 
  6.   partitions: NULL 
  7.         type: NULL 
  8. possible_keys: NULL 
  9.          keyNULL 
  10.      key_len: NULL 
  11.          ref: NULL 
  12.         rowsNULL 
  13.     filtered: NULL 
  14.        Extra: No tables used 
  15. 1 row in set, 1 warning (0.00 sec) 

 

類型 type 還有其他值,如 ref_or_null (與 ref 類似,區別在于條件中包含對 null 的查詢)、index_merge(索引合并優化)、unique_subquery (in 的后面是一個查詢主鍵字段的子查詢)、index_subquery(與 unique_subquery 類似,區別在于 in 的后面是查詢非唯一索引字段的子查詢)等。

  • possible_keys : 表示查詢時可能使用的索引。
  • key :表示實際使用索引
  • key-len : 使用到索引字段的長度。
  • rows : 掃描行的數量
  • extra:執行情況的說明和描述,包含不適合在其他列中顯示但是對執行計劃非常重要的額外信息。

show warnings 命令

執行explain 后再執行 show warnings,可以看到sql 真正被執行之前優化器做了哪些 sql 改寫:

  1. MySQL [sakila]> explain select sum(amount) from customer a , payment b where 1=1 and a.customer_id = b.customer_id and email = 'JANE.BENNETT@sakilacustomer.org'\G 
  2. *************************** 1. row *************************** 
  3.            id: 1 
  4.   select_type: SIMPLE 
  5.         table: a 
  6.    partitions: NULL 
  7.          type: ALL 
  8. possible_keys: PRIMARY 
  9.           keyNULL 
  10.       key_len: NULL 
  11.           ref: NULL 
  12.          rows: 599 
  13.      filtered: 10.00 
  14.         Extra: Using where 
  15. *************************** 2. row *************************** 
  16.            id: 1 
  17.   select_type: SIMPLE 
  18.         table: b 
  19.    partitions: NULL 
  20.          type: ref 
  21. possible_keys: idx_fk_customer_id 
  22.           key: idx_fk_customer_id 
  23.       key_len: 2 
  24.           ref: sakila.a.customer_id 
  25.          rows: 26 
  26.      filtered: 100.00 
  27.         Extra: NULL 
  28. rows in set, 1 warning (0.00 sec) 
  29.  
  30. MySQL [sakila]> show warnings; 
  31. +-------+------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
  32. Level | Code | Message                                                                                                                                                                                                                                                     | 
  33. +-------+------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
  34. | Note  | 1003 | /* select#1 */ select sum(`sakila`.`b`.`amount`) AS `sum(amount)` from `sakila`.`customer` `a` join `sakila`.`payment` `b` where ((`sakila`.`b`.`customer_id` = `sakila`.`a`.`customer_id`) and (`sakila`.`a`.`email` = 'JANE.BENNETT@sakilacustomer.org')) | 
  35. +-------+------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
  36. 1 row in set (0.00 sec) 

 

從 warning 的 message 字段中能夠看到優化器自動去除了 1=1 恒成立的條件,也就是說優化器在改寫 sql 時會自動去掉恒成立的條件。

explain 命令也有對分區的支持.

  1. MySQL [sakila]> CREATE TABLE `customer_part` ( 
  2.     ->   `customer_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, 
  3.     ->   `store_id` tinyint(3) unsigned NOT NULL
  4.     ->   `first_name` varchar(45) NOT NULL
  5.     ->   `last_name` varchar(45) NOT NULL
  6.     ->   `email` varchar(50) DEFAULT NULL
  7.     ->   `address_id` smallint(5) unsigned NOT NULL
  8.     ->   `active` tinyint(1) NOT NULL DEFAULT '1'
  9.     ->   `create_date` datetime NOT NULL
  10.     ->   `last_update` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  11.     ->   PRIMARY KEY (`customer_id`) 
  12.     ->   
  13.     -> ) partition by hash (customer_id) partitions 8; 
  14. Query OK, 0 rows affected (0.06 sec) 
  15.  
  16. MySQL [sakila]> insert into customer_part select * from customer; 
  17. Query OK, 599 rows affected (0.06 sec) 
  18. Records: 599  Duplicates: 0  Warnings: 0 
  19.  
  20. MySQL [sakila]> explain select * from customer_part where customer_id=130\G 
  21. *************************** 1. row *************************** 
  22.            id: 1 
  23.   select_type: SIMPLE 
  24.         table: customer_part 
  25.    partitions: p2 
  26.          type: const 
  27. possible_keys: PRIMARY 
  28.           keyPRIMARY 
  29.       key_len: 2 
  30.           ref: const 
  31.          rows: 1 
  32.      filtered: 100.00 
  33.         Extra: NULL 
  34. 1 row in set, 1 warnings (0.00 sec) 

 

可以看到 sql 訪問的分區是 p2。

四、通過 performance_schema 分析 sql 性能

舊版本的 mysql 可以使用 profiles 分析 sql 性能,我用的是5.7.18的版本,已經不允許使用 profiles 了,推薦用

performance_schema 分析sql。

五、通過 trace 分析優化器如何選擇執行計劃。

mysql5.6 提供了對 sql 的跟蹤 trace,可以進一步了解為什么優化器選擇 A 執行計劃而不是 B 執行計劃,幫助我們更好的理解優化器的行為。

使用方式:首先打開 trace ,設置格式為 json,設置 trace ***能夠使用的內存大小,避免解析過程中因為默認內存過小而不能夠完整顯示。

  1. MySQL [sakila]> set optimizer_trace="enabled=on",end_markers_in_json=on
  2. Query OK, 0 rows affected (0.00 sec) 
  3.  
  4. MySQL [sakila]> set optimizer_trace_max_mem_size=1000000; 
  5. Query OK, 0 rows affected (0.00 sec) 

 

接下來執行想做 trace 的 sql 語句,例如像了解租賃表 rental 中庫存編號 inventory_id 為 4466 的電影拷貝在出租日期 rental_date 為 2005-05-25 4:00:00 ~ 5:00:00 之間出租的記錄:

  1. mysql> select rental_id from rental where 1=1 and rental_date >= '2005-05-25 04:00:00' and rental_date <= '2005-05-25 05:00:00' and inventory_id=4466; 
  2. +-----------+ 
  3. | rental_id | 
  4. +-----------+ 
  5. |        39 | 
  6. +-----------+ 
  7. 1 row in set (0.06 sec) 
  8.  
  9. MySQL [sakila]> select * from information_schema.optimizer_trace\G 
  10. *************************** 1. row *************************** 
  11.                             QUERY: select * from infomation_schema.optimizer_trace 
  12.                             TRACE: { 
  13.   "steps": [ 
  14.   ] /* steps */ 
  15. MISSING_BYTES_BEYOND_MAX_MEM_SIZE: 0 
  16.           INSUFFICIENT_PRIVILEGES: 0 
  17. 1 row in set (0.00 sec) 

 

六、 確定問題并采取相應的優化措施

經過以上步驟,基本就可以確認問題出現的原因。此時可以根據情況采取相應的措施,進行優化以提高執行的效率。

 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2011-04-06 16:41:25

LCPPPPIPCP

2022-04-02 15:08:54

API調試

2010-05-14 14:12:58

MySQL數據庫優化

2020-06-09 08:09:07

機器學習統計學習無監督學習

2011-09-08 11:35:18

2010-10-08 14:23:08

MySQL中INSER

2025-05-12 08:27:25

2011-03-31 11:14:51

Sql語句優化

2010-04-13 15:04:16

Oracle優化

2021-08-16 08:42:31

MySQL查詢數據庫

2021-08-19 09:16:29

MySQL數據庫優化器

2010-11-04 15:39:40

DB2 SQL語句

2012-06-27 09:29:49

程序員

2010-09-14 10:55:14

DIV CSS網頁制作

2019-06-05 15:23:09

Redis緩存存儲

2010-09-07 15:12:25

SQL語句優化

2018-01-08 15:07:15

java項目后臺

2023-07-27 08:34:57

軟件迭代管理

2009-11-06 17:13:24

Oracle SQL語

2013-01-20 21:55:24

移動策略
點贊
收藏

51CTO技術棧公眾號

一区二区三区中文在线| 久久成人精品无人区| 日韩国产精品一区| 最新中文字幕2018| 黄色网址在线免费| 97se亚洲国产综合在线| 国产精品久久久久久影视| tube国产麻豆| 亚洲宅男一区| 日韩欧美一区二区视频| 国产z一区二区三区| 制服 丝袜 综合 日韩 欧美| av在线精品| 欧美日韩免费在线观看| 一区二区在线观| 少妇精品高潮欲妇又嫩中文字幕| 免费的成人av| 国产91精品久久久久| 国产精品视频一区二区在线观看| 日韩精品福利一区二区三区| 3d成人h动漫网站入口| 国产欧美在线一区| 黄页网站在线| 中文字幕一区二区三| 欧美久久综合性欧美| 99久久久无码国产精品免费| 日韩精品一二三| 97久久久久久| 欧美精品一区二区成人| 99国产精品免费视频观看| 亚洲欧美日韩在线一区| 无码国产精品一区二区免费式直播| 99久久久国产精品免费调教网站 | 久久av免费观看| 国产视频一区二区三| 日本中文字幕一区二区有限公司| 97色在线视频| 久久精品久久精品久久| 亚洲精品小说| 日韩在线观看av| 神马久久久久久久久久久| 欧美电影在线观看免费| 欧美不卡一区二区| 婷婷激情小说网| 亚洲电影二区| 欧美日韩日日夜夜| 亚洲性图一区二区| 国产综合色在线观看| 色欧美乱欧美15图片| 国产xxxxx在线观看| 女厕盗摄一区二区三区| 午夜久久久影院| www.日本少妇| av资源新版天堂在线| 亚洲国产色一区| 国产av熟女一区二区三区| a级毛片免费观看在线| 中文字幕日韩一区| 手机在线视频你懂的| av网站在线看| 有坂深雪av一区二区精品| 神马午夜伦理影院| 日本动漫理论片在线观看网站| 亚洲欧美偷拍三级| 奇米777四色影视在线看| 羞羞电影在线观看www| 一区二区不卡在线播放| 欧美午夜性视频| 不卡专区在线| 日本高清不卡在线观看| 四季av一区二区| 色狠狠一区二区三区| 91精品国产色综合久久不卡蜜臀 | 一级久久久久久久| 国产精品91一区二区| 高清国产一区| 偷拍25位美女撒尿视频在线观看| 久久久久久日产精品| 深田咏美在线x99av| 黄色在线免费看| 亚洲一区二区三区国产| 黑森林福利视频导航| 成人在线观看免费播放| 日韩一区二区精品在线观看| 黄色录像a级片| 日韩欧美电影| 欧美高清一级大片| 日本中文字幕久久| 国产美女在线精品| 精品蜜桃一区二区三区| 尤物视频在线免费观看| 亚洲国产三级在线| 国产精品久久久久9999小说| 粉嫩av国产一区二区三区| 亚洲精品一区二区三区福利| 婷婷色一区二区三区| 午夜日韩激情| 国产不卡一区二区在线播放| 国产精品免费无遮挡| 成人av综合一区| 亚洲黄色成人久久久| aa视频在线观看| 欧美日韩一二区| 波多野结衣先锋影音| 91精品国产自产拍在线观看蜜| 97成人精品视频在线观看| 亚洲视屏在线观看| 93久久精品日日躁夜夜躁欧美| 亚洲视频欧美在线| 欧美激情护士| 日韩亚洲欧美成人一区| 老司机福利在线观看| 亚洲伦伦在线| 91久色国产| 三区四区电影在线观看| 欧美午夜片欧美片在线观看| 在线成人精品视频| 欧美高清在线| 国产成人精品999| 少妇高潮一区二区三区99小说| 最新日韩在线视频| 手机看片福利盒子久久| 国产一级成人av| 大胆人体色综合| 伊人久久一区二区| 久久久久国产精品麻豆| 日韩欧美一区二| 午夜日韩影院| 久久天天躁狠狠躁夜夜躁| 国产精品xxxxxx| 91麻豆视频网站| av免费观看国产| 日本精品在线播放| 久久伊人免费视频| 伊人精品一区二区三区| 国产精品少妇自拍| 中文字幕在线观看第三页| 天堂av一区二区三区在线播放| 久久久久久久久久久网站| 国产精品色综合| 亚洲欧洲精品一区二区精品久久久 | 精品无码人妻少妇久久久久久| 国产韩日影视精品| 国产一区视频在线播放| 一级毛片视频在线| 欧美日韩电影在线播放| av在线播放中文字幕| 免费观看日韩电影| 亚洲午夜在线观看| 日日夜夜一区| 米奇精品一区二区三区在线观看| 国产精品无码AV| 亚洲人成网站精品片在线观看 | 亚洲GV成人无码久久精品 | 日韩视频免费直播| 久草免费在线观看视频| 国产成人激情av| 欧美精品久久久久久久久久久| 成人午夜网址| 9.1国产丝袜在线观看 | 91大神精品| 欧美极品少妇xxxxⅹ免费视频| 欧美 日韩 国产 成人 在线 91| 亚洲综合在线视频| 91av在线免费| 日韩精品乱码av一区二区| 亚洲不卡中文字幕| 福利一区在线| 欧美另类第一页| 香蕉av一区二区三区| 91国偷自产一区二区开放时间| 夫妇交换中文字幕| 韩国理伦片一区二区三区在线播放 | 国产免费一区二区三区香蕉精| 国产免费a∨片在线观看不卡| 欧美欧美欧美欧美| 免费中文字幕在线观看| xnxx国产精品| 最新国产黄色网址| 欧美三级乱码| 久久另类ts人妖一区二区| 国产在线|日韩| 欧美精品日韩三级| 日韩欧美电影在线观看| 欧美日韩久久不卡| 精品午夜福利在线观看| 久久先锋影音av| 亚洲欧美天堂在线| 妖精视频成人观看www| 亚洲精品在线视频观看| 69精品国产久热在线观看| 日韩免费不卡av| 中文字幕在线三区| 日韩电影免费观看在线观看| 一级黄在线观看| 韩曰欧美视频免费观看| 顶级黑人搡bbw搡bbbb搡| 成人18精品视频| 人人干人人干人人| 国产乱码精品| 男人j进女人j| 欧美美女在线| 超碰97人人人人人蜜桃| 99久久精品一区二区成人| 国语自产在线不卡| 黄在线免费看| 国产亚洲成av人片在线观看桃| 国产黄a三级三级三级| 91久久精品一区二区三区| 一区视频免费观看| 国产精品女主播av| 久久人妻少妇嫩草av无码专区| 精品一区二区三区欧美| 色欲av无码一区二区人妻| 欧美亚韩一区| 手机福利在线视频| av中文字幕一区二区| 精品国产一区二区三区麻豆小说 | а√天堂中文资源在线bt| 日韩中文字幕精品| 亚洲欧美自偷自拍| 精品国产精品网麻豆系列| 亚洲综合精品国产一区二区三区| 欧美视频专区一二在线观看| 欧美日韩国产精品综合| 亚洲欧美色图小说| 五月天免费网站| 欧美国产日韩亚洲一区| 亚洲av综合一区二区| 波多野结衣精品在线| 丰满少妇中文字幕| 国产做a爰片久久毛片| wwwwxxxx日韩| 免费观看在线综合色| 9久久婷婷国产综合精品性色| 噜噜噜91成人网| 精品久久久久av| 欧美一级网站| av网站在线观看不卡| 麻豆成人精品| 精品久久久久久久免费人妻| 翔田千里一区二区| 国产一区二区三区精彩视频 | 啪啪亚洲精品| 欧美午夜免费| 欧美精品一区二区久久| 日本一区视频在线观看免费| 国产videos久久| 日韩av一级大片| 精品免费在线| 亚洲精品成人a8198a| 青青一区二区三区| 正在播放一区| 国模吧视频一区| 国产二区视频在线| 亚洲精品乱码| 日本日本19xxxⅹhd乱影响| 国产亚洲午夜| 最近免费中文字幕中文高清百度| 久久亚洲一区| 9l视频白拍9色9l视频| 久久99精品久久久久久国产越南| 亚洲小视频网站| 韩国毛片一区二区三区| av漫画在线观看| 91丨九色丨国产丨porny| 男生裸体视频网站| 久久天堂av综合合色蜜桃网 | 一区二区三区欧美在线观看| 激情综合网五月天| 好吊成人免视频| 欧美激情一区二区三区免费观看| 欧美精品久久99| www.四虎在线观看| 日韩精品有码在线观看| 岛国最新视频免费在线观看| www.日本久久久久com.| 午夜伦理在线视频| 538国产精品一区二区在线| 欧美日韩亚洲国产| 不卡日韩av| 成人精品影院| 国产av人人夜夜澡人人爽麻豆 | 能看毛片的网站| 91在线一区二区| 国产精品18在线| 午夜精品在线看| 中文字幕在线网址| 亚洲福利视频网| 欧美成人hd| 韩国国内大量揄拍精品视频| 亚洲精品555| 国产精品v欧美精品v日韩| 国产一卡不卡| 国产va亚洲va在线va| 老色鬼精品视频在线观看播放| 国产高潮失禁喷水爽到抽搐| 国产精品三级电影| 国产做受高潮漫动| 91精品久久久久久久99蜜桃| 酒色婷婷桃色成人免费av网| 久久国产精品首页| 日韩高清在线| 免费成人在线观看av| 伊人久久亚洲美女图片| 成年人三级黄色片| 久久先锋影音av| 亚欧洲精品在线视频| 欧美乱熟臀69xxxxxx| 欧洲综合视频| 性欧美xxxx视频在线观看| 国产成人久久精品一区二区三区| 亚洲一区二区美女| 国产高潮国产高潮久久久91| 色综合av在线| 日本黄色不卡视频| 欧美成人在线免费| 日韩成人一区| 午夜视频久久久| 久久综合中文| 少妇精品无码一区二区三区| 亚洲欧美日韩在线| 中文亚洲av片在线观看| 亚洲人成在线观看网站高清| 久久国产精品黑丝| 97超碰人人看人人| 午夜精品一区二区三区国产| 中文久久久久久| 久久精品男人天堂av| 国产精品7777| 精品久久国产字幕高潮| aa在线视频| 4444kk亚洲人成电影在线| 99热精品久久| 911av视频| 亚洲欧美日韩精品久久久久| 中文字幕永久在线观看| 亚洲小视频在线观看| 黄色成人免费网| 精品高清视频| 在线亚洲观看| 日本黄色网址大全| 精品动漫一区二区| 色一情一乱一乱一区91av| 欧美激情小视频| 国产精品丝袜在线播放| 中文字幕国产一区| 久久高清免费视频| 精品国产91亚洲一区二区三区婷婷 | 日韩一区二区三免费高清在线观看| 日韩一区二区三区资源| 日本女优在线视频一区二区| 日韩一区二区a片免费观看| 在线亚洲欧美专区二区| 成人在线免费看| 国产精品91免费在线| 欧美精品一区二区三区中文字幕 | 国产一区二区三区视频免费| 成人软件在线观看| 亚洲一区影院| 国产真实乱子伦精品视频| 欧美日韩中文字幕在线观看| 欧美videos中文字幕| 色是在线视频| 天堂√在线观看一区二区| 韩国视频一区二区| 欧美日韩中文视频| 亚洲欧洲激情在线| 欧洲亚洲精品久久久久| 国产女主播av| www.成人在线| 中文字幕视频在线播放| 欧美成人午夜影院| 香蕉视频一区| 午夜啪啪小视频| 亚洲国产中文字幕| 国产最新视频在线观看| 91久久在线播放| 国产一区二区你懂的| 欧美xxxx精品| 日韩欧美国产一区二区在线播放 | 国产日韩在线看| 欧美日本一区| 性久久久久久久久久| 欧美日韩一级二级| а√天堂8资源在线| 亚洲7777| 99久久精品国产一区| 中文字幕码精品视频网站| 欧美高清激情视频| 国产探花在线精品一区二区| 女人扒开双腿让男人捅| 在线观看国产一区二区| 国产精品蜜臀| 亚洲精品中字| 97se狠狠狠综合亚洲狠狠| 99久久国产免费| 国产精品成人一区| 在线国产欧美| 黑人操日本美女|