亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

MSSQL批量插入數(shù)據(jù)優(yōu)化詳細

2024-08-31 01:04:59
字體:
供稿:網(wǎng)友

需求

 現(xiàn)在有一個需求是將10w條數(shù)據(jù)插入到MSSQL數(shù)據(jù)庫中,表結(jié)構(gòu)如下,你會怎么做,你感覺插入10W條數(shù)據(jù)插入到MSSQL如下的表中需要多久呢?

或者你的批量數(shù)據(jù)是如何插入的呢?我今天就此問題做個探討。

MSSQL,批量插入

壓測mvc的http接口看下數(shù)據(jù)

首先說下這里只是做個參照,來理解插入數(shù)據(jù)庫的性能狀況,與開篇的需求無半毛錢關(guān)系。

mvc接口代碼如下:

public bool Add(CustomerFeedbackEntity m)    {      using (var conn=Connection)      {        string sql = @"INSERT INTO [dbo].[CustomerFeedback]                      ([BusType]                      ,[CustomerPhone]                      ,[BackType]                      ,[Content]                     )                   VALUES                      (@BusType                      ,@CustomerPhone                      ,@BackType                      ,@Content                      )";        return conn.Execute(sql, m) > 0;      }    }

壓測的此mvc接口單條數(shù)據(jù)插入數(shù)據(jù)庫的聚合數(shù)據(jù)圖。

用例這樣的:5000個請求分500個線程執(zhí)行post請求接口。

MSSQL,批量插入

這個圖告訴我們,最慢的請求只用啦4毫秒。那么我們做個算法。

如開篇的需求來看,我們用最小的響應(yīng)時間來計算。

那么插入10w條數(shù)據(jù)到數(shù)據(jù)庫需用時=100000*4毫秒,大致是6.67分鐘。那么我們奔著這個目標來做出插入方案。

最常見的insert做法

首先我們的工程師拿到需求后這樣寫啦段代碼,如下:

//執(zhí)行數(shù)據(jù)條數(shù)    int cnt = 10 * 10000;    //要插入的數(shù)據(jù)    CustomerFeedbackEntity m = new CustomerFeedbackEntity() { BusType = 1, CustomerPhone = "1888888888", BackType = 1, Content = "123123dagvhkfhsdjk肯定會撒嬌繁華的撒嬌防護等級劃分噶哈蘇德高房價盛大開放" };    //第一種    public void FristWay()    {      using (var conn = new SqlConnection(ConnStr))      {        conn.Open();        Stopwatch sw = new Stopwatch();        sw.Start();        StringBuilder sb = new StringBuilder();        Console.WriteLine("從:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + "開始循環(huán)執(zhí)行:" + cnt + "條sql語句 ...");        for (int i = 0; i <= cnt; i++)        {          sb.Clear();          sb.Append(@"INSERT INTO [dbo].[CustomerFeedback]                      ([BusType]                      ,[CustomerPhone]                      ,[BackType]                      ,[Content]                     )                   VALUES(");          sb.Append(m.BusType);          sb.Append(",'");          sb.Append(m.CustomerPhone);          sb.Append("',");          sb.Append(m.BackType);          sb.Append(",'");          sb.Append(m.Content);          sb.Append("')");          using (SqlCommand cmd = new SqlCommand(sb.ToString(), conn))          {            cmd.CommandTimeout = 0;            cmd.ExecuteNonQuery();          }        }        Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + "時,執(zhí)行:" + cnt + "條sql語句完成 ! 耗時:" + sw.ElapsedMilliseconds + "毫秒。");      }    }

執(zhí)行結(jié)果如下:

MSSQL,批量插入

10w條數(shù)據(jù),693906毫秒,11分鐘,有沒有感覺還行,或者還可以接受的。親們,我是吐血狀不說話,繼續(xù)寫,你們看MSSQL數(shù)據(jù)庫與.Net配合插入止于哪里?

點評下:

1、不停的創(chuàng)建與釋放sqlcommon對象,會有性能浪費。

2、不停的與數(shù)據(jù)庫建立連接,會有很大的性能損耗。

