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

詳解如何優(yōu)雅實(shí)現(xiàn)先分組再組內(nèi)排序取數(shù)據(jù)解決方案

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
分組后組內(nèi)排序取第一條記錄的操作,是 SQL 查詢中的高頻需求。推薦優(yōu)先使用窗口函數(shù) ROW_NUMBER(),其次是子查詢方法,并根據(jù)實(shí)際業(yè)務(wù)場(chǎng)景選擇合適的實(shí)現(xiàn)方式。

1.背景

之前有一段時(shí)間,老碰到一個(gè)需求業(yè)務(wù)邏輯場(chǎng)景:先對(duì)數(shù)據(jù)進(jìn)行分組,然后在每組數(shù)據(jù)內(nèi)按某種規(guī)則排序,最后取出每組的第一條記錄,當(dāng)然也不一定就是取第一條數(shù)據(jù),也有可能是取前兩條數(shù)據(jù)等等,看具體業(yè)務(wù)邏輯需要,總的來(lái)說(shuō)是一種在數(shù)據(jù)庫(kù)查詢中常見(jiàn)的業(yè)務(wù)需求。本文將詳細(xì)從使用MySQL, elasticsearch等方式總結(jié)這種操作的實(shí)現(xiàn)方案、使用場(chǎng)景以及優(yōu)化技巧。

2.準(zhǔn)備工作

所謂萬(wàn)事俱備只欠東風(fēng),要研究這個(gè)查詢場(chǎng)景就得先準(zhǔn)備好數(shù)據(jù),還是使用一貫的用戶表User:

CREATE TABLE`tb_user` (
`id`bigint(20) NOTNULL AUTO_INCREMENT COMMENT'主鍵',
`user_no`varchar(255) NOTNULLCOMMENT'編號(hào)',
`name`varchar(255) DEFAULTNULLCOMMENT'昵稱',
`email`varchar(255) DEFAULTNULLCOMMENT'郵箱',
`phone`varchar(255) NOTNULLCOMMENT'手機(jī)號(hào)',
`gender`tinyint(4) NOTNULLDEFAULT'0'COMMENT'性別  0:男生   1:女生',
`birthday`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMPCOMMENT'出生日期',
`is_delete`tinyint(4) NOTNULLDEFAULT'0'COMMENT'刪除標(biāo)志 0:否  1:是',
`create_time` datetime DEFAULTNULLCOMMENT'創(chuàng)建時(shí)間',
`update_time` datetime DEFAULTNULLCOMMENT'更新時(shí)間',
`create_by`bigint(20) DEFAULTNULLCOMMENT'創(chuàng)建人',
`update_by`bigint(20) DEFAULTNULLCOMMENT'更新人',
`address`varchar(1024) DEFAULTNULLCOMMENT'地址',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5201011DEFAULTCHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

這里我插入了500多萬(wàn)條數(shù)據(jù),為啥是500w條數(shù)據(jù)?因?yàn)槲矣袀€(gè)小目標(biāo)先掙個(gè)500w,哈哈,開(kāi)個(gè)玩笑跑題了~~~,其實(shí)是我個(gè)人認(rèn)為單表500w條數(shù)據(jù)不多也不少,正好可以驗(yàn)證一些SQL性能差異。

圖片圖片

插入都是比較真實(shí)的模擬數(shù)據(jù),至于怎么插入這么多數(shù)據(jù),你可以寫(xiě)寫(xiě)存儲(chǔ)過(guò)程,或者使用代碼腳本插入,想使用代碼插入的,可以看看之前我們總結(jié)的文章:最近做百萬(wàn)級(jí)數(shù)據(jù)性能壓測(cè),來(lái)看看人家如何使用MyBatis 優(yōu)雅批量插入數(shù)據(jù),從80s優(yōu)化到1s!!!

這里我使用的數(shù)據(jù)庫(kù)配置是:阿里云的云數(shù)據(jù)庫(kù)RDS-MySQL 2核4GB,阿里云上可以免費(fèi)使用3個(gè)月,有需要的可以去申請(qǐng)

數(shù)據(jù)已到位,我們開(kāi)始分析先分組、再組內(nèi)排序取數(shù)據(jù)實(shí)現(xiàn)方式,基于上面的數(shù)據(jù):我們根據(jù)名字查詢出每個(gè)名字最近插入的個(gè)人信息

3.MySQL實(shí)現(xiàn)

