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

分布式任務調度內的 MySQL 分頁查詢優化

數據庫
本文主要通過圖示介紹了用主鍵進行分片查詢的過程,介紹了主鍵分頁查詢存在SQL性能問題,如何去創建高效的索引去優化主鍵分頁查詢的SQL性能問題。對于數據分布不均如何發現,提供了一些SQL查詢案例來進行參考,對MySQL Index Condition Pushdown優化算法做了一些簡單介紹。

一、背景介紹

最近在線上環境發現了一條執行較慢的分頁查詢,高并發執行,產生了大量的慢查詢日志,CPU使用率逐步升高。

通過觀察它的執行時間,發現該SQL查詢時快時慢,執行時間并不穩定,以至于在高并發執行場景時,數據庫來不及響應,數據庫服務變慢。

圖片

圖片

二、分析定位

2.1 定位 SQL 執行變慢的原因

通過數據庫管理平臺查看SQL執行信息發現,SQL解析行數(掃描行數)和SQL執行時間都很不穩定,執行時長和解析行數(掃描行數)是成正比的。

這個也能解釋的通為什么SQL執行時長變了,因為掃描行數變多了,SQL執行時間成比例增長。

-- SQL全文
select
    id,
    uuid,
    name,
    user_type,
    is_deleted,
    modify_date
from
    test_user
where
    is_deleted=0    
    and user_type=0    
    and id > 10000    
    and id % 10 = 9
order by
    id  limit 500;

圖片

2.2 了解 SQL 的業務背景

通過與研發溝通發現,該SQL原來是串行執行,單個線程在跑,后來覺得比較慢,改為分布式任務并行執行,通過id取模0-9,調度10個線程,每個線程處理1個分區,這樣就有10個并發相當于把數據做了切片,并發查詢并發處理,由此帶來數據庫端的并發升高。從技術角度上看,提高數據處理速度,給數據做切片,改單線程為并發處理,并沒有任何問題,反而是一種比較好的優化方案,但是高并發執行的SQL都是要有一個前提,SQL執行效率要特別高,否則會導致數據庫端物理機資源耗盡,數據庫服務來不及響應。

圖片

2.3 定位 SQL 掃描行數變化的原因

2.3.1 慢 SQL 及表結構信息

-- 為了方便理解和說明,新建一個test_user表,造了一些模擬數據,將SQL做了一些簡化,不影響整體的分析效果
 
-- SQL全文
select
    id,
    uuid,
    name,
    user_type,
    is_deleted,
    modify_date
from
    test_user 
where
    is_deleted=0     
    and user_type=0     
    and id > 10000     
    and id % 10 = 9 
order by
    id  limit 500;
 
 