此2點還有執(zhí)行結(jié)果告訴我們,此種方式不可取,即便這是我們最常見的數(shù)據(jù)插入方式。

那么我們針對以上兩點做優(yōu)化,1、創(chuàng)建一次sqlcommon對象,只與數(shù)據(jù)庫建立一次連接。優(yōu)化改造代碼如下:

public void SecondWay()    {      using (var conn = new SqlConnection(ConnStr))      {        conn.Open();        Stopwatch sw = new Stopwatch();        sw.Start();        StringBuilder sb = new StringBuilder();        Console.WriteLine("從:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + "開始循環(huán)拼接:" + cnt + "條sql語句 ...");        for (int i = 0; i <= cnt; i++)        {          sb.Append(@"INSERT INTO [dbo].[CustomerFeedback]                      ([BusType]                      ,[CustomerPhone]                      ,[BackType]                      ,[Content]                     )                   VALUES(");          sb.Append(m.BusType);          sb.Append(",'");          sb.Append(m.CustomerPhone);          sb.Append("',");          sb.Append(m.BackType);          sb.Append(",'");          sb.Append(m.Content);          sb.Append("')");        }        var result = sw.ElapsedMilliseconds;        Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + "時,循環(huán)拼接:" + cnt + "條sql語句完成 ! 耗時:" + result + "毫秒。");        using (SqlCommand cmd = new SqlCommand(sb.ToString(), conn))        {          cmd.CommandTimeout = 0;          Stopwatch sw1 = new Stopwatch();          sw1.Start();          Console.WriteLine("從:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + "開始執(zhí)行:" + cnt + "條sql語句 ...");          cmd.ExecuteNonQuery();          Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + "時,執(zhí)行:" + cnt + "條sql語句完成 ! 耗時:" + sw1.ElapsedMilliseconds + "毫秒。");        }      }    }

執(zhí)行結(jié)果如下:

MSSQL,批量插入

呀,好奇怪啊,為什么跟上一個方案沒有多大區(qū)別呢?

首先我們看下拼接這么長的sql語句是怎么在數(shù)據(jù)庫中是怎么執(zhí)行的。

1、查看數(shù)據(jù)庫的連接情況

select * from sysprocesses where dbid in (select dbid from sysdatabases where name='dbname')--或者SELECT * FROM[Master].[dbo].[SYSPROCESSES] WHERE [DBID] IN ( SELECT   [DBID]FROM   [Master].[dbo].[SYSDATABASES]WHERE   NAME='dbname')

2、查看數(shù)據(jù)庫正在執(zhí)行的sql語句

SELECT [Spid] = session_id ,      ecid ,      [Database] = DB_NAME(sp.dbid) ,      [User] = nt_username ,      [Status] = er.status ,      [Wait] = wait_type ,      [Individual Query] = SUBSTRING(qt.text,                      er.statement_start_offset / 2,                      ( CASE WHEN er.statement_end_offset = -1                         THEN LEN(CONVERT(NVARCHAR(MAX), qt.text))                            * 2                         ELSE er.statement_end_offset                       END - er.statement_start_offset )                      / 2) ,      [Parent Query] = qt.text ,      Program = program_name ,      hostname ,      nt_domain ,      start_time  FROM  sys.dm_exec_requests er      INNER JOIN sys.sysprocesses sp ON er.session_id = sp.spid      CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) AS qt  WHERE  session_id > 50 -- Ignore system spids.      AND session_id NOT IN ( @@SPID ) -- Ignore this current statement.ORDER BY  1 ,

點評:雖然看似得到啦優(yōu)化,其實與上一個解決方案的執(zhí)行過程幾乎是一樣的,所以就不用多說什么啦。

利于MSSQL數(shù)據(jù)庫的用戶自定義表類型做優(yōu)化
依舊先上代碼,或許這樣你才能對用戶自定義表類型產(chǎn)生興趣。