數(shù)據(jù)庫(kù)查詢,一條SQL搞定,永遠(yuǎn)是我們?cè)趯?shí)現(xiàn)功能需求邏輯的第一追求,當(dāng)然只是首選也不一定必選,要考慮性能問(wèn)題,凡事不能一概而論,這就像算法的好壞需要從空間和時(shí)間兩個(gè)維度去考量一個(gè)道理。言歸正傳,我們看看數(shù)據(jù)庫(kù)MySQL查詢層面有哪些實(shí)現(xiàn)方式

3.1 使用窗口函數(shù) ROW_NUMBER()

窗口函數(shù)是解決該問(wèn)題的首選方法,既簡(jiǎn)潔又高效

SELECT
 * 
FROM
 ( SELECTid, NAME, birthday, ROW_NUMBER () OVER ( PARTITIONBYNAMEORDERBYidDESC ) AS row_num FROM tb_user
   wherenamein('徐千云', '李億石')
 ) AS u 
WHERE
 u.row_num=1

查詢結(jié)果:

圖片圖片

耗時(shí):1.547s  注意窗口函數(shù)要 MySQL 8.0 及以上版本才有哦。

3.2 使用子查詢和JOIN關(guān)聯(lián)查詢

話不多說(shuō)直接上SQL:

SELECT id, name, birthday from tb_user 
where id in (SELECT MAX(id) from tb_user where name in('徐千云', '李億石') group by name)

耗時(shí):3.687s   明顯比使用窗口函數(shù)要慢的多

換一種寫(xiě)法:

SELECT id, name, birthday from tb_user u
INNER JOIN (SELECT MAX(id) max_id from tb_user where name in('徐千云', '李億石') group by name) as t
on u.id=t.max_id

耗時(shí):1.418s  明顯比子查詢快很多,這就是大量數(shù)據(jù)下,不同的SQL查詢性能差別是挺大的

3.3 優(yōu)化點(diǎn)

上面的查詢最快的都要1s多,這算是慢查詢了肯定要優(yōu)化,直接加索引

ALTER TABLE `db_test`.`tb_user` 
ADD INDEX `idx_name`(`name`) USING BTREE;

500w條的數(shù)據(jù)表,加索引會(huì)需要小一會(huì)兒。加完索引再次分別執(zhí)行上面的SQL語(yǔ)句,執(zhí)行結(jié)果耗時(shí)如下:

窗口函數(shù):0.026s        子查詢:2.229s         JOIN關(guān)聯(lián)查詢:0.014s

從結(jié)果上來(lái)看,執(zhí)行速度明顯變快了,效果可謂是立竿見(jiàn)影

如果我們查詢不需要出生日期birthday,以最慢的子查詢?yōu)槔?/p>

SELECT id,name from tb_user 
where id in (SELECT MAX(id) from tb_user where name in('徐千云', '李億石') group by name)

耗時(shí):1.77s,也有算提升,因?yàn)檫@個(gè)可以使用覆蓋索引,建設(shè)了回表的次數(shù)。

3.4 討論

也不一定查詢每個(gè)名字最新插入的數(shù)據(jù),可能是查詢每個(gè)名字年紀(jì)最小的第一條數(shù)據(jù),這時(shí)候窗口函數(shù)查詢?nèi)缦拢?/p>

SELECT
 id, name, birthday
FROM
 ( SELECTid, name,birthday, ROW_NUMBER () OVER ( PARTITIONBYNAMEORDERBY birthday DESC ) AS row_num FROM tb_user
   wherenamein('徐千云', '李億石')
 ) AS u 
WHERE
 u.row_num =1

耗時(shí):0.30s  挺快的

使用子查詢:

SELECT id, name, birthday from tb_user u1
where birthday = (select max(birthday) from tb_user u2 where u2.name in('徐千云', '李億石') and u1.`name`=u2.`name`)

直接查詢不出來(lái)~~~

項(xiàng)目推薦:基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba企業(yè)級(jí)系統(tǒng)架構(gòu)底層框架封裝,解決業(yè)務(wù)開(kāi)發(fā)時(shí)常見(jiàn)的非功能性需求,防止重復(fù)造輪子,方便業(yè)務(wù)快速開(kāi)發(fā)和企業(yè)技術(shù)棧框架統(tǒng)一管理。引入組件化的思想實(shí)現(xiàn)高內(nèi)聚低耦合并且高度可配置化,做到可插拔。嚴(yán)格控制包依賴和統(tǒng)一版本管理,做到最少化依賴。注重代碼規(guī)范和注釋,非常適合個(gè)人學(xué)習(xí)和企業(yè)使用

