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

提升 MySQL 批量更新效率的底層原理與優化策略

網絡 網絡優化 MySQL
? 如果網絡情況良好且 MySQL 連接池資源充分的情況下,筆者更推薦使用并行進行逐條更新。

近期進行項目優化梳理工作時,發現某些功能模塊進行MySQL數據庫批量更新操作比較耗時,對此筆者查閱相關資料比進行壓測后,得出最優解,遂以此文章記錄一下筆者的解決方案。

一、前置準備

為方便演示,筆者先說明一下本文進行實驗的數據表,對應的DDL語句如下,可以看到該表有一個自增的主鍵ID和9個字段以及一個日期字段:

CREATE TABLE `batch_insert_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fileid_1` varchar(100) DEFAULT NULL,
  `fileid_2` varchar(100) DEFAULT NULL,
  `fileid_3` varchar(100) DEFAULT NULL,
  `fileid_4` varchar(100) DEFAULT NULL,
  `fileid_5` varchar(100) DEFAULT NULL,
  `fileid_6` varchar(100) DEFAULT NULL,
  `fileid_7` varchar(100) DEFAULT NULL,
  `fileid_8` varchar(100) DEFAULT NULL,
  `fileid_9` varchar(100) DEFAULT NULL,
  `create_date` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `batch_insert_test_create_date_IDX` (`create_date`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=19091237 DEFAULT CHARSET=utf8 COMMENT='測試批量插入,一行數據1k左右';

特別注意,讀者在根據本文進行操作時需要對數據庫連接配置上追加如下兩個參數,否則優化方案不會生效:

&rewriteBatchedStatements=true&allowMultiQueries=true

二、三種方案壓測實驗

1. 逐條更新

首先查看逐條更新的解決方案,筆者通過分頁查詢查詢大約3000條數據,然后逐條進行遍歷更新:

 /**
     * 使用foreach進行逐條插入
     */
    @Test
    public void foreachUpdate() {
        //分頁查詢3k的數據
        PageHelper.startPage(PAGE, SIZE);
        List<BatchInsertTest> insertTestList = batchInsertTestMapper.selectByExample(null);

        //逐條更新
        StopWatch stopWatch = new StopWatch("foreachUpdate");
        stopWatch.start();
        for (BatchInsertTest insertTest : insertTestList) {
            batchInsertTestMapper.updateByPrimaryKey(insertTest);
        }
        stopWatch.stop();

        log.info("逐條更新完成,size:{},耗時:{}ms", insertTestList.size(), stopWatch.getLastTaskTimeMillis());


    }

對應耗時結果如下,可以看到耗時花費了1592ms,表現比較遜色,原因很簡單,每條數據操作時都涉及網絡IO,3000次串行的網絡IO+DB更新,執行效率自然上不去:

2025-01-10 09:07:02.920  INFO 19328 --- [           main] c.s.mapper.BatchInsertTestMapperTest     : 逐條更新完成,size:3000,耗時:1592ms

2. 并行運算

不知道讀者是否留意筆者上文所說的串行DB更新,既然串行的網絡IO會降低執行效率,那么我們并行更新呢?

所以筆者將代碼進行進一步的優化:

/**
     * 使用并行流foreach進行逐條插入
     */
    @Test
    public void foreachParallelStreamUpdate() {
        PageHelper.startPage(PAGE, SIZE);

        List<BatchInsertTest> insertTestList = batchInsertTestMapper.selectByExample(null);

        //采用并行流的方式進行并行更新
        StopWatch stopWatch = new StopWatch("foreachUpdate");
        stopWatch.start();
        insertTestList.parallelStream()
                .forEach(i -> {
                    batchInsertTestMapper.updateByPrimaryKey(i);
                });


        stopWatch.stop();

        log.info("逐條更新完成,size:{},耗時:{}ms", insertTestList.size(), stopWatch.getLastTaskTimeMillis());


    }

可以看到3000條數據花費了357ms,執行效率還是很客觀的,但筆者認為這還不是最優解,原因很簡單,每次進行批量更新操作都需要進行多次網絡IO,如果在并發量非常大的場景,比較吃MySQL的連接池資源:

2025-01-10 09:07:00.789  INFO 19328 --- [           main] c.s.mapper.BatchInsertTestMapperTest     : 逐條更新完成,size:3000,耗時:357ms

3. foreach更新

我們再來看看mybatis內置的foreach語法的批量更新:

<update id="updateByPrimaryKeyForeach" parameterType="com.sharkChili.domain.BatchInsertTest">
        <foreach collection="list" item="item" separator=";">
            update batch_insert_test
            set fileid_1 = #{item.fileid1,jdbcType=VARCHAR},
            fileid_2 = #{item.fileid2,jdbcType=VARCHAR},
            fileid_3 = #{item.fileid3,jdbcType=VARCHAR},
            fileid_4 = #{item.fileid4,jdbcType=VARCHAR},
            fileid_5 = #{item.fileid5,jdbcType=VARCHAR},
            fileid_6 = #{item.fileid6,jdbcType=VARCHAR},
            fileid_7 = #{item.fileid7,jdbcType=VARCHAR},
            fileid_8 = #{item.fileid8,jdbcType=VARCHAR},
            fileid_9 = #{item.fileid9,jdbcType=VARCHAR},
            create_date = #{item.createDate,jdbcType=TIMESTAMP}
            where id = #{item.id,jdbcType=INTEGER}
        </foreach>
    </update>

對應測試代碼如下:

@Test
    public void updateByPrimaryKeyForeach() {
        PageHelper.startPage(PAGE, SIZE);

        List<BatchInsertTest> insertTestList = batchInsertTestMapper.selectByExample(null);
        StopWatch stopWatch = new StopWatch("updateByPrimaryKeyForeach");
        stopWatch.start();

        batchInsertTestMapper.updateByPrimaryKeyForeach(insertTestList);

        stopWatch.stop();

        log.info("使用updateByPrimaryKeyForeach更新完成,size:{},耗時:{}ms", insertTestList.size(), stopWatch.getLastTaskTimeMillis());
    }

耗時563ms左右,性能表現也還行,并且foreach操作會因為字符串拼接操導致Packet for query is too large (106,100,142 > 4,194,304). You can change this value on the server by setting the 'max_allowed_packet' variable.即提交的SQL執行數據包過大被拒絕的風險:

2025-01-10 09:10:57.592  INFO 18332 --- [           main] c.s.mapper.BatchInsertTestMapperTest     : 使用updateByPrimaryKeyForeach更新完成,size:3000,耗時:563ms

4. 批處理更新

筆者希望可以一批更新操作可以一個批次的進行提交,所以接下來介紹這種方案就是一次性組裝一批量的更新語句,然后一次性提交。

 /**
     * 使用批處理進行更新
     */
    @Test
    public void updateBatch() {
        PageHelper.startPage(PAGE, SIZE);

        List<BatchInsertTest> insertTestList = batchInsertTestMapper.selectByExample(null);
        StopWatch stopWatch = new StopWatch("updateBatch");
        stopWatch.start();

        //創建一個進行批處理操作的sqlsession組裝一批更新語句
        try (SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH)) {
            BatchInsertTestMapper batchInsertTestMapper = sqlSession.getMapper(BatchInsertTestMapper.class);

            insertTestList.parallelStream()
                    .forEach(i -> {
                        batchInsertTestMapper.updateByPrimaryKey(i);
                    });
            //手動提交
            sqlSession.commit();
            stopWatch.stop();
        } catch (Exception e) {

        }

        log.info("批處理更新完成,size:{},耗時:{}ms", insertTestList.size(), stopWatch.getLastTaskTimeMillis());

    }