-- 表信息
 CREATE TABLE `test_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `uuid` varchar(64) NOT NULL COMMENT '用戶ID',
  `name` varchar(20) DEFAULT '' COMMENT '用戶名',
  `user_type` tinyint(4) NOT NULL DEFAULT '0',
  `is_deleted` tinyint(4) NOT NULL DEFAULT '0',
  `modify_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改時間',
  `create_date` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_uuid` (`uuid`),
  KEY `idx_modifydate` (`modify_date`)
) ENGINE=InnoDB AUTO_INCREMENT=7986024 DEFAULT CHARSET=utf8mb4

2.3.2 查看 SQL 執行計劃

通過查看SQL執行計劃,發現執行計劃走主鍵索引掃描,以下是SQL執行計劃的關鍵信息解讀:

  • type=range     范圍掃描
  • key = primary 使用主鍵索引
  • rows = 877w   預估的掃描行數
  • filter = 1.00     百分比,滿足過濾條件返回的行數  = rows * filter 


mysql> explain  select
    ->     id,
    ->     uuid,
    ->     name,
    ->     user_type,
    ->     is_deleted,
    ->     modify_date
    -> from
    ->     test_user 
    -> where
    ->     is_deleted=0     
    ->     and user_type=9     
    ->     and id > 10000     
    ->     and id % 10 = 9 
    -> order by
    ->     id  limit 500; 
+----+-------------+-----------+------------+-------+---------------+---------+---------+------+---------+----------+-------------+
| id | select_type | table     | partitions | type  | possible_keys | key     | key_len | ref  | rows    | filtered | Extra       |
+----+-------------+-----------+------------+-------+---------------+---------+---------+------+---------+----------+-------------+
|  1 | SIMPLE      | test_user | NULL       | range | PRIMARY       | PRIMARY | 8       | NULL | 8775507 |     1.00 | Using where |
+----+-------------+-----------+------------+-------+---------------+---------+---------+------+---------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

2.3.3 圖示 SQL 執行過程

通過簡單的圖示,描述下SQL掃描過程,由于是通過主鍵索引遍歷,避免了額外的排序行為,從最小id開始取到最大id。

mysql> select min(id),max(id) from test_user;
+---------+----------+
| min(id) | max(id)  |
+---------+----------+
|       3 | 17889149 |
+---------+----------+
1 row in set (0.00 sec)

圖片

2.3.4 計算數據分布

從SQL過濾條件看只有is_deleted、user_type、id這三個,能預估到is_deleted和user_type區分度不高,通過SQL查看下數據的分布。

mysql> select is_deleted,user_type,count(*) from test_user group by is_deleted,user_type order by count(*) desc limit 1,10;
+------------+-----------+----------+
| is_deleted | user_type | count(*) |
+------------+-----------+----------+
|          1 |         1 |  4473019 |
|          1 |         0 |  4471648 |
|          0 |         0 |  4470140 |
|          0 |         2 |      999 |
+------------+-----------+----------+
4 rows in set (4.81 sec)
-- 從數據分布來看user_type等于2的數據較少,只有999條,其他相對比較均勻

數據分布驗證測試

將上述4種結果(is_deleted和user_type)分別通過SQL查看最近1000條滿足條件的數據的id區間,驗證數據的分布。

  • is_deleted=1、user_type=1
  • is_deleted=1、user_type=0
  • is_deleted=0、user_type=0


-- 最近1000條is_deleted=1、user_type=1的數據記錄分布在id 6-3876,大約掃描3871條數據,能返回500條滿足條件的值,數據分布均勻.
mysql> select max(id),min(id) from( select id from test_user where  is_deleted=1 and user_type=1 order by id  limit 1000) a;
+---------+---------+
| max(id) | min(id) |
+---------+---------+
|    3876 |       6 |
+---------+---------+
1 row in set (0.00 sec)
 
-- 最近1000條is_deleted=1、user_type=0的數據記錄分布在id 3-4019,大約掃描4016條數據,能返回500條滿足條件的值,數據分布均勻.
mysql> select max(id),min(id) from( select id from test_user where  is_deleted=1 and user_type=0 order by id  limit 1000) a;
+---------+---------+
| max(id) | min(id) |
+---------+---------+
|    4019 |       3 |
+---------+---------+
1 row in set (0.00 sec)
 
-- 最近1000條is_deleted=0、user_type=0的數據記錄分布在id 5-4020,大約掃描4015條數據,能返回500條滿足條件的值,數據分布均勻.
mysql> select max(id),min(id) from( select id from test_user where  is_deleted=0 and user_type=0 order by id  limit 1000) a;
+---------+---------+
| max(id) | min(id) |
+---------+---------+
|    4025 |       5 |
+---------+---------+
1 row in set (0.00 sec)

圖片

is_deleted=0、user_type=2

-- 最近1000條is_deleted=0、user_type=2的數據記錄分布在id 17890648-17891147,是比較緊湊的,但是由于id比較大,整體排在較后的位置。
-- 如果按照主鍵遍歷,需要遍歷完前面的1700w條不符合條件數據,才能遍歷到滿足條件的數據。
mysql> select max(id),min(id) from( select id from test_user where  is_deleted=0 and user_type=2 order by id  limit 1000) a;
+----------+----------+
| max(id)  | min(id)  |
+----------+----------+
| 17891147 | 17890149 |
+----------+----------+
1 row in set (0.00 sec)


圖片


2.3.5 實際執行測試

重要字段信息說明:

  • Query_time:SQL執行時間
  • Rows_examined:SQL掃描行數
  • Rows_sent:SQL返回行數


# Query_time: 0.009549  Lock_time: 0.000074 Rows_sent: 500  Rows_examined: 20537

SET timestamp=1695711745;

select id,uuid,name,user_type,is_deleted,modify_date from test_user where is_deleted=1 and user_type=0 and id > 0 and id % 10 = 9 order by id limit 500;


# Query_time: 0.009835  Lock_time: 0.000081 Rows_sent: 500  Rows_examined: 21037


SET timestamp=1695711779;


select id,uuid,name,user_type,is_deleted,modify_date from test_user where is_deleted=0 and user_type=0 and id > 0 and id % 10 = 9 order by id limit 500;

(這邊大家可能會有疑惑,為什么掃描行數要比預估的多一些,其實也正常,我們在做預估時并沒有把取模的過濾條件加上,所以必然會多掃描)


# Query_time: 6.981938  Lock_time: 0.000076 Rows_sent: 100  Rows_examined: 17890145


SET timestamp=1695711818;


select id,uuid,name,user_type,is_deleted,modify_date from test_user where is_deleted=0 and user_type=2 and id > 0 and id % 10 = 9 order by id limit 500;

2.3.6 自此能得到結論

因為is_deleted和user_type數據分布不均勻并且數據區分度不高,執行計劃走主鍵順序掃描, 在查詢is_deleted=0 and user_type=2 特定場景的時,因為走主鍵索引順序遍歷,滿足user_type=2 的id比較靠后,需要先掃描完成前面1700w條數據后,才能找到滿足user_type=2的數據,SQL掃描行數變多, SQL執行時間變長。

三、優化方案

3.1 優化方案確定

當前SQL執行計劃以主鍵進行順序遍歷,是一個范圍掃描,有點像在一片很大的居民區按照序號挨家挨戶尋找一些特定的人一樣,比較簡單也比較低效。

既然查詢是以is_deleteduser_type為主要的過濾條件,查詢特定的人群信息,可以考慮直接在這兩列上添加索引,記錄特定人群信息的位置,根據位置直接去定向尋找。

雖然is_deleteduser_type字段區分度很低,但是成為有序結構,能避免這條SQL大量的讀取不符合條件的數據的行為,添加索引的收益遠大于索引帶來負面影響。

最終的添加的索引:

alter table test_user add index idx_isdeleted_usertype_id(is_deleted,user_type,id);

添加該索引的考慮:遵循ESR原則(等值在前,排序在中間,范圍在最后),既能高效掃描到對應的數據,還能避免id的排序,extra內顯示使用了Using index condition。

mysql>  explain select id,uuid,name,user_type,is_deleted,modify_date from test_user where is_deleted=0 and user_type=2 and id > 0 and id % 10 = 9 order by id limit 500;
+----+-------------+-----------+------------+-------+-----------------------------------+---------------------------+---------+------+------+----------+-----------------------+
| id | select_type | table     | partitions | type  | possible_keys                     | key                       | key_len | ref  | rows | filtered | Extra                 |
+----+-------------+-----------+------------+-------+-----------------------------------+---------------------------+---------+------+------+----------+-----------------------+
|  1 | SIMPLE      | test_user | NULL       | range | PRIMARY,idx_isdeleted_usertype_id | idx_isdeleted_usertype_id | 10      | NULL |  999 |   100.00 | Using index condition |
+----+-------------+-----------+------------+-------+-----------------------------------+---------------------------+---------+------+------+----------+-----------------------+
1 row in set, 1 warning (0.00 sec)

3.2 優化效果對比

優化前:

# Query_time: 6.981938  Lock_time: 0.000076 Rows_sent: 100  Rows_examined: 17890145
SET timestamp=1695711818;
select id,uuid,name,user_type,is_deleted,modify_date from test_user where is_deleted=0 and user_type=2 and id > 0 and id % 10 = 9 order by id limit 500;

優化后:

# Query_time: 0.000884  Lock_time: 0.000091 Rows_sent: 100  Rows_examined: 100
SET timestamp=1695714485;
select id,uuid,name,user_type,is_deleted,modify_date from test_user where is_deleted=0 and user_type=2 and id > 0 and id % 10 = 9 order by id limit 500;

優化提升:

掃描行數從1700w條降低為100條,查詢時間從6.98s 降低為 0.8ms

3.3  圖示的優化后的SQL執行過程

  1. 通過idx_isdeleted_usertype_id索引的有序性,進行二分查找,快速定位到滿足is_deleted和user_type、id條件主鍵信息。
  2. 通過主鍵信息回表讀取完整的數據。
  3. 返回數據給客戶端服務。

圖片

3.4 ICP特性(Index Condition Pushdown) 

補充下執行計劃內extra列體現Using index condition優化。

  • 索引條件下推 (ICP) 是針對 MySQL 使用索引從表中檢索行的情況的優化。
  • 如果沒有 ICP,存儲引擎會遍歷索引以定位基表中的行,并將它們返回給 MySQL  server,由 MySQL  server評估行的 WHERE 條件。
  • 在啟用 ICP 的情況下,如果 WHERE 條件的一部分可以通過僅使用索引中的列來評估,MySQL  server會將這部分 WHERE 條件下推到存儲引擎。
  • 然后存儲引擎通過使用索引條目來評估推送的索引條件,并且只有在滿足這一條件時才從表中讀取行。
  • ICP可以減少存儲引擎必須訪問基表的次數和MySQL server必須訪問存儲引擎的次數。


圖片

ICP優化的使用和局限性路:

ICP優化在數據庫優化器內默認是開啟的,ICP優化適用性取決于以下條件:

  • icp 對于使用rang、ref、eq_ref 和ref_or_null訪問模式去檢索全表數據行時候。
  • icp 只適用于innodb、myisam引擎的表,包括分區的InnoDB和MyISAM表。
  • icp只會使用二級索引,減少完整行記錄的讀取和減少I/O操作 對于聚集索引,完整行記錄已經被讀入innodb buffer中,using icp不能減少I/O操作。
  • icp不支持使用創建在虛擬列上的二級索引,innodb引擎支持在虛擬列上創建二級索引。
  • 引用子查詢的條件無法下推。
  • 引用存儲函數的條件無法下推。存儲引擎無法調用存儲的函數。
  • Triggered conditions cannot be pushed down。


-- 測試下相同的SQL執行在開啟ICP優化和關閉ICP優化,執行時間和掃描行數的對比.
 
-- 關閉ICP,SQL執行掃描行數是5043行,執行時間為8.03ms.
SET optimizer_switch='index_condition_pushdown=off';
# Query_time: 0.008031  Lock_time: 0.000085 Rows_sent: 500  Rows_examined: 5043
select id,uuid,name,user_type,is_deleted,modify_date from test_user where is_deleted=0 and user_type=0  and id > 10000 and id % 10 = 9  order by id limit 500;
 
-- 開啟ICP,SQL執行掃描行數僅為500行,執行時間為2.72ms.
SET optimizer_switch='index_condition_pushdown=on';
# Query_time: 0.002724  Lock_time: 0.000082 Rows_sent: 500  Rows_examined: 500
select id,uuid, name, user_type,is_deleted,modify_date from test_user where is_deleted=0 and user_type=0 and id > 10000 and id % 10 = 9 order by id limit 500;

結論:本次測試,開啟ICP優化,SQL執行時掃描的行數僅為未開啟時的1/10,執行時間提升約2-3倍。

四、總結

  1. 將SQL查詢從串行改為高并發執行,需要評估下SQL查詢效率是否足夠高,評估的標準:SQL掃描行數/SQL返回行數  結果越大說明存在很多低效的數據掃描,執行效率不高。
  2. 分頁查詢通過主鍵遍歷是順序遍歷,從最小id到最大id,當存在其它過濾條件時,需要再次判斷數據是否滿足這些過濾條件,掃描的行數會隨著增長。
  3. 區分度較低的字段并非不適合創建索引,仔細評估查詢的場景,建立特定的組合索引,觸發MySQL icp優化,對查詢性能會有很大提升。

參考文章

Index Condition Pushdown介紹:

責任編輯:龐桂玉 來源: vivo互聯網技術
相關推薦

2020-09-29 19:20:05

鴻蒙

2023-06-26 00:14:28

Openjob分布式任務

2023-05-08 16:38:46

任務調度分布式任務調度

2020-11-06 12:12:35

HarmonyOS

2019-11-15 10:16:27

分布式任務框架

2022-06-20 15:32:55

Stage模型分布式開發

2022-06-13 07:43:21

分布式Spring

2010-07-06 09:39:20

SQL Server分

2021-11-10 16:10:18

鴻蒙HarmonyOS應用

2025-05-13 03:22:00

2025-07-09 09:00:00

2024-09-23 04:00:00

java架構分布式系統

2021-11-29 08:48:00

K8S KubernetesAirflow

2021-08-16 09:55:41

鴻蒙HarmonyOS應用

2017-08-22 11:10:44

大數據分布式調度

2010-11-25 14:21:16

MySQL查詢分頁

2021-05-31 20:24:16

鴻蒙HarmonyOS應用

2022-08-19 18:03:12

Scheduler

2021-10-30 19:30:23

分布式Celery隊列

2017-07-26 14:55:32

分布式技術架構
點贊
收藏

51CTO技術棧公眾號

亚洲电影一二三区| 97超碰蝌蚪网人人做人人爽| 五月天婷婷亚洲| 午夜激情在线观看| 懂色av一区二区夜夜嗨| 91av在线国产| 91精品少妇一区二区三区蜜桃臀| 午夜久久av| 色婷婷综合中文久久一本| 91手机视频在线| 欧美色18zzzzxxxxx| 激情五月婷婷综合网| 午夜精品99久久免费| gv天堂gv无码男同在线观看| 77成人影视| 欧洲精品中文字幕| 你真棒插曲来救救我在线观看| 黄色片免费在线| 福利一区二区在线| 国产免费一区视频观看免费 | 久久资源中文字幕| 亚洲精品电影网站| 亚洲综合123| 香蕉视频亚洲一级| 亚洲成av人片| 视频一区二区视频| 成黄免费在线| 2020日本不卡一区二区视频| 亚洲自拍av在线| 成人黄色免费网| 亚洲一区日韩| 欧美国产亚洲视频| 三级影片在线看| 日韩在线中文| 国产一区二区久久精品| 成人性生活免费看| 91亚洲精品视频在线观看| 欧美日韩免费一区二区三区| 免费av网址在线| 国模精品视频| 精品毛片网大全| 男人天堂av片| 任你弄在线视频免费观看| 中文字幕综合网| 亚洲日本精品国产第一区| 三级国产在线观看| 99re热视频精品| 国产欧美在线一区二区| 亚洲AV无码国产精品午夜字幕| 精品一区二区三区免费观看| 国产精品亚洲网站| 国产一级精品毛片| 蜜桃av一区二区| 国产精品私拍pans大尺度在线 | 制服视频三区第一页精品| 日韩av片网站| 78精品国产综合久久香蕉| 欧美午夜激情小视频| 欧美视频免费播放| 欧美精品高清| 在线看不卡av| 亚洲欧美自偷自拍另类| 欧美国产日韩电影| 欧美日韩一二区| 国产美女18xxxx免费视频| 青青在线精品| 日韩一区二区视频在线观看| 蜜桃视频无码区在线观看| 日韩精品一区二区三区免费视频| 日韩一级二级三级| 黄色免费视频网站| 免费看日本一区二区| 国产香蕉97碰碰久久人人| 99热6这里只有精品| 婷婷综合五月| 久久久久久18| 国产精品suv一区| 美女在线视频一区| 亚洲在线一区二区| 日本激情一区二区| 久久九九久精品国产免费直播| 亚洲ai欧洲av| 黄页在线观看免费| 欧美视频二区36p| 伊人色在线观看| 欧美黄色一级| 亚洲精品视频在线播放| 自拍偷拍中文字幕| 97精品中文字幕| 欧美交受高潮1| 久久久久久久久久久久久久av| 日韩国产欧美一区二区三区| 亚洲xxxx3d| 男人的天堂在线| 亚洲欧美乱综合| 37pao成人国产永久免费视频| 素人一区二区三区| 欧美mv和日韩mv的网站| jizz中文字幕| 欧美成熟视频| 国产成人精品最新| 性欧美8khd高清极品| 久久九九久精品国产免费直播| 无码人妻精品一区二区三区99v| 都市激情国产精品| 欧美人体做爰大胆视频| 五十路六十路七十路熟婆| 91视频久久| 日本精品中文字幕| 性欧美18一19性猛交| 中文字幕第一页久久| 国产96在线 | 亚洲| 亚洲一区二区av| 国产偷亚洲偷欧美偷精品| 永久看片925tv| 丝袜诱惑亚洲看片| 国产乱码精品一区二区三区卡| 在线免费看黄| 欧美日韩精品在线视频| 色婷婷激情视频| 精品高清久久| 欧美最近摘花xxxx摘花| 成人1区2区3区| 亚洲欧美偷拍卡通变态| 手机看片福利日韩| 日韩高清三区| 国自在线精品视频| 性色av蜜臀av| 亚洲欧美日本韩国| 亚洲图片 自拍偷拍| 大片网站久久| 国产精品久久久久久亚洲影视| 男人天堂网在线视频| 亚洲蜜臀av乱码久久精品蜜桃| 手机在线成人免费视频| 禁断一区二区三区在线| 欧美一级视频在线观看| 天天干天天色天天| 亚洲第一精品在线| 免费啪视频在线观看| 欧美一区网站| 91久久精品www人人做人人爽| 男人和女人做事情在线视频网站免费观看| 欧美视频二区36p| 菠萝菠萝蜜网站| 国产精品一二| 鲁丝一区二区三区免费| 成人性生交大片免费观看网站| 日韩成人在线视频网站| 久久久久久久久久免费视频| 99久久99久久精品免费观看| 亚洲精品蜜桃久久久久久| 风间由美中文字幕在线看视频国产欧美 | 国产精品户外野外| 久草福利在线视频| 精品污污网站免费看| 成人免费视频入口| 精品一区精品二区高清| 男女h黄动漫啪啪无遮挡软件| 久久99成人| 久久久噜噜噜久噜久久| 天天摸夜夜添狠狠添婷婷| 欧美色videos| 国产又粗又猛又爽又黄的视频小说| 蜜桃av一区二区| 97在线免费视频观看| 91蝌蚪精品视频| 91福利视频在线观看| 岛国在线视频| 欧美日本不卡视频| 国产无遮挡又黄又爽又色| caoporen国产精品视频| av丝袜天堂网| 亚洲欧洲美洲一区二区三区| 懂色一区二区三区av片| 最新中文字幕在线播放| 在线播放日韩精品| 国产三级自拍视频| 天天色天天爱天天射综合| 男人天堂av电影| 韩日av一区二区| 久久人人爽人人爽人人av| 精品国产一区探花在线观看| 91视频88av| 色一区二区三区| 日韩在线观看高清| 色婷婷av一区二区三| 欧美这里有精品| 国产真人真事毛片| 亚洲国产高清在线观看视频| 日韩精品xxx| 日韩精品久久理论片| 久久观看最新视频| 欧美男gay| 亚洲一区二区自拍| 色天使综合视频| 久久久久久久久久久av| h视频在线播放| 亚洲第一区第一页| 亚洲视频在线观看一区二区| 亚洲国产精品一区二区久久恐怖片| 特级西西www444人体聚色| 国产a视频精品免费观看| 激情五月亚洲色图| 怡红院精品视频在线观看极品| 日韩三级电影| 久久亚州av| 亚洲一区亚洲二区| 成人在线视频免费| 26uuu亚洲国产精品| 午夜伦理在线视频| 中文字幕在线看视频国产欧美在线看完整| 午夜精品久久久久久久99老熟妇| 欧美最猛黑人xxxxx猛交| 欧美成人黄色网| 国产精品视频九色porn| 国产福利短视频| 国产成人欧美日韩在线电影| 日本人视频jizz页码69| 亚洲一区日本| 欧美午夜小视频| 午夜电影亚洲| 路边理发店露脸熟妇泻火| 日韩激情免费| 欧美日韩最好看的视频| 欧美大片网址| 国产精品果冻传媒潘| 精品视频一区二区三区在线观看| 国产精品视频中文字幕91| 裤袜国产欧美精品一区| 91精品国产色综合久久不卡98口| 182tv在线播放| 久久网福利资源网站| 五月香视频在线观看| 在线观看视频亚洲| 成人免费在线电影| 亚洲无亚洲人成网站77777| 三级在线播放| 亚洲精品自拍视频| 手机看片福利永久| 亚洲黄色在线看| 欧美天堂在线视频| 日韩黄在线观看| 污视频网站在线播放| 日韩黄色av网站| 同心难改在线观看| 亚洲欧美日韩中文在线制服| 少妇性bbb搡bbb爽爽爽欧美| 国产视频欧美视频| 丝袜视频国产在线播放| 精品视频在线导航| 久久久久久久久亚洲精品| 国产视频久久网| 国产在线电影| 色爱av美腿丝袜综合粉嫩av| 午夜视频在线| 久久人体大胆视频| 色呦呦在线资源| 国内精品久久久| 性欧美18xxxhd| 国产精品精品久久久久久| 日韩免费小视频| 91久久久久久久久久| 日本综合精品一区| 国产精品久久久久免费| 日韩av影院| 污视频在线免费观看一区二区三区 | 石原莉奈一区二区三区在线观看| 欧美亚洲日本在线观看| 日本欧美一区二区在线观看| 午夜不卡福利视频| 国产成人av福利| 30一40一50老女人毛片| 国产欧美精品一区二区色综合朱莉| 精品人伦一区二区| 亚洲欧洲另类国产综合| 国产一级在线视频| 欧美性xxxx极品高清hd直播| 中文字幕免费在线看| 欧美一区二区三区人| 欧美视频在线观看一区二区三区| 亚洲精选一区二区| 国产视频在线播放| 91av福利视频| 久久亚洲资源中文字| 91丨九色丨国产| 国产欧美日韩精品一区二区三区| 一本久道久久综合| 在线日本高清免费不卡| 青青草精品视频在线观看| 国产精品一区免费视频| 丰满大乳奶做爰ⅹxx视频 | 色综合视频二区偷拍在线| 亚洲影视一区| 欧美日韩在线中文| 国内精品不卡在线| 成人午夜福利一区二区| 亚洲视频你懂的| 草莓视频18免费观看| 欧美一级理论片| 国产精品视频二区三区| 欧美日本国产在线| 91在线亚洲| 国产亚洲欧美一区二区三区| 99热在线成人| 国产一区亚洲二区三区| 成人精品免费网站| 永久免费未视频| 日韩欧美精品在线观看| 精品人妻一区二区三区蜜桃| 国产一区二区三区视频| 久久青草伊人| 亚洲伊人久久综合| 日本黄色精品| 男女高潮又爽又黄又无遮挡| 国产激情91久久精品导航| 一区二区三区在线观看免费视频| 亚洲高清中文字幕| 国产男男gay体育生白袜| 中国人与牲禽动交精品| 免费一二一二在线视频| 翡翠波斯猫1977年美国| 亚洲精品中文字幕乱码| 亚洲36d大奶网| 久久众筹精品私拍模特| 日产电影一区二区三区| 日韩免费观看高清完整版 | 日本久久久久久久久| 亚洲精品一区二区三区中文字幕| 中文字幕日韩精品久久| 秋霞午夜鲁丝一区二区老狼| 蜜桃无码一区二区三区| 精品福利免费观看| 人妻精品一区二区三区| 欧美国产日韩二区| 在线播放一区二区精品视频| 亚洲 欧洲 日韩| 精一区二区三区| 日本视频在线免费| 欧美日韩精品欧美日韩精品| jizz在线观看视频| 国产免费一区视频观看免费| 日韩欧美一区二区三区免费看| 亚洲人成无码www久久久| 久久嫩草精品久久久精品一| 久久精品国产成人av| 日韩精品在线免费播放| 午夜久久中文| 欧美精品一区二区三区在线四季| 亚洲综合好骚| 精品久久久久久中文字幕人妻最新| 欧美日韩国产在线看| 香蕉视频国产在线| 91av在线精品| av一区二区在线播放| 天天色综合社区| 综合久久国产九一剧情麻豆| 99热这里只有精品在线观看| 欧美床上激情在线观看| 91亚洲无吗| 色欲av无码一区二区人妻| 久久色在线视频| 这里只有精品免费视频| 久久精品美女视频网站| 九九99久久精品在免费线bt| 黄色一级片在线看| 26uuu国产一区二区三区 | 91精品国产综合久久精品麻豆| 国产精品刘玥久久一区| 成人做爰66片免费看网站| 99在线热播精品免费99热| 欧美另类z0zx974| 欧美精品三级在线观看| 欧美性video| 欧美国产视频在线观看| 久久精品一本| 最新av电影网站| 亚洲精品一区二区三区99| 新版的欧美在线视频| 一区二区视频在线播放| 粉嫩av一区二区三区在线播放| 九九热在线免费观看| 中文字幕亚洲综合久久筱田步美| 日韩中文字幕在线一区| 国内外成人激情视频| 国产精品成人一区二区艾草 | 日本视频免费在线| 尤物精品国产第一福利三区 | 亚洲少妇xxx| 精品国产一区久久| 亚洲爱爱视频| 日本香蕉视频在线观看| 国产亚洲综合在线| www.污视频| 国产精品精品久久久| 极品少妇一区二区三区| 欧美三级视频网站| 亚洲黄页网在线观看| 亚洲ww精品| 欧美韩国日本在线|