Github地址:https://github.com/plasticene/plasticene-boot-starter-parent

Gitee地址:https://gitee.com/plasticene3/plasticene-boot-starter-parent

4.elasticsearch實(shí)現(xiàn)

數(shù)據(jù)異構(gòu)是解決數(shù)據(jù)量大的一大常見(jiàn)方式,我們經(jīng)常使用elasticsearch來(lái)緩解MySQL數(shù)據(jù)庫(kù)的查詢壓力,來(lái)應(yīng)對(duì)海量數(shù)據(jù)的復(fù)雜查詢,那接下來(lái)我們就來(lái)看看基于elasticsearch怎么實(shí)現(xiàn)先分組再組內(nèi)排序取數(shù)據(jù)

在 Elasticsearch 中,可以使用 terms 聚合來(lái)實(shí)現(xiàn)分組,再結(jié)合 top_hits 聚合實(shí)現(xiàn)組內(nèi)排序并取每組的第一條數(shù)據(jù)。terms 聚合用于對(duì)某個(gè)字段進(jìn)行分組,而 top_hits 聚合用于在每個(gè)分組內(nèi)獲取指定數(shù)量的文檔并按某種順序排序。

查詢每個(gè)名字年紀(jì)最小的第一條數(shù)據(jù):

GET user_info/_search
{
"size": 0,
"query": {
    "bool": {
      "filter": [
        { "terms": { "name": ["徐千云", "李億石"] }},
      ]
    }
  },
"aggs": {
    "group_by_name": {
      "terms": {
        "field": "name",
        "size": 1000
      },
      "aggs": {
        "latest_user": {
          "top_hits": {
            "sort": [
              { "birthday": { "order": "desc" }}
            ],
            "_source": ["id", "name", "org_id", "birthday"],
            "size": 1
          }
        }
      }
    }
  }
}
  • size: 0:在根查詢中設(shè)置 size 為 0,表示不返回頂層文檔,只返回聚合結(jié)果。
  • query 部分:使用 bool 查詢,限定 name 在["徐千云", "李億石"]內(nèi)。
  • terms 聚合 (group_by_name):按 name 分組,size 設(shè)置為較大值(如 1000)以確保返回盡可能多的分組。
  • top_hits 聚合 (latest_user):在每個(gè) name 分組內(nèi),按 birthday 字段降序排序,并只返回每組的第一個(gè)文檔(即年齡最小的 的文檔)。指定 _source 字段過(guò)濾以返回所需字段。

terms 聚合的 size 限制了返回分組的數(shù)量。若需要更多分組,可以增大 size 或使用 composite 聚合。對(duì)于較大數(shù)據(jù)集,此查詢可能較慢,因?yàn)樾枰獙?duì)分組中的每個(gè)文檔進(jìn)行排序,直接看代碼:

public Integer aggregateResults(UserQueryDTO dto, Consumer<List<UserInfo>> consumer) {
        finalint pageSize = 500;
        Integer total = 0;
        Map<String, Object> afterKey = null;
        while (true) {
            // 創(chuàng)建 SearchRequest
            SearchRequest searchRequest = new SearchRequest(getAliasName());
            // 構(gòu)建查詢條件
            BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
            if (StringUtils.isNotBlank(dto.getTypes())) {
                boolQueryBuilder.filter(QueryBuilders.termsQuery("name", dto.getNames));
            }
            // Composite聚合實(shí)現(xiàn)并分頁(yè)
            CompositeAggregationBuilder compositeAggregation = AggregationBuilders
                    .composite("group_by_name",
                            Lists.newArrayList( new TermsValuesSourceBuilder("name").field("name")))
                    .size(pageSize);
            // 設(shè)置分頁(yè)的 afterKey
            compositeAggregation.aggregateAfter(afterKey);
            // 添加top_hits子聚合,size=1獲取每個(gè)分組中的最新文檔
            TopHitsAggregationBuilder topHitsAggregation = AggregationBuilders
                    .topHits("latest_user")
                    .sort("birthday", SortOrder.DESC)
                    .fetchSource(new String[]{"id", "name", "birthday"}, null)
                    .size(1);
            // 添加子聚合到 composite 聚合
            compositeAggregation.subAggregation(topHitsAggregation);
            // 構(gòu)建 SearchSourceBuilder size=0不返回文檔,只返回聚合結(jié)果
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder()
                    .size(0)
                    .query(boolQueryBuilder)
                    .aggregation(compositeAggregation);

            // 設(shè)置搜索請(qǐng)求,執(zhí)行搜索
            searchRequest.source(searchSourceBuilder);
            SearchResponse response = search(searchRequest);

            // 處理分頁(yè)聚合結(jié)果
            List<String> dataList = new ArrayList<>();
            ParsedComposite compositeAgg = response.getAggregations().get("group_by_name");
            // 遍歷當(dāng)前頁(yè)的分組結(jié)果
            compositeAgg.getBuckets().forEach(bucket -> {
                ParsedTopHits topHits = bucket.getAggregations().get("latest_user");
                SearchHit[] hits = topHits.getHits().getHits();
                for (SearchHit hit : hits) {
                   dataList.add(hit.getSourceAsString());
                }
            });
            List<UserInfo> results = convert(dataList, UserInfo.class);
            // 回調(diào)
            consumer.accept(results);
            total = total + results.size();
            // 更新 afterKey,為下一頁(yè)查詢準(zhǔn)備, 如果afterKey為空,說(shuō)明已經(jīng)查詢到最后一頁(yè)
            afterKey = compositeAgg.afterKey();
            if (afterKey == null) {
                break;
            }
        }
        return total;
    }