CREATE TYPE CustomerFeedbackTemp AS TABLE(BusType int NOT NULL,CustomerPhone varchar(40) NOT NULL,BackType int NOT NULL,Content nvarchar(1000) NOT NULL)
public void ThirdWay()    {      Stopwatch sw = new Stopwatch();      Stopwatch sw1 = new Stopwatch();      DataTable dt = GetTable();      using (var conn = new SqlConnection(ConnStr))      {        string sql = @"INSERT INTO[dbo].[CustomerFeedback]                      ([BusType]                      ,[CustomerPhone]                      ,[BackType]                      ,[Content]                     ) select BusType,CustomerPhone,BackType,[Content] from @TempTb";        using (SqlCommand cmd = new SqlCommand(sql, conn))        {          cmd.CommandTimeout = 0;          SqlParameter catParam = cmd.Parameters.AddWithValue("@TempTb", dt);          catParam.SqlDbType = SqlDbType.Structured;          catParam.TypeName = "dbo.CustomerFeedbackTemp";          conn.Open();          Console.WriteLine("從:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + "開始循環(huán)插入內(nèi)存表中:" + cnt + "條數(shù)據(jù) ...");          sw.Start();          for (int i = 0; i < cnt; i++)          {            DataRow dr = dt.NewRow();            dr[0] = m.BusType;            dr[1] = m.CustomerPhone;            dr[2] = m.BackType;            dr[3] = m.Content;            dt.Rows.Add(dr);          }          Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + "時,循環(huán)插入內(nèi)存表:" + cnt + "條數(shù)據(jù)完成 ! 耗時:" + sw.ElapsedMilliseconds + "毫秒。");          sw1.Start();          if (dt != null && dt.Rows.Count != 0)          {            cmd.ExecuteNonQuery();            sw.Stop();          }          Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + "時,執(zhí)行:" + cnt + "條數(shù)據(jù)的datatable的數(shù)據(jù)進數(shù)據(jù)庫 ! 耗時:" + sw1.ElapsedMilliseconds + "毫秒。");        }      }    }

運行結(jié)果:

MSSQL,批量插入

哇抓Q,不到2秒,不到2秒,怎么比每條4毫秒還快,不敢相信,是不是運行出問題啦。

再來一遍

MSSQL,批量插入

再來一遍

MSSQL,批量插入

是的你沒有看錯,10w條數(shù)據(jù),不到2秒。是不是迫不及待的要知道為什么?迫不及待的想知道我們用到的用戶自定義表類型是什么?

用戶自定義表類型

首先類型大家應(yīng)該很容易理解,像int,varchar,bit等都是類型,那么這個表類型是個毛線呢?

其實他就是用戶可以自己定義一個表結(jié)構(gòu)然后把他當作一個類型。

創(chuàng)建自定義類型的詳細文檔:https://msdn.microsoft.com/zh-cn/library/ms175007.aspx

其次自定義類型也有一些限制,安全性:https://msdn.microsoft.com/zh-cn/library/bb522526.aspx

然后就是如何用這個類型,他的使用就是作為表值參數(shù)來使用的。

使用表值參數(shù),可以不必創(chuàng)建臨時表或許多參數(shù),即可向 Transact-SQL 語句或例程(如存儲過程或函數(shù))發(fā)送多行數(shù)據(jù)。

表值參數(shù)與 OLE DB 和 ODBC 中的參數(shù)數(shù)組類似,但具有更高的靈活性,且與 Transact-SQL 的集成更緊密。 表值參數(shù)的另一個優(yōu)勢是能夠參與基于數(shù)據(jù)集的操作。

Transact-SQL 通過引用向例程傳遞表值參數(shù),以避免創(chuàng)建輸入數(shù)據(jù)的副本。 可以使用表值參數(shù)創(chuàng)建和執(zhí)行 Transact-SQL 例程,并且可以使用任何托管語言從 Transact-SQL 代碼、托管客戶端以及本機客戶端調(diào)用它們。

優(yōu)點

就像其他參數(shù)一樣,表值參數(shù)的作用域也是存儲過程、函數(shù)或動態(tài) Transact-SQL 文本。 同樣,表類型變量也與使用 DECLARE 語句創(chuàng)建的其他任何局部變量一樣具有作用域。 可以在動態(tài) Transact-SQL 語句內(nèi)聲明表值變量,并且可以將這些變量作為表值參數(shù)傳遞到存儲過程和函數(shù)。

表值參數(shù)具有更高的靈活性,在某些情況下,可比臨時表或其他傳遞參數(shù)列表的方法提供更好的性能。 表值參數(shù)具有以下優(yōu)勢:

首次從客戶端填充數(shù)據(jù)時,不獲取鎖。

提供簡單的編程模型。

允許在單個例程中包括復(fù)雜的業(yè)務(wù)邏輯。

減少到服務(wù)器的往返。

可以具有不同基數(shù)的表結(jié)構(gòu)。

是強類型。

使客戶端可以指定排序順序和唯一鍵。

在用于存儲過程時像臨時表一樣被緩存。 從 SQL Server 2012 開始,對于參數(shù)化查詢,表值參數(shù)也被緩存。

限制

表值參數(shù)有下面的限制:

SQL Server 不維護表值參數(shù)列的統(tǒng)計信息。

表值參數(shù)必須作為輸入 READONLY 參數(shù)傳遞到 Transact-SQL 例程。 不能在例程體中對表值參數(shù)執(zhí)行諸如 UPDATE、DELETE 或 INSERT 這樣的 DML 操作。

不能將表值參數(shù)用作 SELECT INTO 或 INSERT EXEC 語句的目標。 表值參數(shù)可以在 SELECT INTO 的 FROM 子句中,也可以在 INSERT EXEC 字符串或存儲過程中。

常見的BULK INSERT 數(shù)據(jù)集插入優(yōu)化

public void FourWay()    {      Stopwatch sw = new Stopwatch();      Stopwatch sw1 = new Stopwatch();      DataTable dt = GetTable();      using (SqlConnection conn = new SqlConnection(ConnStr))      {        SqlBulkCopy bulkCopy = new SqlBulkCopy(conn);        bulkCopy.BulkCopyTimeout = 0;        bulkCopy.DestinationTableName = "CustomerFeedback";        bulkCopy.BatchSize = dt.Rows.Count;        conn.Open();        Console.WriteLine("從:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + "開始循環(huán)插入內(nèi)存表中:" + cnt + "條數(shù)據(jù) ...");        sw.Start();        for (int i = 0; i < cnt; i++)        {          DataRow dr = dt.NewRow();          dr[0] = m.BusType;          dr[1] = m.CustomerPhone;          dr[2] = m.BackType;          dr[3] = m.Content;          dt.Rows.Add(dr);        }        Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + "時,循環(huán)插入內(nèi)存表:" + cnt + "條數(shù)據(jù)完成 ! 耗時:" + sw.ElapsedMilliseconds + "毫秒。");        sw1.Start();        if (dt != null && dt.Rows.Count != 0)        {          bulkCopy.WriteToServer(dt);          sw.Stop();        }        Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + "時,執(zhí)行:" + cnt + "條數(shù)據(jù)的datatable的數(shù)據(jù)進數(shù)據(jù)庫 ! 耗時:" + sw1.ElapsedMilliseconds + "毫秒。");      }

執(zhí)行結(jié)果:

MSSQL,批量插入

MSSQL,批量插入

MSSQL,批量插入

MSSQL,批量插入

1秒之內(nèi)完成,1秒之內(nèi)完成,看完這個簡直要在1秒之內(nèi)完成10w條數(shù)據(jù)的插入的節(jié)奏,逆天,逆天啊。

bulk insert詳解:https://msdn.microsoft.com/zh-cn/library/ms188365.aspx

專業(yè)的點評:

表值參數(shù)的使用方法與其他基于數(shù)據(jù)集的變量的使用方法相似;但是,頻繁使用表值參數(shù)將比大型數(shù)據(jù)集要快。 大容量操作的啟動開銷比表值參數(shù)大,與之相比,表值參數(shù)在插入數(shù)目少于 1000 的行時具有很好的執(zhí)行性能。

重用的表值參數(shù)可從臨時表緩存中受益。 這一表緩存功能可比對等的 BULK INSERT 操作提供更好的伸縮性。 使用小型行插入操作時,可以通過使用參數(shù)列表或批量語句(而不是 BULK INSERT 操作或表值參數(shù))來獲得小的性能改進。 但是,這些方法在編程上不太方便,并且隨著行的增加,性能會迅速下降。

表值參數(shù)在執(zhí)行性能上與對等的參數(shù)陣列實現(xiàn)相當甚至更好。

總結(jié)

接下來是大家最喜歡的總結(jié)內(nèi)容啦,內(nèi)容有三,如下:

1、希望能關(guān)注我其他的文章。

2、博客里面有沒有很清楚的說明白,或者你有更好的方式,那么歡迎加入左上方的2個交流群,我們一起學(xué)習(xí)探討。

3、你可以忘記點贊加關(guān)注,但千萬不要忘記掃碼打賞哦。

下面是其他網(wǎng)友的補充:

你前面的插入,完全是拼字符串,沒有用到任何“參數(shù)”,每個語句SQL SERVER都要解析,沒有辦法緩存,當然慢了;你可以嘗試用用參數(shù)化插入,相信也是幾秒就可以插入完

大批量數(shù)據(jù)插入,首選SqlBulkCopy

 

注:相關(guān)教程知識閱讀請移步到MSSQL教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
久久久www成人免费精品张筱雨| 国产精品乱码久久久久| 国产精品毛片av| 加勒比免费视频| 中文字幕久热| 日韩欧美一区二区久久婷婷| 一本色道久久综合亚洲精品婷婷| 国产真实乱偷精品视频| 永久久久久久久| 香蕉视频在线观看网站| 亚洲sss视频在线视频| 狠狠操狠狠色综合网| 欧美一级特黄视频| 日韩午夜中文字幕| 国内精久久久久久久久久人| 正在播放欧美视频| 日韩精品一区二区三区在线| 国产日韩欧美成人| av日韩在线免费观看| 国产区精品在线观看| 超级砰砰砰97免费观看最新一期| 宅男网站在线免费观看| 国产精品香蕉一区二区三区| 日韩在线精品| 在线观看中文字幕一区| 色一情一乱一伦一区二区三区| 日韩美女在线| 亚洲人成网站在线| 欧美hdxxxxx| 麻豆影视在线观看_| 亚洲综合无码一区二区| 日本黄色成人| 国产精品网在线观看| 欧美日韩国产中文精品字幕自在自线| 韩国福利一区| 亚洲精品乱码久久久久久按摩观| 欧美日韩不卡一区二区| 99久热在线精品视频| 夜鲁夜鲁夜鲁视频在线播放| 高清日韩一区| 香蕉av在线播放| 欧美三级美国一级| 性欧美xxxx免费岛国不卡电影| 18涩涩午夜精品.www| 丝袜美腿中文字幕| 日韩精品免费视频人成| 中文字幕在线一区二区三区| av综合在线播放| 成av人片在线观看www| 黄色一级视频在线播放| 欧美日韩尤物久久| 国产午夜精品无码| 99热这里只有精品99| 人妻少妇被粗大爽9797pw| 九色综合狠狠综合久久| 91精品91久久久久久| 国产精品亚洲第一区在线暖暖韩国| 成人3d精品动漫精品一二三| 中文字幕第24页| 成人在线视频亚洲| 国产精品永久在线| 国产中文精品久高清在线不| 老司机精品视频在线播放| 妺妺窝人体色www在线小说| 欧美老tube| 国内av免费观看| 亚洲免费中文| 日本女人一区二区三区| 国产不卡在线一区| 国产午夜视频在线观看| 神马久久精品综合| 视频一区视频二区中文| www三级免费| 国产精品不卡一区二区三区| 一区二区在线影院| 一区二区三区小说| 欧美一区二区三区男人的天堂| 国产蜜臀av在线一区二区三区| 日本黄色电影网站| 日韩深夜福利| 欧美三级午夜理伦三级| 日韩精品一区国产| 久久国产剧场电影| av中文字幕在线播放| 18成人在线观看| 久久一区二区三区国产精品| 欧美最顶级丰满的aⅴ艳星| 久久综合久久久久88| 五月天婷婷激情| 亚洲无码精品国产| 日韩中文字幕免费| 波多野结衣家庭教师视频| 中文字幕一区二区三区域| 成人精品亚洲人成在线| 日韩在线视频线视频免费网站| 欧美做受高潮中文字幕| 白丝校花扒腿让我c| 在线看不卡av| 一道本无吗一区| 亚洲欧美日韩成人在线| 93在线视频精品免费观看| 日韩成人免费av| 精品亚洲va在线va天堂资源站| 91精品美女在线| 亚洲精品中文在线影院| 亚洲爽爆av| 欧日韩不卡在线视频| 亚洲国产欧美另类| 91精品国产综合久久久久久蜜臀| 亚洲大尺度网站| 天堂а√在线中文在线新版| 综合网日日天干夜夜久久| 欧美视频一区二区三区| 侵犯稚嫩小箩莉h文系列小说| 亚洲男人的天堂在线观看| 国产精品久久久久一区二区三区| 制服 丝袜 综合 日韩 欧美| 操人视频欧美| 久久日韩精品一区二区五区| 99蜜桃臀久久久欧美精品网站| 亚洲视频成人| 色综合一本到久久亚洲91| 69视频在线| 欧美一区二区三| 日韩中文字幕欧美| www.17c.com喷水少妇| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产精品69页| 青草视频在线观看免费| 欧美色图麻豆| 亚洲日本乱码在线观看| 老司机精品视频在线播放| 国产片一区二区| 成人免费观看在线| www.在线播放| 亚洲激情五月婷婷| 韩国av在线免费观看| 中文字字幕一区二区三区四区五区| 男人天堂avav| 在线观看一区二区三区四区| 国产精品久久中文字幕| 亚洲国产av一区二区三区| 国产精品欧美久久久久一区二区| 欧美不卡激情三级在线观看| 欧洲猛交xxxx乱大交3| 激情婷婷亚洲| 久久久精品国产免大香伊| 日本欧美精品久久久| 色哟哟一区二区在线观看| 国产一区二区三区免费观看| 亚洲视频一区| 123成人网| 波多野结衣一二区| 日本久久一区二区三区| 黄色动漫网站入口| 日韩欧美一区二区不卡| 久久久久国产精品无码免费看| 88国产精品欧美一区二区三区| 亚洲一区区二区| 初尝黑人巨炮波多野结衣电影| 手机在线免费看毛片| 日韩高清不卡av| 亚洲aa中文字幕| 日韩电影中文 亚洲精品乱码| 亚洲精品午夜精品| 久久99精品国产一区二区三区| 日日夜夜天天操| 久久久女女女女999久久| 欧美日韩亚洲高清一区二区| 国产精品综合网| 玖草视频在线观看| 白白色在线观看| 激情视频网站在线播放色| 欧美黑人视频一区| 毛片在线播放网站| 全彩无遮拦全彩口工漫画全彩| 日本免费网站视频| 欧美大胆成人| 国产精品高清在线观看| 国产视频青青| 国产无遮挡aaa片爽爽| 亚洲天堂免费在线观看视频| 2021亚洲天堂| 91夜夜未满十八勿入爽爽影院| 欧美啪啪免费视频| 亚洲精品综合精品自拍| 久久久久久久久久久成人| 国产精国产精品| 国产精品国产精品国产专区不卡| 午夜精品一区二区三区在线观看| 国产一级aa大片毛片| 99re视频精品| 亚洲精品一区二区三区新线路| 一区二区三区四区五区精品| 91麻豆精品在线| 欧美jizzhd精品欧美巨大免费| 网友自拍一区| 国产一区欧美二区| 午夜私人影院久久久久| 国产高清不卡二三区| 91亚洲天堂| 日本午夜精品理论片a级appf发布| 精品无码av一区二区三区| 9久re热视频在线精品| 国产精品夜夜夜爽阿娇| 国产清纯白嫩初高中在线观看性色| 国模精品一区二区| 欧美激情一级二级| 女人床在线观看| 亚洲无码精品在线播放| 国产精品日本一区二区不卡视频| 在线观看av网站永久| 久久久久久少妇| 天天做天天干天天操| 亚洲国产91色在线| 91久久精品国产91性色| 亚洲永久精品唐人导航网址| 香蕉视频在线看| 在线观看视频一区二区欧美日韩| 高清福利在线观看| 亚洲视频在线a| 写真片福利在线播放| 在线观看欧美理论a影院| 欧美v亚洲v综合v国产v仙踪林| 少妇激情一区二区三区| japanese日本护士撒尿| 一区二区三区免费播放| 欧美经典三级视频一区二区三区| 国产精品青青草| 欧美制服第一页| 久久久久亚洲AV成人无码国产| 91精品国产综合久久婷婷香蕉| 另类小说一区二区三区| 国产乱子精品一区二区在线观看| 久久国产视频播放| 久久精品动漫| 日本一区二区免费在线| 国产美女极品在线| 亚洲一区国产视频| 欧美中日韩一区二区三区| 成人在线视频电影| 日韩在线播放av| 俄罗斯一级**毛片在线播放| japanese色系久久精品| 欧美xxxxx在线视频| 成人黄色视屏网站| a优女a优女片| 日韩精品一区二区三区中文精品| 欧亚成年男女午夜| 91免费看片| 天天做天天爱天天高潮| 成人的网站免费观看| 九九热视频这里只有精品| 亚洲精品免费播放| 成年人福利视频| 99久久精品国产一区二区成人| 91视频啊啊啊| 在线成人免费av| 日韩久久午夜影院| 在线电影中文日韩| 久久午夜宅男免费网站| 成人精品在线看| 亚洲精品视频在线观看免费| 成人免费91在线看| 丝袜美腿精品国产二区| 亚洲精品在线观看网站| 成人性教育视频在线观看| 欧美人狂配大交3d怪物一区| 欧美丝袜一区二区| 理论电影国产精品| 激情小说综合网| 在线视频欧美日韩| 精品国产乱码久久久久久闺蜜| 成年无码av片在线| 精品久久久久久电影| 日韩av午夜| 91麻豆国产语对白在线观看| 德国性xxxx| 久久中文字幕无码| 日韩免费小视频| 色综合视频一区二区三区44| 亚洲图色一区二区三区| 国产精品美女诱惑| 菠萝蜜一区二区| 一级特黄免费视频| 女人裸体性做爰全过| 亚洲欧美福利视频| 午夜精品福利一区二区三区av| 日韩av二区| 一本色道久久88精品综合| 国产无遮挡呻吟娇喘视频| 亚洲视频在线观看免费| 欧美大学生性色视频| 在线免费观看不卡av| 六月丁香在线视频| 日韩在线观看中文字幕| 亚洲综合成人在线视频| 无码人妻aⅴ一区二区三区69岛| 日本中文在线一区| 亚洲国产精品一区二区www| 性欧美xxxx视频在线观看| 国产成人啪免费观看软件| 午夜在线观看视频| 国产奶头好大揉着好爽视频| 激情久久久久久久| 欧美片在线播放| 免费在线一区二区| 日韩久久久久久久久久久| 欧美三级一区二区| 精品亚洲永久免费精品| 亚洲天堂av网| 国产成人禁片在线观看| 北岛玲精品视频在线观看| 久久久久久久久久久久久夜| 超碰在线免费观看97| 黄页在线观看免费| 久精品国产欧美| 全色精品综合影院| 亚洲成人在线网站| 国产视频网站一区二区三区| 久久久国产午夜精品| 免费影视观看网站入口| 粉嫩高清一区二区三区精品视频| 看电影就来5566av视频在线播放| 综合视频免费看| 两女双腿交缠激烈磨豆腐| 精品无码国产一区二区三区51安| 午夜影院免费版|