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

看一遍就理解order by

數據庫 MySQL
日常開發中,我們經常會使用到order by,親愛的小伙伴,你是否知道order by 的工作原理呢?order by的優化思路是怎樣的呢?使用order by有哪些注意的問題呢?本文將跟大家一起來學習,攻克order by~。

 前言

日常開發中,我們經常會使用到order by,親愛的小伙伴,你是否知道order by 的工作原理呢?order by的優化思路是怎樣的呢?使用order by有哪些注意的問題呢?本文將跟大家一起來學習,攻克order by~

  •  微信公眾號:撿田螺的小男孩

一個使用order by 的簡單例子

假設用一張員工表,表結構如下: 

  1. CREATE TABLE `staff` (  
  2. `id` BIGINT ( 11 ) AUTO_INCREMENT COMMENT '主鍵id',  
  3. `id_card` VARCHAR ( 20 ) NOT NULL COMMENT '身份證號碼',  
  4. `name` VARCHAR ( 64 ) NOT NULL COMMENT '姓名',  
  5. `age` INT ( 4 ) NOT NULL COMMENT '年齡',  
  6. `city` VARCHAR ( 64 ) NOT NULL COMMENT '城市',  
  7. PRIMARY KEY ( `id`),  
  8. INDEX idx_city ( `city` )  
  9. ENGINE = INNODB COMMENT '員工表'; 

表數據如下:

我們現在有這么一個需求:查詢前10個,來自深圳員工的姓名、年齡、城市,并且按照年齡小到大排序。對應的 SQL 語句就可以這么寫: 

  1. select name,age,city from staff where city = '深圳' order by age limit 10; 

這條語句的邏輯很清楚,但是它的底層執行流程是怎樣的呢?

order by 工作原理

explain 執行計劃

我們先用Explain關鍵字查看一下執行計劃

  •  執行計劃的key這個字段,表示使用到索引idx_city
  •  Extra 這個字段的 Using index condition 表示索引條件
  •  Extra 這個字段的 Using filesort表示用到排序

我們可以發現,這條SQL使用到了索引,并且也用到排序。那么它是怎么排序的呢?

全字段排序

MySQL 會給每個查詢線程分配一塊小內存,用于排序的,稱為 sort_buffer。什么時候把字段放進去排序呢,其實是通過idx_city索引找到對應的數據,才把數據放進去啦。

我們回顧下索引是怎么找到匹配的數據的,現在先把索引樹畫出來吧,idx_city索引樹如下:

idx_city索引樹,葉子節點存儲的是主鍵id。還有一棵id主鍵聚族索引樹,我們再畫出聚族索引樹圖吧:

 

我們的查詢語句是怎么找到匹配數據的呢?先通過idx_city索引樹,找到對應的主鍵id,然后再通過拿到的主鍵id,搜索id主鍵索引樹,找到對應的行數據。

加上order by之后,整體的執行流程就是:

  1.   MySQL 為對應的線程初始化sort_buffer,放入需要查詢的name、age、city字段;
  2.   從索引樹idx_city, 找到第一個滿足 city='深圳’條件的主鍵 id,也就是圖中的id=9;
  3.   到主鍵 id 索引樹拿到id=9的這一行數據, 取name、age、city三個字段的值,存到sort_buffer;
  4.   從索引樹idx_city 拿到下一個記錄的主鍵 id,即圖中的id=13;
  5.   重復步驟 3、4 直到city的值不等于深圳為止;
  6.   前面5步已經查找到了所有city為深圳的數據,在 sort_buffer中,將所有數據根據age進行排序;
  7.   按照排序結果取前10行返回給客戶端。

執行示意圖如下:

將查詢所需的字段全部讀取到sort_buffer中,就是全字段排序。這里面,有些小伙伴可能會有個疑問,把查詢的所有字段都放到sort_buffer,而sort_buffer是一塊內存來的,如果數據量太大,sort_buffer放不下怎么辦呢?

磁盤臨時文件輔助排序

實際上,sort_buffer的大小是由一個參數控制的:sort_buffer_size。如果要排序的數據小于sort_buffer_size,排序在sort_buffer 內存中完成,如果要排序的數據大于sort_buffer_size,則借助磁盤文件來進行排序

如何確定是否使用了磁盤文件來進行排序呢?可以使用以下這幾個命令 

  1. ## 打開optimizer_trace,開啟統計  
  2. set optimizer_trace = "enabled=on" 
  3. ## 執行SQL語句  
  4. select name,age,city from staff where city = '深圳' order by age limit 10;  
  5. ## 查詢輸出的統計信息  
  6. select * from information_schema.optimizer_trace  

可以從 number_of_tmp_files 中看出,是否使用了臨時文件。

number_of_tmp_files 表示使用來排序的磁盤臨時文件數。如果number_of_tmp_files>0,則表示使用了磁盤文件來進行排序。

使用了磁盤臨時文件,整個排序過程又是怎樣的呢?

  1.  從主鍵Id索引樹,拿到需要的數據,并放到sort_buffer內存塊中。當sort_buffer快要滿時,就對sort_buffer中的數據排序,排完后,把數據臨時放到磁盤一個小文件中。
  2.  繼續回到主鍵 id 索引樹取數據,繼續放到sort_buffer內存中,排序后,也把這些數據寫入到磁盤臨時小文件中。
  3.  繼續循環,直到取出所有滿足條件的數據。最后把磁盤的臨時排好序的小文件,合并成一個有序的大文件。

TPS: 借助磁盤臨時小文件排序,實際上使用的是歸并排序算法。

小伙伴們可能會有個疑問,既然sort_buffer放不下,就需要用到臨時磁盤文件,這會影響排序效率。那為什么還要把排序不相關的字段(name,city)放到sort_buffer中呢?只放排序相關的age字段,它不香嗎?可以了解下rowid 排序。

rowid 排序

rowid 排序就是,只把查詢SQL需要用于排序的字段和主鍵id,放到sort_buffer中。那怎么確定走的是全字段排序還是rowid 排序排序呢?

實際上有個參數控制的。這個參數就是max_length_for_sort_data,它表示MySQL用于排序行數據的長度的一個參數,如果單行的長度超過這個值,MySQL 就認為單行太大,就換rowid 排序。我們可以通過命令看下這個參數取值。 

  1. show variables like 'max_length_for_sort_data'; 

max_length_for_sort_data 默認值是1024。因為本文示例中name,age,city長度=64+4+64 =132 < 1024, 所以走的是全字段排序。我們來改下這個參數,改小一點, 

  1. ## 修改排序數據最大單行長度為32  
  2. set max_length_for_sort_data = 32 
  3. ## 執行查詢SQL  
  4. select name,age,city from staff where city = '深圳' order by age limit 10; 

使用rowid 排序的話,整個SQL執行流程又是怎樣的呢?

  1.   MySQL 為對應的線程初始化sort_buffer,放入需要排序的age字段,以及主鍵id;
  2.   從索引樹idx_city, 找到第一個滿足 city='深圳’條件的主鍵 id,也就是圖中的id=9;
  3.   到主鍵 id 索引樹拿到id=9的這一行數據, 取age和主鍵id的值,存到sort_buffer;
  4.   從索引樹idx_city 拿到下一個記錄的主鍵 id,即圖中的id=13;
  5.   重復步驟 3、4 直到city的值不等于深圳為止;
  6.   前面5步已經查找到了所有city為深圳的數據,在 sort_buffer中,將所有數據根據age進行排序;
  7.   遍歷排序結果,取前10行,并按照 id 的值回到原表中,取出city、name 和 age 三個字段返回給客戶端。

執行示意圖如下:

對比一下全字段排序的流程,rowid 排序多了一次回表。

    ★    什么是回表?拿到主鍵再回到主鍵索引查詢的過程,就叫做回表”

我們通過optimizer_trace,可以看到是否使用了rowid排序的: 

  1. ## 打開optimizer_trace,開啟統計  
  2. set optimizer_trace = "enabled=on" 
  3. ## 執行SQL語句  
  4. select name,age,city from staff where city = '深圳' order by age limit 10;  
  5. ## 查詢輸出的統計信息  
  6. select * from information_schema.optimizer_trace  

全字段排序與rowid排序對比

  •  全字段排序:sort_buffer內存不夠的話,就需要用到磁盤臨時文件,造成磁盤訪問。
  •  rowid排序:sort_buffer可以放更多數據,但是需要再回到原表去取數據,比全字段排序多一次回表。

一般情況下,對于InnoDB存儲引擎,會優先使用全字段排序。可以發現 max_length_for_sort_data 參數設置為1024,這個數比較大的。一般情況下,排序字段不會超過這個值,也就是都會走全字段排序。

order by的一些優化思路

我們如何優化order by語句呢?

  •  因為數據是無序的,所以就需要排序。如果數據本身是有序的,那就不用排了。而索引數據本身是有序的,我們通過建立聯合索引,優化order by 語句。
  •  我們還可以通過調整max_length_for_sort_data等參數優化;

聯合索引優化

再回顧下示例SQL的查詢計劃 

  1. explain select name,age,city from staff where city = '深圳' order by age limit 10; 

我們給查詢條件city和排序字段age,加個聯合索引idx_city_age。再去查看執行計劃:

  1. alter table staff add  index idx_city_age(city,age);  
  2. explain select name,age,city from staff where city = '深圳' order by age limit 10; 

可以發現,加上idx_city_age聯合索引,就不需要Using filesort排序了。為什么呢?因為索引本身是有序的,我們可以看下idx_city_age聯合索引示意圖,如下:

整個SQL執行流程變成醬紫:

  1.  從索引idx_city_age找到滿足city='深圳’ 的主鍵 id
  2.  到主鍵 id索引取出整行,拿到 name、city、age 三個字段的值,作為結果集的一部分直接返回
  3.  從索引idx_city_age取下一個記錄主鍵id
  4.  重復步驟 2、3,直到查到第10條記錄,或者是不滿足city='深圳’ 條件時循環結束。

流程示意圖如下:

從示意圖看來,還是有一次回表操作。針對本次示例,有沒有更高效的方案呢?有的,可以使用覆蓋索引:

    ★    覆蓋索引:在查詢的數據列里面,不需要回表去查,直接從索引列就能取到想要的結果。換句話說,你SQL用到的索引列數據,覆蓋了查詢結果的列,就算上覆蓋索引了。”

我們給city,name,age 組成一個聯合索引,即可用到了覆蓋索引,這時候SQL執行時,連回表操作都可以省去啦。

調整參數優化

我們還可以通過調整參數,去優化order by的執行。比如可以調整sort_buffer_size的值。因為sort_buffer值太小,數據量大的話,會借助磁盤臨時文件排序。如果MySQL服務器配置高的話,可以使用稍微調整大點。

我們還可以調整max_length_for_sort_data的值,這個值太小的話,order by會走rowid排序,會回表,降低查詢性能。所以max_length_for_sort_data可以適當大一點。

當然,很多時候,這些MySQL參數值,我們直接采用默認值就可以了。

使用order by 的一些注意點

沒有where條件,order by字段需要加索引嗎

日常開發過程中,我們可能會遇到沒有where條件的order by,那么,這時候order by后面的字段是否需要加索引呢。如有這么一個SQL,create_time是否需要加索引: 

  1. select * from A order by create_time; 

無條件查詢的話,即使create_time上有索引,也不會使用到。因為MySQL優化器認為走普通二級索引,再去回表成本比全表掃描排序更高。所以選擇走全表掃描,然后根據全字段排序或者rowid排序來進行。

如果查詢SQL修改一下: 

  1. select * from A order by create_time limit m; 
  • 無條件查詢,如果m值較小,是可以走索引的.因為MySQL優化器認為,根據索引有序性去回表查數據,然后得到m條數據,就可以終止循環,那么成本比全表掃描小,則選擇走二級索引。

分頁limit過大時,會導致大量排序怎么辦?

假設SQL如下: 

  1. select * from A order by a limit 100000,10 
  •  可以記錄上一頁最后的id,下一頁查詢時,查詢條件帶上id,如:where id > 上一頁最后id limit 10。
  •  也可以在業務允許的情況下,限制頁數。

索引存儲順序與order by不一致,如何優化?

假設有聯合索引 idx_age_name, 我們需求修改為這樣:查詢前10個員工的姓名、年齡,并且按照年齡小到大排序,如果年齡相同,則按姓名降序排。對應的 SQL 語句就可以這么寫: 

  1. select name,age from staff  order by age ,name desc limit 10; 

我們看下執行計劃,發現使用到Using filesort。

這是因為,idx_age_name索引樹中,age從小到大排序,如果age相同,再按name從小到大排序。而order by 中,是按age從小到大排序,如果age相同,再按name從大到小排序。也就是說,索引存儲順序與order by不一致。

我們怎么優化呢?如果MySQL是8.0版本,支持Descending Indexes,可以這樣修改索引: 

  1. CREATE TABLE `staff` (  
  2.   `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵id',  
  3.   `id_card` varchar(20) NOT NULL COMMENT '身份證號碼',  
  4.   `name` varchar(64) NOT NULL COMMENT '姓名',  
  5.   `age` int(4) NOT NULL COMMENT '年齡',  
  6.   `city` varchar(64) NOT NULL COMMENT '城市',  
  7.   PRIMARY KEY (`id`),  
  8.   KEY `idx_age_name` (`age`,`name` desc) USING BTREE  
  9. ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='員工表'

使用了in條件多個屬性時,SQL執行是否有排序過程

如果我們有聯合索引idx_city_name,執行這個SQL的話,是不會走排序過程的,如下: 

  1. select * from staff where city in ('深圳') order by age limit 10; 

但是,如果使用in條件,并且有多個條件時,就會有排序過程。 

  1. explain select * from staff where city in ('深圳','上海') order by age limit 10; 

這是因為:in有兩個條件,在滿足深圳時,age是排好序的,但是把滿足上海的age也加進來,就不能保證滿足所有的age都是排好序的。因此需要Using filesort。

 

責任編輯:龐桂玉 來源: 數據庫開發
相關推薦

2021-06-15 07:15:15

Oracle底層explain

2022-01-17 20:59:37

開發group by思路

2025-02-13 09:06:27

2021-12-01 07:26:13

IO模型異步

2024-03-26 07:59:32

IO模型多路復用

2024-03-12 08:20:57

零拷貝存儲開發

2021-10-07 20:12:03

MVCC事務原理

2020-02-09 17:30:54

反轉鏈表程序員節點

2022-05-08 23:05:38

Route-Poli路由策略

2019-03-19 14:11:44

VLANLANMAC

2023-09-12 07:31:45

HashMap線程

2022-08-26 10:41:03

指針C語言

2019-09-19 08:04:40

網絡七層模型TCPUDP

2021-10-08 07:53:01

事務隔離級別

2023-08-14 07:49:42

AI訓練

2023-01-10 19:47:47

Redis原理多線程

2017-12-26 14:17:24

潤乾報表

2021-11-25 08:16:46

Wi-FiWi-Fi 6路由Wi-Fi 5

2015-10-10 11:10:24

重敲代碼拷貝粘貼

2021-03-11 07:14:01

Epoll原理線程
點贊
收藏

51CTO技術棧公眾號

在线观看毛片av| 久久精品视频18| 成人在线黄色电影| 久久一日本道色综合| 日本久久久久久久久久久| 久久视频精品在线观看| 日韩国产在线不卡视频| 午夜久久电影网| 五月婷婷综合色| 国产乱码精品一区二三区蜜臂 | 国产精品99精品无码视| 九九综合九九| 日韩视频国产视频| 久久精品香蕉视频| 日本在线视频网址| 国产拍欧美日韩视频二区| 5566av亚洲| 最近中文字幕在线免费观看| 国产一区美女| 精品国产一区二区三区在线观看 | 久久久久久久综合日本| 91久久久久久久久久| 日韩毛片一区二区三区| 欧美 日韩 国产一区二区在线视频| 亚洲男人天堂2019| 99久久综合网| 欧美大陆国产| 一本大道久久a久久综合婷婷 | 亚欧美中日韩视频| 欧美精品在线观看| 妖精视频在线观看免费| 神马香蕉久久| 亚洲а∨天堂久久精品9966 | 中文成人激情娱乐网| 欧美日韩国产丝袜另类| 丁香色欲久久久久久综合网| 9i精品一二三区| 26uuu亚洲综合色| 国产高清一区二区三区| 国产青青草视频| 免费高清在线一区| 国产精品久久国产精品99gif| 精品在线视频免费观看| 女主播福利一区| 操日韩av在线电影| 神马久久精品综合| 99久久www免费| 最近2019中文字幕在线高清| 永久免费av无码网站性色av| 国产一区二区欧美| 亚洲色图18p| 国产精品亚洲无码| 亚洲人成亚洲精品| 日韩精品视频在线免费观看| 小毛片在线观看| 久草在线综合| 亚洲精品97久久| 国产伦精品一区二区免费| 成人资源在线播放| 日韩欧美在线影院| 欧美69精品久久久久久不卡| 18国产精品| 亚洲第一页中文字幕| 国产伦精品一区二区三区88av| 97久久精品| 亚洲国内精品视频| 黄色性生活一级片| 奇米狠狠一区二区三区| 亚洲人成电影在线观看天堂色| 日韩精品电影一区二区| 国产成人短视频在线观看| 亚洲色图美腿丝袜| 一级在线观看视频| 亚洲乱码电影| 欧美极品少妇xxxxⅹ裸体艺术| 香蕉免费毛片视频| 久久久人人人| 国产精品你懂得| 国产免费叼嘿网站免费| 国产iv一区二区三区| 精品久久精品久久| 国产特黄在线| 亚洲欧洲制服丝袜| 青青草成人免费在线视频| 亚洲最大成人| 91精品啪在线观看国产60岁| 无码av免费精品一区二区三区| 日韩av资源网| 中文字幕日韩综合av| 成年人午夜剧场| 一区二区三区成人精品| 国产精品亚洲网站| 精品国产无码一区二区| 久久综合久色欧美综合狠狠| 欧美极品一区二区| 欧美极品视频| 欧美日韩午夜剧场| 97超碰成人在线| 色狠狠久久av综合| 波霸ol色综合久久| 国产原创视频在线| 国产精品一区二区久久不卡| 久久综合一区二区三区| 国产午夜精品久久久久免费视| 午夜欧美大尺度福利影院在线看 | 成人的网站免费观看| 色播五月综合| 678在线观看视频| 欧美日韩视频一区二区| 色婷婷精品久久二区二区密 | 成人一级生活片| 成人在线观看免费播放| 亚洲国产99精品国自产| 亚洲AV成人无码精电影在线| 国产九九精品| 亚洲曰本av电影| 岛国大片在线观看| 亚洲电影在线播放| 污网站在线免费| 亚洲香蕉视频| 久久久在线免费观看| 一级片aaaa| 久久久国产一区二区三区四区小说 | 天天操天天射天天| 中文字幕中文乱码欧美一区二区 | 伊人久久高清| 国产在线日韩欧美| 欧美亚洲另类久久综合| 色婷婷av在线| 欧美男人的天堂一二区| 88久久精品无码一区二区毛片| 欧美私人啪啪vps| 91精品中国老女人| 在线观看国产原创自拍视频| 色婷婷综合久久久中文字幕| 欧美在线一级片| 亚洲精品九九| 国产精品区一区二区三含羞草| 日本在线观看www| 91福利视频在线| a级片在线观看| 久久一二三四| 欧美日韩精品综合| 亚洲精品88| 亚洲精品一线二线三线| 午夜免费激情视频| 韩国三级在线一区| 一区二区三区四区欧美| www.成人在线视频| 中文字幕精品一区久久久久| 波多野结衣高清视频| 久久久亚洲精品石原莉奈| 丰满少妇被猛烈进入高清播放| 黑人久久a级毛片免费观看| 色综合男人天堂| 精品二区在线观看| 成人性生交大片免费看视频在线 | 国产成人无码一区二区在线观看| 黄色欧美日韩| 高清日韩一区| 欧美男男tv网站在线播放| 亚洲伦理中文字幕| 国产精品午夜一区二区| 中文字幕av一区二区三区高| www.夜夜爽| 欧美 日韩 国产 一区| 国产精品久久久对白| 超碰高清在线| 亚洲天堂男人的天堂| 中国精品一区二区| 亚洲欧美在线aaa| wwwww在线观看| 亚洲少妇在线| 午夜精品视频在线观看一区二区 | 国产亚洲精品v| 欧美日韩另类丝袜其他| 欧美激情三区| 欧美另类暴力丝袜| 亚洲av成人精品一区二区三区在线播放 | av动漫在线免费观看| 激情av综合| 国产精品美女在线观看| 黄色成人在线| 亚洲精品国产综合久久| 国产第一页在线观看| 亚洲视频一区二区在线观看| 特种兵之深入敌后| 国产日韩精品视频一区二区三区 | 欧美va天堂va视频va在线| 久久夜靖品2区| 欧美激情资源网| 日本一区二区三区在线免费观看| 亚洲精品人人| 婷婷久久五月天| 99久久人爽人人添人人澡| 人九九综合九九宗合| 米奇精品一区二区三区| 亚洲精品久久久久久久久| 在线播放精品视频| 亚洲午夜精品在线| 欧美福利第一页| 成人性生交大合| 激情 小说 亚洲 图片: 伦| 国产精品v亚洲精品v日韩精品| 免费看成人片| 日韩中文字幕视频网| 欧洲亚洲免费视频| 羞羞视频在线观看不卡| 一区国产精品视频| 欧美在线精品一区二区三区| 欧美日韩美少妇| 日韩视频免费观看高清| 亚洲三级在线免费观看| 波多野吉衣中文字幕| 国产福利电影一区二区三区| 亚洲视频在线a| 亚洲国产导航| 欧美 国产 精品| 日韩成人精品一区二区| 久久av一区二区| 久久wwww| 国产欧美精品一区二区三区-老狼 国产欧美精品一区二区三区介绍 国产欧美精品一区二区 | 受虐m奴xxx在线观看| 成人av网站大全| 下面一进一出好爽视频| 蜜臀av一级做a爰片久久| 久久黄色片视频| 欧美精选在线| 国产欧美自拍视频| 成人在线亚洲| 免费不卡亚洲欧美| 黄色网一区二区| 动漫精品视频| 日韩第一区第二区| 91久久国产自产拍夜夜嗨| 国产成人久久精品麻豆二区| 日韩av电影国产| 欧美特黄aaaaaaaa大片| 91精品国产91久久久| 国产在线观看www| 欧美疯狂性受xxxxx另类| av中文字幕在线观看| 精品国内自产拍在线观看| www免费网站在线观看| 亚洲日本中文字幕| 国产在线黄色| 亚洲人成电影在线播放| 男人天堂网在线观看| 亚洲免费高清视频| 清纯唯美亚洲色图| 色婷婷久久99综合精品jk白丝| 日韩精品人妻中文字幕| 亚洲国产毛片aaaaa无费看| xxxx 国产| 黑人巨大精品欧美一区二区一视频| 日韩乱码人妻无码中文字幕| 亚洲高清在线视频| 亚洲黄色三级视频| 精品久久久久久久中文字幕| 国产日产精品一区二区三区| 一本久久a久久精品亚洲| 最好看的日本字幕mv视频大全| 欧美主播一区二区三区| √天堂中文官网8在线| 亚洲欧美在线另类| 免费日韩在线视频| 性做久久久久久| 国产成人无码一区二区在线播放| 色老头久久综合| 91麻豆成人精品国产| 91精品国产日韩91久久久久久| av男人天堂网| 亚洲成人av在线| 精品99又大又爽又硬少妇毛片| 日韩在线国产精品| 宅男在线观看免费高清网站| 午夜精品www| 嫩草伊人久久精品少妇av杨幂| 91精品在线观| 人人网欧美视频| 日韩欧美一区二区三区四区五区| 午夜精品毛片| www..com日韩| 日韩精品成人一区二区三区| 福利视频999| 成人午夜av电影| 亚洲一区二区三区日韩| 亚洲免费色视频| 国产成人在线观看网站| 欧美午夜一区二区| 性猛交富婆╳xxx乱大交天津 | 99re国产视频| 国产欧美一区二区三区精品观看| 黄色高清视频网站| 99国产成+人+综合+亚洲欧美| wwww.国产| 成人的网站免费观看| 99精品全国免费观看| 亚瑟在线精品视频| 这里只有精品6| 精品偷拍一区二区三区在线看| 免费在线视频欧美| 26uuu亚洲伊人春色| 四虎地址8848精品| 乱色588欧美| 你懂的成人av| 国产又黄又猛又粗| 9人人澡人人爽人人精品| 任我爽在线视频| 一本色道久久综合亚洲91| 亚洲av无码国产精品永久一区 | 久久精品久久精品| 亚洲av成人无码一二三在线观看| 中文字幕一区二区不卡| 午夜毛片在线观看| 日韩欧美国产一区二区在线播放| 可以在线观看的av| 午夜精品久久久久久久久久久久 | 精品国产1区二区| 伊人免费在线| 欧美在线性爱视频| 中文字幕区一区二区三| 亚洲日本无吗高清不卡| 噜噜噜91成人网| 老司机午夜免费福利| 亚洲精品日日夜夜| 国产在成人精品线拍偷自揄拍| 亚洲欧洲国产伦综合| 美女露胸视频在线观看| 999热视频在线观看| 婷婷伊人综合| 高清av免费看| 日本一区二区三区免费乱视频 | 欧美一区二区三区的| 成人一区二区不卡免费| 欧美专区在线视频| 久久精品66| 91午夜在线观看| 国产成人免费在线观看不卡| 亚洲二区在线播放| 欧美精品久久天天躁| 91社区在线| 国产精品久久久久9999| av中字幕久久| 韩国中文字幕av| 日本一区二区三区免费乱视频| 夜夜躁日日躁狠狠久久av| 亚洲欧洲免费视频| 肉色欧美久久久久久久免费看| 六月婷婷久久| 久久一区中文字幕| 美女爆乳18禁www久久久久久| 91成人免费在线视频| 国产福利免费在线观看| 国产精品女人网站| 99久久精品网站| 青青草原播放器| 亚洲福利视频导航| 视频国产一区二区三区| 日韩免费观看网站| 欧美三级三级| 一区二区免费av| 一二三区精品视频| 欧美视频xxx| 青青青国产精品一区二区| 欧洲杯半决赛直播| 永久免费黄色片| 亚洲国产美女搞黄色| 深夜福利在线看| 国产精品青青在线观看爽香蕉| 久久在线视频免费观看| 两性午夜免费视频| 午夜欧美视频在线观看| 精品欧美不卡一区二区在线观看| 国产精品视频内| 综合久久久久| 中文字幕日韩三级片| 在线观看亚洲精品视频| 蜜桃视频网站在线| 国产呦系列欧美呦日韩呦| 手机精品视频在线观看| 免费一级suv好看的国产网站| 91精品婷婷国产综合久久 | 欧美日韩午夜| 97香蕉碰碰人妻国产欧美| 91精品福利在线| 粗大黑人巨茎大战欧美成人| 动漫美女被爆操久久久| 日韩黄色小视频| 免费人成视频在线| 国产亚洲欧美一区| 日韩在线成人| 无码内射中文字幕岛国片| 亚洲色欲色欲www在线观看| 日韩一卡二卡在线| 成人精品一区二区三区电影免费| 99精品热视频只有精品10| 91香蕉视频污在线观看| 亚洲国产女人aaa毛片在线| 偷拍自拍亚洲|