最終更新耗時為1s左右,相較于上述方案相對遜色一些,但是網絡IO的開銷以及MySQL的連接池使用都減小了,綜合起來性價比還是蠻高的:

2024-02-22 23:25:05.265  INFO 18844 --- [           main] c.s.mapper.BatchInsertTestMapperTest     : 批處理更新完成,size:3000,耗時:1566ms

5. case-when更新

最后一種case-when更新,語法如下,猛的一看比較復雜,實際理解起來還是蠻簡單的,對每個字段進行set操作,例如:當id等于1時,fileid_1則取id為1的那條數據的值,通過case分支實現一條SQL批量更新多條數據:

update batch_insert_test
  -- 當id=1 則設置fileid_1為aaa
        set fileid_1=
            when 1 then aaa
  ....其余同理
   where id in (本次批處理的id列表)

所以結合mybatis框架的語法,我們得出下面這樣一個SQL語句:

<update id="updateBatch" parameterType="java.util.List">
        update batch_insert_test
        set fileid_1=
        <foreach collection="list" item="item" index="index"
                 separator=" " open="case ID" close="end">
            when #{item.id} then #{item.fileid1,jdbcType=VARCHAR}
        </foreach>,
        fileid_2 =
        <foreach collection="list" item="item" index="index"
                 separator=" " open="case ID" close="end">
            when #{item.id} then #{item.fileid2,jdbcType=VARCHAR}
        </foreach>,
        fileid_3 =
        <foreach collection="list" item="item" index="index"
                 separator=" " open="case ID" close="end">
            when #{item.id} then #{item.fileid3,jdbcType=VARCHAR}
        </foreach>,
        fileid_4 =
        <foreach collection="list" item="item" index="index"
                 separator=" " open="case ID" close="end">
            when #{item.id} then #{item.fileid4,jdbcType=VARCHAR}
        </foreach>,
        fileid_5 =
        <foreach collection="list" item="item" index="index"
                 separator=" " open="case ID" close="end">
            when #{item.id} then #{item.fileid5,jdbcType=VARCHAR}
        </foreach>,
        fileid_6 =
        <foreach collection="list" item="item" index="index"
                 separator=" " open="case ID" close="end">
            when #{item.id} then #{item.fileid6,jdbcType=VARCHAR}
        </foreach>,
        fileid_7 =
        <foreach collection="list" item="item" index="index"
                 separator=" " open="case ID" close="end">
            when #{item.id} then #{item.fileid7,jdbcType=VARCHAR}
        </foreach>,
        fileid_8 =
        <foreach collection="list" item="item" index="index"
                 separator=" " open="case ID" close="end">
            when #{item.id} then #{item.fileid8,jdbcType=VARCHAR}
        </foreach>,
        fileid_9 =
        <foreach collection="list" item="item" index="index"
                 separator=" " open="case ID" close="end">
            when #{item.id} then #{item.fileid9,jdbcType=VARCHAR}
        </foreach>,
        create_date=
        <foreach collection="list" item="item" index="index"
                 separator=" " open="case ID" close="end">
            when #{item.id} then #{item.createDate,jdbcType=TIMESTAMP}
        </foreach>
        where id in
        <foreach collection="list" index="index" item="item"
                 separator="," open="(" close=")">
            #{item.id,jdbcType=INTEGER}
        </foreach>
    </update>