afterKey 參數(shù):在 CompositeAggregationBuilder 中的 aggregateAfter(afterKey) 設(shè)置為上一次查詢的 afterKey,用于實(shí)現(xiàn)分頁(yè)。

分頁(yè)循環(huán):每次查詢一頁(yè)數(shù)據(jù),更新 afterKey,直到 afterKey 為 null,表示已達(dá)到最后一頁(yè)。

TopHitsAggregationBuilder:按 id 降序排序并返回每組中的最新文檔,用于獲取分組的最新記錄。

不知道你是否有注意到方法aggregateResults()有一個(gè)回調(diào)函數(shù)參數(shù)Consumer<List<UserInfo>> consumer,當(dāng)我們?cè)诓僮鞔笈繑?shù)據(jù)時(shí),不可能一次性查出所有數(shù)據(jù)來(lái)處理,性能扛不住,只能分批分批查詢,如果分頁(yè)查詢出來(lái)放到一個(gè)集合最后在處理,內(nèi)存也支撐不住,這時(shí)候我們只在分頁(yè)查詢數(shù)據(jù)的同時(shí)處理相關(guān)數(shù)據(jù),比如分頁(yè)每頁(yè)200條查詢出200個(gè)名字年紀(jì)最小的人,并把他的更新時(shí)間更新為當(dāng)前,這樣就可以寫(xiě)一個(gè)更新更新時(shí)間的方法,傳入aggregateResults(),等分頁(yè)查詢出用戶之后,根據(jù)用戶id回調(diào)更新即可。

5.總結(jié)

分組后組內(nèi)排序取第一條記錄的操作,是 SQL 查詢中的高頻需求。推薦優(yōu)先使用窗口函數(shù) ROW_NUMBER(),其次是子查詢方法,并根據(jù)實(shí)際業(yè)務(wù)場(chǎng)景選擇合適的實(shí)現(xiàn)方式。同時(shí),結(jié)合索引和字段優(yōu)化,可以顯著提升查詢性能。當(dāng)然這是針對(duì)大批量查詢的情況下,如果你這是查詢一兩個(gè)姓名的最小年紀(jì)這種,你完全可以查詢出所有數(shù)據(jù),在Java代碼邏輯中利用內(nèi)存分組之后再排序,取相應(yīng)數(shù)據(jù)即可。

責(zé)任編輯:武曉燕 來(lái)源: Shepherd進(jìn)階筆記
相關(guān)推薦

2010-07-09 09:24:37

SQL Server分

2010-05-07 16:30:01

Oracle數(shù)據(jù)集成

2010-02-23 14:56:18

WCF Bug

2009-12-16 13:39:27

Ruby元編程

2013-03-01 10:42:12

LTE3G通信網(wǎng)絡(luò)技術(shù)

2009-12-02 13:39:34

SAP認(rèn)證Novell

2009-11-04 16:03:59

2023-03-05 18:23:38

分布式ID節(jié)點(diǎn)

2018-11-12 11:12:46

