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

MySQL 高效插入數據的優秀實踐

數據庫 MySQL
在這篇文章中,我們將深入剖析 MyBatis 在高效插入數據方面的獨特之處,從基本原理到實際應用技巧,逐一揭開其神秘面紗。

在當今數據驅動的時代,高效的數據處理尤其是數據插入操作對于各類應用系統的性能表現至關重要。當我們聚焦到 MyBatis 這個強大的框架時,探索其高效插入數據的方法就成為了提升系統效率的關鍵一環。

隨著業務的不斷發展和數據量的持續增長,我們常常面臨著如何在保證數據準確性的前提下,盡可能快速地將大量數據插入到數據庫中的挑戰。MyBatis 作為一款廣泛應用的持久層框架,提供了多種途徑和策略來實現高效的插入操作。在接下來的文章中,我們將深入剖析 MyBatis 在高效插入數據方面的獨特之處,從基本原理到實際應用技巧,逐一揭開其神秘面紗。無論是新手開發者還是經驗豐富的技術人員,都能從這里獲得對 MyBatis 高效插入數據更深入的理解和實用的指引,從而為構建更高效、更穩定的系統奠定堅實的基礎。

一、關于MySQL批量插入的一些問題

MySQL一直是我們互聯網行業比較常用的數據,當我們使用半ORM框架進行MySQL大批量插入操作時,你是否考慮過這些問題:

  • 進行大數據量插入時,是否需要進行分批次插入,一次插入多少合適?有什么判斷依據?
  • 使用foreach進行大數據量的插入存在什么問題?
  • 如果插入批量插入過程中,因為服務器宕機等原因導致插入失敗要怎么辦?

基于此類問題,筆者以自己日常的開發手段作為依據演示一下MySQL批量插入的技巧。

二、常見的三種插入方式演示

1. 實驗樣本數據

為了演示,這里給出一張示例表,除了id以外,有10個varchar字段,也就是說全字段寫滿的話一條數據差不多1k左右:

CREATE TABLE `batch_insert_test` (
  `id` int 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,
  `fileid_10` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3 COMMENT='測試批量插入,一行數據1k左右';

2. 使用逐行插入

我們首先采用逐行插入方式分別插入3000、10w條的數據,這里為了保證實驗的準確性,提前進行代碼預熱,先插入5條數據,然后在進行大批量的插入:

/**
     * 逐行插入
     */
    @Test
    void rowByRowInsert() {
        //預熱先插入5條數據
        performCodeWarmUp(5);

        //生成10w條數據
        List<BatchInsertTest> testList = generateBatchInsertTestData();


        long start = System.currentTimeMillis();

        for (BatchInsertTest test : testList) {
            batchInsertTestMapper.insert(test);
        }

        long end = System.currentTimeMillis();
        log.info("逐行插入{}條數據耗時:{}", BATCH_INSERT_SIZE, end - start);

    }

輸出結果如下,可以看到當進行3000條數據的逐條插入時耗時在3s左右:

逐行插入3000條數據耗時:3492

而逐行插入10w條的耗時將其2min,插入表現可以說是非常差勁:

05.988 INFO  c.s.w.WebTemplateApplicationTests:55   main                    逐行插入100000條數據耗時:119678

3. 使用foreach語法實現批量插入

Mybatis為我們提供了foreach語法實現數據批量插入,從語法上不難看出,它會遍歷我們傳入的集合,生成一條批量插入語句,其語法格式大抵如下所示:

 insert into batch_insert_test (id, fileid_1, fileid_2, fileid_3, fileid_4, fileid_5, fileid_6, fileid_7, fileid_8, fileid_9, fileid_10) 
 values (1, '1', '2', '3', '4', '5', '6', '7', '8', '9', '10'),
 (2, '1', '2', '3', '4', '5', '6', '7', '8', '9', '10'),
 (3, '1', '2', '3', '4', '5', '6', '7', '8', '9', '10');

批量插入代碼如下所示:

 /**
     * foreach插入
     */
    @Test
    void forEachInsert() {
        /**
         * 代碼預熱
         */
        performCodeWarmUp(5);


        List<BatchInsertTest> testList = generateBatchInsertTestData();

        long start = System.currentTimeMillis();
        batchInsertTestMapper.batchInsertTest(testList);
        long end = System.currentTimeMillis();

        log.info("foreach{}條數據耗時:{}", BATCH_INSERT_SIZE, end - start);

    }

對應xml配置如下:

<!-- 插入數據 -->
  <insert id="batchInsertTest" parameterType="java.util.List">
    INSERT INTO batch_insert_test (fileid_1, fileid_2, fileid_3, fileid_4, fileid_5, fileid_6, fileid_7, fileid_8, fileid_9, fileid_10)
    VALUES
    <foreach collection="list" item="item" separator=",">
      (#{item.fileid1}, #{item.fileid2}, #{item.fileid3}, #{item.fileid4}, #{item.fileid5},
      #{item.fileid6}, #{item.fileid7}, #{item.fileid8}, #{item.fileid9}, #{item.fileid10})
    </foreach>
  </insert>

實驗結果如下,使用foreach進行插入3000條的數據耗時不到1s:

10.496 INFO  c.s.w.WebTemplateApplicationTests:79   main                    foreach3000條數據耗時:403

當我們進行10w條的數據插入時,受限于max_allowed_packet配置的大小,max_allowed_packet定義了服務器和客戶端之間傳輸的最大數據包大小。該參數用于限制單個查詢或語句可以傳輸的最大數據量,我們通過show VARIABLES like '%max_allowed_packet%';默認情況下為67108864大約6M左右,所以這也最終導致了這10w條數據的插入直接失敗了。

Error updating database.  Cause: com.mysql.cj.jdbc.exceptions.PacketTooBigException: 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.

4. 使用批處理完成插入

再來看看筆者最推薦的一種插入方式——批處理插入,批處理的工作原理是在一次SQL連接通信提交多條SQL執行語句,通過減少網絡往返的開銷來提升SQL執行效率的一種手段,需要注意使用批處理的時候需要注意以下幾點:

  • 批處理會以批次為單位提交SQL執行語句,如果涉及大批量的批處理大查詢操作,SQL服務器內存資源存在被這批次查詢耗盡的風險。
  • 批處理提交或者查詢的數據過大時會導致傳輸包過大,也可能導致網絡傳輸耗時長的問題。

在正式介紹這種插入方式前,讀者先確認自己的鏈接配置是否添加了這條配置語句,只有在MySQL連接參數后面增加這一項配置才會使得MySQL5.1.13以上版本的驅動批量提交你的插入語句。

rewriteBatchedStatements=true

完成連接配置后,我們還需要對于批量插入的編碼進行一定調整,Mybatis默認情況下執行器為Simple,這種執行器每次執行創建的都是一個全新的語句,也就是創建一個全新的PreparedStatement對象,這也就意味著每次提交的SQL語句的插入請求都無法緩存,每次調用時都需要重新解析SQL語句。 而我們的批處理則是將ExecutorType改為BATCH,執行時Mybatis會先將插入語句進行一次預編譯生成PreparedStatement對象,發送一個網絡請求進行數據解析和優化,因為ExecutorType改為BATCH,所以這次預編譯之后,后續的插入的SQL到DBMS時,就無需在進行預編譯,可直接一次網絡IO將批量插入的語句提交到MySQL上執行。

@Autowired
    private SqlSessionFactory sqlSessionFactory;

/**
     * session插入
     */
    @Test
    void batchInsert() {
        /**
         * 代碼預熱
         */
        performCodeWarmUp(5);


        List<BatchInsertTest> testList = generateBatchInsertTestData();

        SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);
        BatchInsertTestMapper sqlSessionMapper = sqlSession.getMapper(BatchInsertTestMapper.class);

        long start = System.currentTimeMillis();

        for (BatchInsertTest batchInsertTest : testList) {
            sqlSessionMapper.insert(batchInsertTest);
        }
        sqlSession.commit();
        long end = System.currentTimeMillis();
        log.info("批處理插入{}條數據耗時:{}", BATCH_INSERT_SIZE, end - start);

    }

可以看到進行3000條數據插入時,耗時也只需只需179ms左右:

05.226 INFO  c.s.w.WebTemplateApplicationTests:108  main                    批處理插入3000條數據耗時:179

而進行10w條數據批處理插入的時機只需4s左右,效率非常可觀。

04.771 INFO  c.s.w.WebTemplateApplicationTests:108  main                    批處理插入100000條數據耗時:4635

三、更高效的插入方式

因為Mybatis對于原生批處理操作做了很多的封裝,其中涉及很多校驗檢查和解析等繁瑣的流程,所以通過使用原生JDBC Batch來避免這些繁瑣的解析、動態攔截等操作,對于MySQL批量插入也會有顯著的提升。感興趣的讀者可以自行嘗試,筆者這里就不多做演示了。

四、詳解批處理高效的原因

針對上述三種方式,筆者來解釋一下為什么在能夠確保不出錯的情況下,批處理插入的效率最高,我們都知道MySQL進行插入操作時整體的耗時比例如下:

鏈接耗時 (30%)
發送query到服務器 (20%)
解析query (20%)
插入操作 (10% * 詞條數目)
插入index (10% * Index的數目)
關閉鏈接 (10%)

由此可知,進行SQL插入操作時,最耗時的操作是網絡連接,這也就是為什么在進行3000條數據插入時,foreach和批處理插入的性能的性能表現最出色。因為逐行插入提交時,每一條插入操作都會進行至少兩次的網絡返回(如果生成的是stament對象則是兩次,PreparedStatement則還要加上預編譯的網絡往返),在大量的插入情況下,所有的語句都需要經歷一次最耗時的鏈接操作,性能自然是下降了不少。

這里筆者給出逐條插入的時的執行調試日志,可以看到每條插入都會進行一次預編譯:

相比之下批處理和foreach一次預編譯加上一次網絡往返即可完成SQL執行,效率自然是上去的:

對應我們也給出批處理和foreach插入的執行日志印證這一點:

我們再來說說為什么批處理比foreach高效的原因,明明同樣是3000條語句的插入,foreach傳輸的數據包大小也小于批處理,為什么批處理的性能卻要好于foreach插入操作呢?

foreach插入進行預編譯之后,存在一個字符串解析拼接的操作,這就意味著如果本次插入的數據鍋大就會存在一個漫長的SQL拼接耗時,結合mybatis官網給出的壓測報告來看,在20~50行左右的插入性能表現最好,超過這個數字之后表現就會逐漸變差:

對此我們也給出mybatis的foreach語法底層的字符拼接的實現,即FilteredDynamicContext 下的appendSql方法:

  private static class FilteredDynamicContext extends DynamicContext {
    private DynamicContext delegate;
    //對應集合項在集合的索引位置
    private int index;
    // item的索引
    private String itemIndex;
    // item的值
    private String item;
    //.............
    // 解析 #{item}
    @Override
    public void appendSql(String sql) {
      GenericTokenParser parser = new GenericTokenParser("#{", "}", new TokenHandler() {
        @Override
        public String handleToken(String content) {
          // 把 #{itm} 轉換為 #{__frch_item_1} 之類的
          String newContent = content.replaceFirst("^\\s*" + item + "(?![^.,:\\s])", itemizeItem(item, index));
           // 把 #{itmIndex} 轉換為 #{__frch_itemIndex_1} 之類的
          if (itemIndex != null && newContent.equals(content)) {
            newContent = content.replaceFirst("^\\s*" + itemIndex + "(?![^.,:\\s])", itemizeItem(itemIndex, index));
          }
          // 再返回 #{__frch_item_1} 或 #{__frch_itemIndex_1}
          return new StringBuilder("#{").append(newContent).append("}").toString();
        }
      });
      // 拼接SQL
      delegate.appendSql(parser.parse(sql));
    }
  private static String itemizeItem(String item, int i) {
    return new StringBuilder("__frch_").append(item).append("_").append(i).toString();
  }
}

五、一次插入多少數據量合適

明確要使用批處理進行批量插入之后,我們再來了解下一個問題,一次性批量插入多少條SQL語句比較合適?

對此我們基于100w的數據,分別按照每次10、500、1000、20000、80000條壓測,最終實驗結果如下:

80000的數據,每次插入10條,耗時:14555
80000的數據,每次插入500條,耗時:5001
80000的數據,每次插入1000條,耗時:3960
80000的數據,每次插入2000條,耗時:3788
80000的數據,每次插入3000條,耗時:3993
80000的數據,每次插入4000條,耗時:3847

在經過筆者的壓測實驗時發現,在2000條差不多2M大小的情況下插入時的性能最出色。這一點筆者也在網上看到一篇文章提到MySQL的全局變量max_allowed_packet,它限制了每條SQL語句的大小,默認情況下為4M,而這位作者的實驗則是插入數據的大小在max_allowed_packet的一半情況下性能最佳。

show variables like 'max_allowed_packet%';  

當然并不一定只有上述條件影響批量插入的性能,影響批量插入的性能原因還有:

插入緩存:對于innodb存儲引擎來說,插入是需要耗費緩沖池內存的,如果在寫密集的情況下,插入緩存會占用過多的緩沖池內存,若插入操作占用大小超過緩沖池的一半,則會影響操其他的操作。

關于緩沖池的大小,可以通過下面這條SQL查看,默認情況下為134M:

show variables like 'innodb_buffer_pool_size';

索引的維護:這點相信讀者比較熟悉,如果每次插入涉及大量無序且多個索引的維護,導致B+tree進行節點分裂合并等處理,則會消耗大量的計算資源,從而間接影響插入效率。

六、使用批處理的注意事項

批處理就是將一批操作提交至MySQL服務器一次性操作,但無法保證事務的原子性,所以讀者在使用批處理操作時,若需要保證操作原子性則需要考慮一下事務問題。

七、小結

整篇文章的篇幅不算很大,可以看到筆者針對此類問題常見的做法是:

  • 明確問題和要解決的問題,以批量插入為例,首要問題就是現有方案中可以有幾種插入方式和如何提高這些插入技術的性能。
  • 將問題切割成無數個子問題,筆者將批量插入按步驟分為:如何插入和插入多少的子問題。
  • 搜索常見的解決方案,即筆者上述的的逐條插入、foreach、批處理3種插入方式。
  • 基于現成方案采用不同量級的樣本進行求證,為避免偶然性,筆者將插入的量級設置為幾千甚至幾萬不等。
  • 基于實驗樣本復盤總結,在明確批量插入技術之后,繼續查閱資料尋找插入量級,并繼續實驗從而得出最終研究成果。
  • 進階,對于上述成果繼續加以求證了解工作原理,并對后續可能存在的問題查閱更多資料進行兜底。
責任編輯:趙寧寧 來源: 寫代碼的SharkChili
相關推薦

2019-10-10 09:00:30

云端云遷移云計算

2019-05-16 09:00:06

云原生監控日志管理

2024-05-20 10:00:00

代碼Python編程

2021-01-20 10:53:41

云計算云存儲云遷移

2021-10-18 13:26:15

大數據數據分析技術

2021-07-01 15:17:14

MYSQL存儲數據庫

2023-01-27 15:41:24

2022-05-16 08:45:05

數據質量數據安全

2022-12-15 15:34:50

數據中心云遷移

2025-04-11 10:13:00

數據庫APIFastAPI

2021-04-09 08:21:25

數據庫索引數據

2022-07-29 13:55:03

大數據大數據管理

2023-10-24 14:48:23

數據治理大數據

2021-07-19 10:06:30

數據治理數字化轉型CIO

2021-12-01 13:56:37

數據中心數據中心架構數據中心網絡

2023-10-30 15:35:05

數據安全數據驅動

2021-04-21 11:12:09

CIO大數據數據驅動

2023-03-16 08:18:11

數據中心

2021-02-20 10:26:00

前端

2023-05-16 15:27:31

點贊
收藏

51CTO技術棧公眾號

婷婷夜色潮精品综合在线| 国产乱人伦丫前精品视频| 国产日产欧产精品推荐色| 搡老女人一区二区三区视频tv| 国产三级三级三级看三级| 免费视频网站在线观看入口| 久久久精品一区二区毛片免费看| 欧美精彩视频一区二区三区| 国产精品综合不卡av| 亚洲精品在线网址| 丝袜国产在线| 久久亚洲一区二区三区明星换脸| 日韩视频免费在线| 乱码一区二区三区| 丝袜美腿诱惑一区二区三区| 国产综合色在线视频区| 国产午夜精品久久久| 亚洲色图久久久| 色呦呦久久久| 国产三级一区二区三区| 999视频在线观看| 亚洲精品乱码久久| 免费成人美女女| 亚洲视频网在线直播| 九色91国产| 国产欧美第一页| 一区二区三区视频免费观看| 91.成人天堂一区| 三级在线免费观看| 黄色污污视频软件| 视频精品国内| 在线国产电影不卡| 91视频国产一区| 可以在线观看av的网站| 希岛爱理一区二区三区| 欧美日韩国产小视频在线观看| 激情五月六月婷婷| 国产成人精品免费看视频| 日韩av午夜| 91精品国产91久久久久久最新毛片 | 亚洲在线免费观看视频| 日本久久一二三四| 亚洲国产精品网站| 欧美污视频网站| 欧美人与牲禽动交com| 国产精品嫩草影院av蜜臀| 国产成人拍精品视频午夜网站| 午夜av中文字幕| 欧美黑人巨大xxxxx| 婷婷成人综合网| 国产911在线观看| 一级毛片视频在线观看| 美日韩精品视频| 国产香蕉精品视频一区二区三区| 韩国中文字幕av| 国产精品电影| 亚洲国产一区二区三区青草影视| 91探花福利精品国产自产在线| 亚洲婷婷久久综合| 久久久久久一区二区| 2019亚洲日韩新视频| 国产成人av一区二区三区不卡| 日韩在线成人| 日韩一区二区三免费高清| 全黄性性激高免费视频| 尤物视频在线看| 亚洲精品视频一区二区| 国产日韩视频在线播放| 免费成人av电影| 不卡视频一二三| 91精品国产自产91精品| 免费中文字幕在线观看| 午夜激情一区| 亚洲日韩中文字幕在线播放| 菠萝菠萝蜜网站| 欧美亚洲国产日韩| 亚洲美女又黄又爽在线观看| 中文字幕乱视频| 精品亚洲免a| 日韩激情片免费| 欧美图片一区二区| 日韩一区中文| 亚洲国产综合在线| 免费不卡av在线| 欧美裸体视频| 精品久久久久久久久中文字幕| 激情五月宗合网| 欧美日本韩国一区二区| 成人免费高清在线| 久久艹中文字幕| 可以在线观看的av网站| 中文子幕无线码一区tr| 国产精品一区二区三区四区五区 | h片在线免费观看| 亚洲最新视频在线观看| 久久综合久久综合这里只有精品| 奇米影视888狠狠狠777不卡| 欧美国产欧美亚州国产日韩mv天天看完整| 影音先锋欧美精品| 青青草原国产在线视频| 亚洲国产aⅴ精品一区二区三区| 91精品国产一区二区三区香蕉 | av资源网在线播放| 色哟哟在线观看一区二区三区| 日韩电影免费观看在| 亚洲成人影院麻豆| 亚洲一区二区三区爽爽爽爽爽 | 一区二区三区四区五区精品视频| 日本一区二区三区在线播放| 国产亚洲精品久久久久久打不开| 激情偷拍久久| 国产精品ⅴa在线观看h| av男人天堂av| 久久亚洲精品小早川怜子| 在线观看日本一区| 精品三级久久| 欧美日韩一区二区在线观看 | 成人免费av电影| 日韩一区二区不卡| 在线国产视频一区| 欧美精品一卡| 日韩有码在线播放| 精品在线播放视频| 久久99久久99| 成人福利视频在线观看| 中文天堂在线视频| 成人97人人超碰人人99| 亚洲精品日韩成人| 午夜小视频在线观看| 欧洲av在线精品| 熟女人妻在线视频| 欧美日韩亚洲一区二区三区在线| 欧美专区国产专区| 久久免费激情视频| 国产麻豆视频一区二区| 国外成人免费视频| av在线导航| 欧美日韩你懂的| 亚洲美女高潮久久久| 精品欧美激情在线观看| 国产亚洲激情在线| 日本老熟俱乐部h0930| 三级亚洲高清视频| 久久riav| 欧美办公室脚交xxxx| 日韩精品在线看片z| 日本人亚洲人jjzzjjz| 欧美在线综合| 国产精品久久九九| 蜜桃传媒在线观看免费进入 | 日韩欧美一区二区三区免费观看 | 亚洲欧美日韩国产综合在线| 青青草av网站| 免费av一区二区三区四区| 午夜精品福利在线观看| 成人免费公开视频| 亚洲另类在线视频| 深夜做爰性大片蜜桃| 精品一区二区三区中文字幕老牛 | 国产激情欧美| 亚洲性视频网站| 天天爱天天做天天爽| 99国产精品久久| 久久天天狠狠| 亚洲精品日产| 精品欧美久久久| 国产人成视频在线观看| 国产尤物精品| 成人动漫视频在线观看免费| 青青在线视频| 91精品国产一区二区人妖| 欧美一级电影免费在线观看| 国产精品久久久久久人| 91免费在线看| 精品一卡二卡三卡| 国产精品一线天粉嫩av| 亚洲精品国产精品自产a区红杏吧| 麻豆一区产品精品蜜桃的特点| 久久97超碰色| 免费观看黄色大片| 中文一区二区三区四区| 亚州国产精品久久久| 青青草视频在线观看| 色中色一区二区| 中国女人特级毛片| 麻豆精品一区二区av白丝在线| 欧美第一黄网| 黄色网址视频在线观看| 欧美一区二区三区日韩视频| 黄色一级视频免费观看| 国产一区二区三区在线看麻豆| 欧美中文字幕在线观看视频| 台湾佬综合网| 久久人人爽人人爽人人片亚洲| 久久午夜免费视频| 久久久99精品久久| 在线观看岛国av| 亚洲午夜在线| 日本免费一区二区三区| 欧美精品欧美极品欧美激情| 亚洲高清久久| 日韩在线三区| 亚洲啊v在线免费视频| 8x拔播拔播x8国产精品| 天堂аⅴ在线地址8| 精品亚洲男同gayvideo网站| 国产成a人亚洲精v品无码| 在线欧美一区二区| 日韩伦理在线视频| 日韩毛片精品高清免费| 成人午夜福利一区二区| 成人激情动漫在线观看| 欧美性受xxxxxx黑人xyx性爽| 免费理论片在线观看播放老| 色成人在线视频| 国产精品成人国产乱| 亚洲欧洲av色图| 中文字幕免费在线看线人动作大片| 福利一区福利二区| 亚洲欧美日韩一二三区| 日本一不卡视频| 成人毛片视频网站| 精品91久久久久| 亚洲精品少妇一区二区| 久久香蕉国产| 亚洲国产欧美一区二区三区不卡| 亚洲传媒在线| 精品亚洲一区二区三区四区五区高| 日本一区精品视频| 亚洲综合自拍一区| 国产精品日本一区二区不卡视频| 国产精品午夜国产小视频| 日本精品不卡| 日韩av男人的天堂| 成人影院网站| 国产一区二区三区日韩欧美| 亚洲av成人精品日韩在线播放| 亚洲精品一区在线观看| 亚洲欧美高清视频| 精品电影一区二区| 人妻少妇一区二区三区| 亚洲变态欧美另类捆绑| 欧美一区二区黄片| 亚洲国产精品高清久久久| 日韩性xxxx| 日韩高清a**址| 免费a在线观看| 亚洲性视频网站| 色的视频在线免费看| 久久久999国产| 99久久精品免费观看国产| 免费成人高清视频| 网站黄在线观看| 亚洲精品国产综合区久久久久久久| 成人无码一区二区三区| 精品国产乱码久久久久久浪潮| 蜜臀久久精品久久久久| 日韩大片在线观看视频| 男人的天堂在线| 中文字幕精品www乱入免费视频| 日日夜夜精品一区| 欧美精品免费看| 男女羞羞在线观看| 国产精品99久久久久久人| 成人在线啊v| 国产精品午夜av在线| 欧美男gay| 免费成人进口网站| 亚洲高清不卡| 日本999视频| 国产综合久久久久影院| 亚洲少妇一区二区| 久久嫩草精品久久久精品| 欧美日韩中文字幕视频| 亚洲色图制服诱惑| 日韩高清精品免费观看| 在线免费视频一区二区| 国产ts变态重口人妖hd| 亚洲精品天天看| 黄色免费在线观看网站| 91精品国产乱码久久久久久久久 | 国产精品pans私拍| avtt久久| 欧美专区一二三| 中文字幕一区二区av| 37pao成人国产永久免费视频| 蜜桃av一区二区| 精品久久久久一区二区| 欧美高清在线一区二区| 欧美一级高潮片| 欧美揉bbbbb揉bbbbb| 成人久久久精品国产乱码一区二区 | 91传媒理伦片在线观看| 国产精品午夜电影| 日本五十路女优| 欧美日韩国产成人在线91| 男人天堂综合网| 久久久久999| 粉嫩一区二区三区| 古典武侠综合av第一页| 国产一区二区三区四区| 亚洲国产精品无码观看久久| 美女视频第一区二区三区免费观看网站 | a成人v在线| 精品蜜桃传媒| 欧美三级第一页| 色www免费视频| 久久久久久久久伊人| xxxxxx国产| 日韩欧美一二三区| 午夜小视频在线| 国产成人亚洲综合91| 国产欧美一区二区三区米奇| 色女孩综合网| 久热国产精品| 国产乱了高清露脸对白| 亚洲一区二区三区精品在线| 一级全黄少妇性色生活片| 在线观看视频欧美| 网站黄在线观看| 高清欧美性猛交xxxx黑人猛交| 国产精品一区三区在线观看| 亚洲精品无人区| 日韩有码一区二区三区| 熟女少妇一区二区三区| 亚州成人在线电影| wwwav在线播放| 欧美精品在线观看| 欧美经典一区| 久久99国产精品99久久| 亚洲视频福利| 国产人妖在线观看| 亚洲精品第1页| a在线观看免费| 欧美成人黄色小视频| 国产免费av国片精品草莓男男| japanese在线视频| 精品一区二区三区的国产在线播放| 国产无遮挡在线观看| 欧美视频在线观看一区| 精品久久久中文字幕人妻| 北条麻妃在线一区二区| 亚洲精品毛片| 在线视频不卡一区二区三区| 久久精品国产亚洲一区二区三区| 亚洲一级理论片| 欧美乱妇一区二区三区不卡视频| 欧美69xxx| 8x海外华人永久免费日韩内陆视频 | 国产精品久久久亚洲一区| 无码少妇一区二区三区芒果| 国产亚洲精品aa午夜观看| 亚洲精品毛片一区二区三区| 中文字幕久热精品视频在线| 激情中国色综合| 日韩不卡一二区| 夫妻av一区二区| 国产免费av一区二区| 亚洲视频综合网| 欧洲午夜精品| 国产911在线观看| av电影一区二区| 久久精品五月天| 日韩亚洲综合在线| 日韩中文在线| 欧美韩国日本在线| 国产精品免费av| 亚洲高清视频在线播放| 91福利视频网| 四虎成人av| 久草免费资源站| 在线免费一区三区| 亚洲色图美国十次| 欧美理论一区二区| 狠狠色综合播放一区二区| 久久久香蕉视频| 亚洲人线精品午夜| 麻豆一二三区精品蜜桃| 欧美,日韩,国产在线| 欧美激情一区二区三区全黄| 国产后入清纯学生妹| 5278欧美一区二区三区| 99国产精品一区二区| www.555国产精品免费| 在线观看亚洲a| 欧美黑人猛交的在线视频| 欧美自拍资源在线| 粉嫩嫩av羞羞动漫久久久 | 日本成人在线电影网| 免费网站看av| 中日韩美女免费视频网站在线观看| 在线综合色站| 亚洲天堂网2018| 狠狠久久亚洲欧美专区| 成人短视频在线| 美女三级99| 福利电影一区二区| 一区二区三区精| 日本国产高清不卡| 国模一区二区三区|