對應的Java代碼如下,比較簡單,筆者這里就不多做贅述了:

@Test
    public void updateDateByWhenCase() {
        PageHelper.startPage(PAGE, SIZE);

        List<BatchInsertTest> insertTestList = batchInsertTestMapper.selectByExample(null);
        StopWatch stopWatch = new StopWatch("updateBatch");
        stopWatch.start();

        batchInsertTestMapper.updateBatch(insertTestList);

        stopWatch.stop();

        log.info("使用when case更新完成,size:{},耗時:{}ms", insertTestList.size(), stopWatch.getLastTaskTimeMillis());
    }

最終可以看到耗時800毫秒左右,相較于批處理更加出色一些,而且網絡和連接池的開銷都是差不多的,但和foreach意義也可能存在數據包過大導致報錯的風險:

2025-01-10 09:17:06.878  INFO 16788 --- [           main] c.s.mapper.BatchInsertTestMapperTest     : 使用when case更新完成,size:3000,耗時:738ms

小結

以上便是筆者本次大量壓測后得出的解決方案,總結如下:

  • 如果網絡情況良好且MySQL連接池資源充分的情況下,筆者更推薦使用并行進行逐條更新。
  • 如果網絡情況不好或者MySQL資源緊張,筆者更推薦使用foreach更新,相較于同等一次性更新多條語句的when-case語法,它語法更簡單且執行性能更好一些。
  • 當然如果一次性要更新比較大基數的數據,考慮到MySQL的傳輸packet size我們還是優先考慮批處理這個性能和穩定性處于折中的方案。
責任編輯:趙寧寧 來源: 寫代碼的SharkChili
相關推薦

2024-11-21 08:33:29

2025-09-05 09:31:23

2024-11-06 08:13:28

2024-03-14 10:10:03

MySQL優化事務

2023-11-01 09:44:21

MySQLJava

2024-09-19 08:09:37

MySQL索引數據庫

2021-12-21 14:00:25

WebpackDevServer的開發

2010-04-25 23:39:42

2023-10-10 08:52:36

射與分析相開源