2011-07-29 10:21:03

iPad 橫豎屏 切換

2013-10-18 15:27:30

微軟大數(shù)據(jù)微軟

2022-03-01 09:31:06

JWTSession跨域

2013-07-30 11:18:59

SAP大數(shù)據(jù)解決方案

2024-04-01 09:24:39

2009-12-29 16:07:19

ADO類型

2020-05-14 14:57:48

MySQLExcel排序

2010-06-28 15:55:23

數(shù)據(jù)泄漏DLP數(shù)據(jù)保護(hù)

2009-10-15 10:39:31

綜合布線解決方案

2009-11-05 09:42:44

智能小區(qū)寬帶接入

2009-12-22 15:50:11

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

丝袜亚洲精品中文字幕一区| 欧美电影免费看| 寂寞少妇一区二区三区| 九九热这里只有精品6| 国产精品一区二区人妻喷水| 欧美gay视频| 亚洲欧美一区二区久久 | 伊人色综合久久天天五月婷| 国产av一区二区三区精品| 亚洲另类自拍| 中文字幕在线精品| 污污污www精品国产网站| 国产在线|日韩| 亚洲图片欧美视频| 亚洲欧美日韩国产成人综合一二三区| 亚洲第一色视频| 在线精品亚洲一区二区| 老熟妇一区二区三区| 亚洲精品tv久久久久久久久久| 亚洲国产一区二区三区四区| 国产又大又黄又猛| 黄色在线免费观看网站| 国产精品理论在线观看| 精品卡一卡二| 国产xxxx孕妇| 麻豆国产一区二区| 欧美亚洲第一区| 校园春色 亚洲| 精品久久电影| 日韩精品极品在线观看| 久久久久久久久久久影视| yw.尤物在线精品视频| 亚洲国产精品一区二区久久恐怖片| 日韩久久不卡| 三级视频在线| 丁香婷婷综合色啪| 91免费精品国偷自产在线| 亚洲视频 欧美视频| 伊人久久亚洲美女图片| 欧美老女人在线视频| 欧美激情视频二区| 色综合综合色| 亚洲女成人图区| 欧美在线一级片| 99精品国产高清一区二区麻豆| 欧美麻豆精品久久久久久| 久草在在线视频| 国产不卡网站| 欧美日韩一区免费| 国产成人在线免费看| 高清电影在线观看免费| 一级做a爱片久久| 久久久久久久香蕉| 99久久精品免费观看国产| 国产精品的网站| 亚洲自拍三区| 黄色视屏免费在线观看| 国产精品国产三级国产普通话蜜臀| 日本一区免费看| 在线观看福利一区| 中文字幕在线一| 日韩电影一区二区三区| 国产成人av网址| 国产情侣小视频| 日本va欧美va精品发布| 国产精品网红直播| 一区二区的视频| 国产一区三区三区| av一区二区三区免费| 超碰免费在线97| 成人一区二区视频| 精品国产一区二区三区日日嗨| 三级网站在线看| www国产成人免费观看视频 深夜成人网| 久久国产精品一区二区三区四区 | 天堂中文在线播放| 色综合色狠狠天天综合色| 妞干网在线免费视频| 成人交换视频| 欧美一级日韩免费不卡| 日本人妻一区二区三区| 天堂99x99es久久精品免费| 亚洲免费小视频| 精品一区二区三孕妇视频| 99久久精品费精品国产风间由美| 久久中文字幕国产| www.99re7.com| 老妇喷水一区二区三区| 91精品久久久久久久久中文字幕 | 国产一级一片免费播放放a| 亚洲美女少妇无套啪啪呻吟| 国产91在线播放精品91| 国产精品一品二区三区的使用体验| 国产麻豆视频一区二区| 久久福利电影| 麻豆网在线观看| 亚洲妇女屁股眼交7| 亚洲精品乱码久久久久久自慰| 欧美美女被草| 亚洲精品ady| 国产男女猛烈无遮挡在线喷水| 你懂的一区二区| 青草青草久热精品视频在线网站 | 精品无码三级在线观看视频| 国产伦精品一区| 国产色在线 com| 一区二区三区四区高清精品免费观看 | 久久亚洲成人精品| 欧美精品亚洲精品日韩精品| 丝袜脚交一区二区| 成人在线观看网址| www日韩tube| 亚洲成人免费看| 亚洲成人天堂网| 美女福利一区| 欧美成人免费在线观看| 免费视频网站在线观看入口| 成人性色生活片免费看爆迷你毛片| 性刺激综合网| 黄在线观看免费网站ktv| 91精品婷婷国产综合久久竹菊| 在线精品一区二区三区| 午夜久久99| 91精品久久久久| 国产综合在线观看| 天天影视网天天综合色在线播放 | 粉嫩欧美一区二区三区高清影视| 日韩欧美亚洲在线| 在线免费av资源| 精品噜噜噜噜久久久久久久久试看| 亚洲女人毛茸茸高潮| 亚洲在线免费| 久久久久九九九| 超碰在线中文字幕| 日韩你懂的在线观看| 黄色免费一级视频| 久久精品一区| 久久精品中文字幕一区二区三区 | 国产精品美女主播| 男男激情在线| 欧美性猛交xxxx| 久久久久久久无码| 亚洲国产片色| 国产精品伊人日日| a级大胆欧美人体大胆666| 日韩丝袜美女视频| 国产大片免费看| 韩国精品在线观看| eeuss中文| 成人在线啊v| 欧美xxxx18性欧美| 精品人妻一区二区三区蜜桃| 亚洲欧美经典视频| 日本少妇激三级做爰在线| 天天揉久久久久亚洲精品| 国产日韩在线精品av| 日本亚洲精品| 91精品国产一区二区三区蜜臀| 午夜爱爱毛片xxxx视频免费看| 国产综合色在线视频区| 免费观看黄色大片| 日韩精品一级| 久久男人的天堂| 国产a级片视频| 欧美日本一区二区视频在线观看| 亚洲自拍偷拍第一页| 四虎影院观看视频在线观看 | 欧美精品色视频| 伊人色**天天综合婷婷| 91在线短视频| 超碰资源在线| 亚洲午夜精品视频| 91成品人影院| 亚洲国产日韩一级| 亚洲第一页av| 久久精品国产一区二区三 | 欧美日韩你懂得| 五月天色婷婷丁香| www.欧美精品一二区| 欧美 国产 小说 另类| 日韩免费在线| 国产高清精品一区| 成人欧美一区二区三区的电影| 中文字幕亚洲欧美在线| 99久久精品免费看国产交换| 偷拍日韩校园综合在线| 在线免费观看视频| 国产乱妇无码大片在线观看| 男人插女人视频在线观看| 欧美猛男同性videos| 成人免费视频在线观看超级碰| caoprom在线| 中文字幕亚洲图片| 亚洲av少妇一区二区在线观看 | 一区二区视频在线免费观看| 亚洲六月丁香色婷婷综合久久| 久久久午夜精品福利内容| 蜜桃视频免费观看一区| 黄色www网站| 四虎8848精品成人免费网站| 国产亚洲精品久久飘花| 四虎成人精品一区二区免费网站| 97久久精品人人澡人人爽缅北| a黄色在线观看| 欧美变态tickling挠脚心| 毛片在线免费播放| 亚洲国产精品人人做人人爽| www成人啪啪18软件| 99视频精品在线| 8x8x成人免费视频| 日日夜夜精品免费视频| 国产亚洲精品久久久久久久| 日韩免费看片| 秋霞毛片久久久久久久久| 这里视频有精品| 国产欧美在线播放| 粉嫩一区二区三区| 久久久爽爽爽美女图片| 国产丝袜在线| 中文字幕九色91在线| 深夜福利在线观看直播| 中文字幕日韩精品一区| a视频免费观看| 国产丶欧美丶日本不卡视频| 国产又大又黄又猛| 日韩电影免费一区| 播放灌醉水嫩大学生国内精品| 欧美黄在线观看| 中文字幕久精品免| 波多野结衣的一区二区三区| 久久精品成人一区二区三区蜜臀| 亚洲一区网址| 97自拍视频| 国产精品一站二站| 成人在线观看视频网站| 99久久综合国产精品二区| 日本亚洲欧洲色α| av日韩亚洲| 欧美性一区二区三区| 忘忧草在线日韩www影院| 久久人91精品久久久久久不卡| 宅男在线观看免费高清网站| 久久香蕉国产线看观看网| 国产黄a三级三级三级av在线看| 日韩在线视频国产| 99re在线视频| 欧美精品 国产精品| 国产成人av免费| 在线这里只有精品| 久久午夜鲁丝片| 在线免费观看一区| 国产精品乱码一区二区视频| 欧洲精品视频在线观看| 国产精华7777777| 欧美在线999| 国产女优在线播放| 欧美乱妇15p| 91在线公开视频| 91精品福利在线一区二区三区 | 激情深爱一区二区| 999这里有精品| 国产一区二区三区久久久| 一级 黄 色 片一| 国产91精品欧美| 在线黄色免费网站| www国产成人| 精品人妻一区二区三区蜜桃视频| 国产欧美日产一区| 小嫩苞一区二区三区| 亚洲精品国产a久久久久久 | 欧美做受喷浆在线观看| 久久中文字幕电影| 精品丰满少妇一区二区三区| 亚洲色欲色欲www在线观看| 国产亚洲第一页| 欧美日韩国产一区在线| 最近日韩免费视频| 欧美一二三在线| 日色在线视频| 最近2019免费中文字幕视频三 | 91爱视频在线| 99精品国自产在线| 91精品天堂| 国产尤物久久久| dy888午夜| 久久成人国产| 超碰在线资源站| 91麻豆蜜桃一区二区三区| 中国1级黄色片| 亚洲成av人片在线观看无码| 亚洲精品国产欧美在线观看| 日韩视频国产视频| 国产中文字幕在线| 欧美老妇交乱视频| 欧美与亚洲与日本直播| 成人在线视频网址| 成人免费电影网址| 91免费黄视频| 麻豆成人av在线| 午夜剧场免费看| 日韩一区在线看| 在线观看亚洲欧美| 欧美一级一区二区| 国产精品天堂| 久久久伊人日本| 欧美久久久网站| 日本不卡二区高清三区| 欧美视频一区| 17c国产在线| 久久嫩草精品久久久精品| www.av视频| 欧美喷水一区二区| 欧美偷拍视频| 久久久久久久久久久久久久久久久久av | 亚洲成人资源网| 91久久精品无码一区二区| 亚洲精选中文字幕| 国精一区二区三区| 91免费精品国偷自产在线| 欧美色爱综合| 夫妻免费无码v看片| 国产·精品毛片| 国产一区第一页| 欧美亚洲综合在线| 水莓100国产免费av在线播放| 欧美老少配视频| 国产aⅴ精品一区二区四区| 日本一区高清不卡| 狂野欧美一区| 欧美激情aaa| 黑人与娇小精品av专区| 人成网站在线观看| 欧美肥婆姓交大片| 懂色av色香蕉一区二区蜜桃| 亚洲人久久久| 另类小说一区二区三区| www.黄色在线| 91高清在线观看| 九色网友自拍视频手机在线| 欧美在线视频导航| 小嫩嫩12欧美| 国产男女无遮挡| 91亚洲国产成人精品一区二区三 | 91在线无精精品一区二区| 色999日韩| 日韩av在线中文| 亚洲欧洲无码一区二区三区| 一区二区视频免费| 精品国产一区二区三区久久久| 国产一区精品福利| 一区一区视频| 国产乱码精品一区二区三区av | 少妇精品无码一区二区三区| 亚洲综合免费观看高清在线观看| 国产chinasex对白videos麻豆| 久久999免费视频| 国产+成+人+亚洲欧洲在线| 国产一区二区网| 91年精品国产| 欧美男人天堂网| 久久亚洲影音av资源网| 亚洲综合影院| 少妇人妻在线视频| 久久久久久久精| 中文字幕av影视| 操人视频在线观看欧美| 91午夜精品| 欧美一区二区中文字幕| 国产人妖乱国产精品人妖| 国产精品-色哟哟| 久久99久久99精品中文字幕| 国内精品免费| 亚洲少妇第一页| 最新不卡av在线| 蜜臀久久精品久久久久| 日韩暖暖在线视频| 欧美激情777| 精品少妇人妻av一区二区三区| 狠狠干狠狠久久| 拍真实国产伦偷精品| 成人三级在线| 丝袜美腿亚洲一区二区图片| 91日韩中文字幕| 国产视频精品va久久久久久| 欧美性天天影视| 成人黄动漫网站免费| 久久高清国产| 黄色录像免费观看| 亚洲黄色www| 日日夜夜一区| 国产人妻777人伦精品hd| 久久人人97超碰com| av老司机久久| 欧美综合第一页| 欧美福利电影在线观看| a级大片在线观看| 日韩亚洲电影在线| 88xx成人免费观看视频库| 狠狠噜天天噜日日噜| 国产色产综合产在线视频|