2020-01-13 10:45:35

JavaScript解析前端

2025-02-26 07:59:47

2023-09-19 10:31:09

算法數據

2015-11-16 11:17:30

PHP底層運行機制原理

2012-06-12 09:46:20

虛擬化

2021-07-23 13:34:50

MySQL存儲InnoDB

2021-12-24 08:01:44

Webpack優化打包

2024-09-04 14:28:20

Python代碼

2025-01-15 12:48:30

2023-10-12 07:29:24

MySQL分頁數據量

2023-12-08 13:30:23

點贊
收藏

51CTO技術棧公眾號

久久99国产综合精品免费| 污污的视频免费观看| 无套内谢的新婚少妇国语播放| 亚洲视频福利| 日韩av中文字幕在线| 国产乱子夫妻xx黑人xyx真爽 | 人人精品人人爱| 在线亚洲欧美视频| 国产又粗又猛又爽又黄| 狠狠操一区二区三区| 久久老女人爱爱| 成人福利网站在线观看11| 国产67194| 日韩av中文字幕一区| 在线区一区二视频| 无码人妻精品一区二区蜜桃百度| 性xxxx视频| 麻豆成人综合网| 久久久极品av| 国产真实乱人偷精品| 福利一区在线| 亚洲第一在线综合网站| 亚洲欧美久久久久一区二区三区| 亚洲午夜无码久久久久| 欧美片第1页综合| 亚洲欧美国产精品va在线观看| 91淫黄看大片| caoporn视频在线观看| 欧美韩国日本综合| 国产伦精品一区二区三区四区视频 | 视频一区二区视频| 午夜福利视频一区二区| 激情综合色播激情啊| 7m第一福利500精品视频| 91麻豆制片厂| 性欧美lx╳lx╳| 日韩三级在线观看| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 91高清在线观看视频| 国产精品视频九色porn| 精品午夜一区二区三区| 国产极品久久久| 日本aⅴ免费视频一区二区三区| 久久久免费在线观看| 欧美日韩黄色网| 国产欧美日韩视频在线| 亚洲精品动漫久久久久| 亚洲丝袜在线观看| 91国内外精品自在线播放| 午夜伦欧美伦电影理论片| 国产91视频一区| 黄色网在线免费观看| 99国产精品久| 国产三区精品| 国产精品亚洲lv粉色| 蜜臀精品一区二区三区在线观看 | 中文字幕乱码在线播放| 亚洲午夜久久久久久久久久久| 一级日韩一区在线观看| 午夜免费视频在线国产| 成人美女视频在线看| 亚洲综合中文字幕在线| 国产麻豆一精品一男同| 免费高清在线视频一区·| 国产精品福利网站| 国产精品传媒在线观看| 日韩一区精品视频| 国产成人短视频| 久久精品亚洲无码| 很黄很黄激情成人| 久久久久这里只有精品| 日本三级黄色大片| 好看的亚洲午夜视频在线| 久久久久国产视频| 欧美亚洲天堂网| 精品999日本| 97精品一区二区三区| 在线免费观看毛片| 亚洲一区一卡| 国产精品久久久久久久久久ktv| 不卡av电影在线| 青青草97国产精品免费观看| 国产精品香蕉av| 国产欧美综合视频| 国产激情一区二区三区| 国产日韩精品久久| 欧美日本韩国一区二区| 国产日韩v精品一区二区| 特级西西444www大精品视频| 最新真实国产在线视频| 18欧美亚洲精品| 免费的一级黄色片| 亚洲欧美一区二区三区| 欧美三级日韩在线| 男人女人拔萝卜视频| 精品国产第一国产综合精品| 日韩久久免费av| 亚洲精品乱码久久久久久不卡| 蜜臀久久99精品久久一区二区| 精品国产a毛片| 精品人妻一区二区三区视频| 欧美色爱综合| 欧美高清性猛交| 国产中文字幕视频| 国产中文字幕一区| 精品一区二区视频| 素人av在线| 亚洲成人动漫av| 亚欧在线免费观看| 91精品国产自产在线丝袜啪| 亚洲午夜未删减在线观看| 黄色录像一级片| 一区二区激情| 国产欧美婷婷中文| 五十路在线观看| 亚洲少妇屁股交4| av黄色在线网站| 97久久精品一区二区三区的观看方式| 亚洲精品国产精品国自产在线 | 国产suv一区二区| 久久嫩草精品久久久精品一| 成人高清dvd| 欧美极品影院| 精品国产sm最大网站免费看| 美女三级黄色片| 鲁大师影院一区二区三区| 3d动漫精品啪啪一区二区三区免费| 欧美偷拍视频| 一区二区视频在线看| 热久久精品免费视频| 99国产精品免费网站| 精品国偷自产在线| 日本中文字幕在线观看视频| 不卡一卡二卡三乱码免费网站| av动漫免费观看| 日韩av首页| 日韩精品免费看| 久久成人国产精品入口| 久久国内精品视频| 亚洲高清乱码| 日本电影欧美片| 亚洲精品国产美女| 国产一级一片免费播放放a| 精品一区二区影视| 日韩精品不卡| 中文字幕在线视频网站| 亚洲国产91精品在线观看| 成人在线观看免费完整| 麻豆成人久久精品二区三区小说| 欧美一区少妇| 中文字幕资源网在线观看免费| 精品国产三级电影在线观看| avove在线播放| 国产一区亚洲一区| 在线电影看在线一区二区三区| 另类激情视频| 亚洲欧美日韩国产中文专区| 久久狠狠高潮亚洲精品| 成人av资源站| 免费看日b视频| 日韩第一区第二区| 欧美裸体男粗大视频在线观看| 91黄色在线视频| 1000精品久久久久久久久| 黄色片视频在线| 国产精品国产一区| 91免费精品视频| av免费在线免费观看| 欧美一二三四在线| 免费在线观看一级片| 国产福利91精品| 免费毛片网站在线观看| 日本欧美三级| 国产成人拍精品视频午夜网站| 日本不卡视频一区二区| 91福利社在线观看| 亚洲综合第一区| 国产老肥熟一区二区三区| www.99riav| 欧美91在线| 日本在线精品视频| 免费在线观看av| 欧美一二三区精品| 久久露脸国语精品国产91| 国产亚洲一区二区在线观看| 国产精品v日韩精品v在线观看| 国产精品久久久久久麻豆一区软件 | 欧美性猛交视频| 亚洲午夜精品久久久久久高潮| 免费观看在线综合| 精品嫩模一区二区三区| 国产成人tv| 国产激情综合五月久久| 乱人伦中文视频在线| 精品嫩草影院久久| 日韩精品一区二区亚洲av| 亚洲国产精品av| a级大片免费看| 国产一区二区精品| 中文字幕一区二区三区有限公司 | 三级做a全过程在线观看| 91国内精品野花午夜精品| av在线免费播放网址| 成人一区二区在线观看| 亚洲中文字幕久久精品无码喷水| 久久久久国产精品| 黑人中文字幕一区二区三区| 久久er热在这里只有精品66| 久久久日本电影| 国产三级在线免费| 欧美大片日本大片免费观看| 综合网在线观看| 中文字幕av一区二区三区| 99riav国产精品视频| 日韩黄色小视频| www.18av.com| 日韩.com| 久久成人资源| 欧美日韩黄色| 国产精品久久久久久av福利软件| 高清电影在线免费观看| 中文字幕亚洲情99在线| 开心激情综合网| 欧美日韩国产影片| 妺妺窝人体色www在线下载| 久久精品男人天堂av| 在线观看亚洲免费视频| 久久99热99| 日韩视频在线视频| 伊人久久大香线蕉精品组织观看| 日韩高清av| 国产a久久精品一区二区三区| 久久国产主播精品| 久久亚洲黄色| 精品免费国产| 999久久久精品一区二区| 成人免费视频视频在| 免费一级欧美在线大片| 3d蒂法精品啪啪一区二区免费| 91精品一区| 91免费电影网站| 亚洲精品一区二区三区在线| 99久久精品无码一区二区毛片| 国产高清亚洲| 97夜夜澡人人双人人人喊| 麻豆视频久久| 动漫精品视频| 狼人精品一区二区三区在线| 久久综合九色欧美狠狠| 蜜桃一区二区| 亚洲国产精品久久久久婷婷老年 | 婷婷久久免费视频| 91老司机精品视频| 视频精品一区| 国产精品一区二区你懂得| 果冻天美麻豆一区二区国产| 久久综合福利| 久久神马影院| 国产高清不卡无码视频| 亚洲裸体俱乐部裸体舞表演av| 免费毛片小视频| 日本aⅴ免费视频一区二区三区| 午夜精品中文字幕| 国产黄色精品视频| 免费中文字幕av| 国产精品免费av| 亚洲熟女www一区二区三区| 亚洲国产日日夜夜| 色一情一乱一伦| 欧美夫妻性生活| 熟妇人妻系列aⅴ无码专区友真希| 日韩精品在线观看视频| av中文字幕一区二区三区| 欧美日韩福利视频| 黄色综合网址| 91视频-88av| 欧美大胆视频| 亚洲欧洲三级| 亚洲精一区二区三区| 成年网站在线播放| 成人免费观看视频| 免费看的黄色录像| 亚洲国产aⅴ天堂久久| 波多野结衣视频网址| 欧美一级日韩免费不卡| 天堂资源最新在线| 久久综合九色九九| 超级碰碰久久| 51国偷自产一区二区三区的来源| 色狠狠久久av综合| 国产女人18毛片| 亚久久调教视频| 成年人性生活视频| 久久久久久久久岛国免费| 亚洲欧美一区二区三区四区五区| 欧美日韩在线视频观看| 国产露脸国语对白在线| 亚洲男人av在线| 怡红院红怡院欧美aⅴ怡春院| 日韩av日韩在线观看| 一区二区三区自拍视频| 五月婷婷综合色| 国产精品色网| 亚洲最大视频网| 国产精品激情偷乱一区二区∴| 国产视频91在线| 精品美女被调教视频大全网站| 毛片在线播放网址| 亚洲3p在线观看| 欧美成年网站| 亚洲图片欧洲图片日韩av| 国产日韩欧美| 成人欧美精品一区二区| 成人欧美一区二区三区小说| 日韩在线 中文字幕| 亚洲高清一二三区| 人人超在线公开视频| 91久久久久久久久久久久久| 欧美裸体在线版观看完整版| 91av资源网| 99久久精品免费看| 国产极品美女高潮无套嗷嗷叫酒店| 欧美日精品一区视频| 黄色国产在线| 国产91九色视频| 外国成人在线视频| 69sex久久精品国产麻豆| 国产精品自在在线| 久久国产波多野结衣| 欧美高清一级片在线| 日韩在线观看www| 国产精品嫩草视频| 精品午夜久久| 午夜精品在线免费观看| 日本一区二区成人在线| 亚洲精品国产精品国自产网站按摩| 精品偷拍各种wc美女嘘嘘| 蜜臀久久精品| 欧美精品123| 久久婷婷麻豆| 毛片aaaaaa| 欧美情侣在线播放| 国产调教视频在线观看| 成人做爽爽免费视频| 欧美二区视频| 精品国产乱码久久久久夜深人妻| 一区二区三区精品视频| 高h震动喷水双性1v1| 26uuu另类亚洲欧美日本一| 老司机aⅴ在线精品导航| 欧美日本视频在线观看| 久久婷婷色综合| 中文字幕第31页| 久久精品男人天堂| 亚洲日本va午夜在线电影| 日韩一级性生活片| 久久久久久亚洲综合| 中文字幕第一页在线播放| 日韩中文字幕网站| 午夜视频一区二区在线观看| 国产精品无码免费专区午夜| 99久久综合精品| 波多野结衣在线观看视频| 久久精品电影一区二区| 日韩精品中文字幕吗一区二区| 免费不卡av在线| 中文在线一区二区 | 素人一区二区三区| 黄色网址在线免费看| gogogo免费视频观看亚洲一| 99精品人妻国产毛片| www.精品av.com| jazzjazz国产精品麻豆| 日日碰狠狠躁久久躁婷婷| 综合激情成人伊人| 色欲av永久无码精品无码蜜桃| 日韩美女视频在线观看| 欧美国产偷国产精品三区| 国产裸体视频网站| 欧美性猛交xxxxx免费看| 91大神在线网站| 成人自拍爱视频| 日韩av高清在线观看| 久久精品99国产精| 亚洲三级av在线| 亚洲午夜精品| 国产又黄又猛又粗又爽的视频| 亚洲另类中文字| 三级在线播放| 91黄色国产视频| 日本亚洲免费观看| 国产亚洲成人精品| 丝袜美腿精品国产二区| 欧美日韩导航| av噜噜在线观看| 在线观看视频一区| 136福利第一导航国产在线| 在线观看成人av电影| 久久婷婷国产综合精品青草| 北条麻妃一二三区|