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

深度看點 Linq查詢與性能解析

開發 后端
對于強大的數據映射功能,測評出的效率是我們可以接受的。但是很可惜的一點是,LINQ查詢目前只能支持對SQLServer的支持(但可以支持XML、Entity等)。

眾人對LINQ查詢持有不同的態度,有的說容易實現,有的說難操作,那到底是什么樣子呢,筆者特地為此做了一個Linq查詢與性能分析,請看下文吧。

Orcas(VS2008&Framework3.5)給我們帶來了很多令人興奮的新特性,尤其是LINQ的引進,可以說方便了一大批開發人員和框架設計人員。過去,當我們使用O/RMapping的一些框架時,最擔心的應該是復雜的查詢和數據庫操作的性能問題,那么LINQ在這個方面給我們帶來了什么呢?從LINQ查詢開始說起吧。

一:LINQ查詢:

一個項目中,對數據庫操作最多的應該就是查詢,特別是復雜一些的項目,查詢往往是從很多張表里取一些數據,“東拼西湊”的呈現給用戶。如果不使用O/R Mapping呢,我們處理的方式無非是兩種:復雜的SQL語句或者是存儲過程。

但是,在使用了O/R Mapping的情況下,為了保證取出的數據是強類型,不得不用多個方法來進行拼湊,麻煩且不說,性能損失是肯定的,那么也就出現了O/R Mapping框架和未封裝的ADO.NET一起用的尷尬場面。那么LINQ查詢怎么處理的呢?首先我們先來看一些復雜的查詢語法。

設計兩張表,分別為表示部門(Department)和員工(Employee):

1、 模糊查詢:

模糊查詢在O/RMapping的框架中是比較難實現的,即使實現,效率也不是很高,LINQ提供了我們豐富的模糊查詢的方法,比如我們要在Employee表中查姓張的人,可以這樣:

  1. DBDataClassesDataContext dbdata = new DBDataClassesDataContext();  
  2. var query = from employee in dbdata.Employees where
  3.  employee.EmployeeName.StartsWith("張") select employee;  

在實際執行的時候,這句話被轉換成了:

  1. SELECT [t0].[EmployeeId], [t0].[DepId], [t0].[EmployeeName], 
  2. [t0].[EmployeeSalary] FROM [dbo].[Employee] AS
  3.  [t0] WHERE [t0].[EmployeeName] LIKE @p0 

這樣的SQL語句,這個里面的@p0這個參數在執行的時候加上了“%”,也就是以@p0開頭的任何符合條件的記錄都被取出來了。這樣的方法在LINQ查詢中還有Contains、EndsWith等。

2、嵌套查詢:

如果我們需要取出市場部的所有員工,在以往的O/R Mapping框架中,往往需要取兩次(我們不考慮存在映射關系的情況),一次是取出市場部的編號,再使用編號來取出所有員工。LINQ查詢給我們提供了更好的解決辦法,我們可以這樣操作:

  1. var query = from employee in dbdata.Employees where employee.DepId ==  
  2. (from department in dbdata.Departments where department.DepName == "市場部" 
  3.  select department ).Single().DepId  
  4. select employee;  

這里我們使用了嵌套查詢來完成,這句話在執行的時候,被轉換成了SQL的嵌套查詢:

  1. SELECT [t0].[EmployeeId], [t0].[DepId], [t0].[EmployeeName],
  2.  [t0].[EmployeeSalary] FROM [dbo].[Employee] AS [t0] WHERE [t0].[DepId] = 
  3. (SELECT [t1].[DepId] FROM [dbo].[Department] AS
  4.  [t1] WHERE [t1].[DepName] = @p0) 

當然,在這里,我們不必那么麻煩,只需要使用已經存在的實體關系,就可以輕松的完成:

  1. var query = from employee in dbdata.Employees where
  2.  employee.Department.DepName == "市場部" 
  3. select employee;  

不過,這和剛才的查詢卻有本質的差別,我們來看看這里,LINQ查詢轉換成什么樣的SQL語句了:

  1. SELECT [t0].[EmployeeId], [t0].[DepId], [t0].[EmployeeName], 
  2. [t0].[EmployeeSalary] FROM [dbo].[Employee] AS 
  3. [t0] LEFT OUTER JOIN [dbo].[Department] AS [t1] ON [t1].[DepId] = 
  4. [t0].[DepId] WHERE [t1].[DepName] = @p0 

這里,轉換出來的并不是嵌套的SQL語句,而被轉換成了左連接查詢,可以看出,嵌套查詢是我們在特殊的情況下,可以使用的一個利器。

3、投影

如果說剛才的查詢,還只是很簡單的查詢,那么結合匿名類來實現投影查詢,則是LINQ查詢提供的一個利器,這種方法非常靈活,同時也滿足了我們絕大部分的查詢需求。下面我們來看一個例子:我們需要查詢出部門工資的總和,怎么做呢?

  1. var query = from department in dbdata.Departments  
  2. select  new{ depid = department.DepId, depname=department.DepName, 
  3. depsalary = 
  4. department.Employees.Sum(e => e.EmployeeSalary) };  

這句查詢語句中,在new關鍵字后面生成了一個匿名類,這個類有三個屬性,分別是 depid,depname和depsalary,其中,depsalary是經過計算獲得,這句話被轉換成:

  1. SELECT [t0].[DepId] AS [depid], [t0].[DepName] AS [depname], 
  2. (SELECT SUM([t1].[EmployeeSalary]) FROM [dbo].[Employee] AS [t1] 
  3. WHERE [t1].[DepId] = 
  4. [t0].[DepId] ) AS [depsalay] FROM [dbo].[Department] AS [t0] 

好優雅的代碼,實在是太方便了。

4、使用LINQ查詢的擴展方法

LINQ查詢提供了很多擴展方法,方便我們做各種查詢,我們來看幾個典型的擴展方法:

a) Average、Max

  1. Decimal x = dbdata.Employees.Average(e => e.EmployeeSalary);  
  2. Decimal y = dbdata.Employees.Max(e => e.EmployeeSalary);  

這是計算出員工的平均工資與***工資,你不需要編寫任何的SQL語句,Orcas中提供的LINQ到SQL對象關系映射器會處理獲取,跟蹤,和更新映射到你的數據庫數據定義和存儲過程的對象。

你只要使用任何LINQ查詢擴展方法對結果進行過濾和構形即可,LINQ到SQL會執行獲取數據所需的SQL代碼(注意,上面的 Average和Max 擴展方法很明顯地不會從數據表中返回所有的數據行,它們會使用TSQL的聚合函數來計算數據庫中的值,然后只返回一個標量值)。

b) Where、OrderBy

有時候,我們只對某張表做簡單的查詢和排序,那么,這個時候不必寫冗長的LINQ查詢語句,直接使用LINQ擴展方法即可,如:

  1. var query = dbdata.Employees.Where(e => e.EmployeeSalary > 2000).
  2. OrderBy(e => e.EmployeeName); 

這里使用了Lambda語法,這句話被轉換成以下的SQL語句:

  1. SELECT [t0].[EmployeeId], [t0].[DepId], [t0].[EmployeeName], 
  2. [t0].[EmployeeSalary] FROM [dbo].[Employee] AS [t0] WHERE
  3.  [t0].[EmployeeSalary] > @p0 ORDER BY [t0].[EmployeeName] 

以上是通過利用由Lambda提供的對表達式樹支持,以及IQueryable接口來實現的,代碼干凈整潔。

C)Take、Skip

對于大批量的數據處理,一直是開發人員的比較頭疼的事情,微軟在.NET1.1到2.0中的Gridview等控件,對大批量數據的處理上一直都不是很理想,LINQ查詢對于大批量數據的處理,可以很好的解決這個方面的問題。

  1. var query = dbdata.Employees.Skip(10).Take(10); 

這句話表示跳過該表的10條記錄,再取10條,也就是取第11至20條記錄,轉換成SQL語句如下:

  1. SELECT [t1].[EmployeeId], [t1].[DepId], [t1].[EmployeeName], 
  2. [t1].[EmployeeSalary] FROM 
  3. (SELECT ROW_NUMBER() OVER (ORDER BY [t0].[EmployeeId],
  4.  [t0].[DepId], [t0].[EmployeeName], [t0].[EmployeeSalary]) AS
  5.  [ROW_NUMBER], [t0].[EmployeeId], 
  6. [t0].[DepId], [t0].[EmployeeName], 
  7. [t0].[EmployeeSalary] FROM [dbo].[Employee] AS [t0]) AS 
  8. [t1] WHERE [t1].[ROW_NUMBER] BETWEEN
  9.  @p0 + 1 AND @p0 + @p1 ORDER BY [t1].[ROW_NUMBER] 

從以上這句SQL語句來看,最消耗性能分頁操作完全交給了數據庫操作,其處理的機制不再像Gridview控件的分頁,是將數據全部取出,然后再進行分頁顯示,因此效率上要高了很多。

D)ToList和ToArray

在默認情況下,查詢結果的數據類型是IEnumerable類型,可能很多開發人員并不習慣這個類型,而更加喜歡集合或者是數組,那么沒關系,可以使用ToList或者是ToArray來將查詢結果轉換成集合或者數組。

在這里,我們需要知道的是:使用查詢語句查詢結果的時候,實際上并沒有真正操作數據庫,這里是運用的延遲加載的機制,如果不希望使用延遲加載,而是需要立刻知道查詢的結果時,使用ToList或者是ToArray便可以做到。這是非常有用的機制。

比如我們需要顯示兩個部門的員工時,部門可以先取出放置在List中,然后再依次取出各個部門的員工,這時訪問的效率要高一些,因為不需要每次都訪問數據庫去取出部門。

二:數據操作的性能分析

當我們會熟練的使用以上的查詢方法對數據庫里的內容做各種各樣的查詢以后,就應當要了解這些數據庫操作的機制,及時調整各種數據操作語句,以較高的效率運行。那么,下面我們來看看LINQ的數據庫操作,看看她都做了些什么工作。

與NHibernate來比較,LINQ在O/R Mapping的性能與可控性上確實優于NHibernate,首先,Linq默認的數據映射采用的是Attribute來實現,這是.NET特有的語法,在編譯時就已經決定了數據對象的各種屬性,而NHibernate等大多數O/RMapping工具仍然采用XML映射文件來描述數據對象的屬性,從外部文件上讀取數據對象的屬性,顯然運行時效率要有所損失。

其次,在獲得數據的方式上也有所差別,LINQ中強大的SQL分析機制,可以分析出各種數據操作的SQL語句,并且進行優化,其效率的提升也是顯而易見的。

當然,作為一個O/R Mapping的工具來說,其效率一定達不到直接使用SQL語句訪問數據庫的效率,也就是我們通常所說的SqlDataReader/SqlDataAdapter訪問數據庫,但是,Linq的表現卻給了我們非常大的驚喜。

我做了一個測試,使用SqlDataReader和LINQ做相同的大批量數據查詢時,落后竟然不到10%,而NHibernate的查詢效率,卻低了很多,幾乎慢了1倍。對于如此強大的數據映射功能,這樣的效率是我們可以接受的。但是很可惜的一點是,LINQ查詢目前只能支持對SQLServer的支持(但可以支持XML、Entity等)。

在數據查詢上,我們通過對LINQ查詢生成的SQL語句進行分析,便可以優化查詢,這是非常方便的,但是,針對數據更新的效率問題,我們不得不談談LINQ的數據更新機制,一般情況下,數據更新我們會這么做:

  1. var query = from emp in dbdata.Employees where emp.DepId=="1001" select emp;  
  2.   Employee employee = query.First();  
  3.   employee.EmployeeName = "李四";  
  4.   dbdata.SubmitChanges();  

對于以上這段代碼,我們可以看出,其功能是從Employee表中取出部門代碼為1001的所有員工,然后我們取出***條數據(這里為了簡便,我們僅僅取出***條,其實可以用Where取出滿足條件的記錄),然后把名字修改成“李四”,再更新到數據庫中。

這段代碼,LINQ查詢都干了些什么呢?通過查詢從數據庫中取出若干條記錄,放在內存中,并且都標記為new(未改變)狀態,當修改了員工姓名的時候,被修改的對象被標記為Dirty(已改變)。

在SubmitChanges的時候,再為內存中對象狀態為Dirty的記錄自動生成SQL語句并執行,也就是說,我們要完成一次數據的更新,至少要完成一次查詢和一次更新。

由于采用了延時加載(Layze Load)的技術,在以上語句中實際從數據庫中取出的記錄只有1條,更新的時候也只更新這一條,因此效率仍然是非常高的,我在測試的過程中發現,從250000條數據中隨機抽取一條進行更新,實際的效率和從10條數據中隨機抽取一條進行更新幾乎沒有差別,因為比較更新狀態是在內存中進行,因此效率是比較高的。下面我們再看看實際的更新生成了什么樣的SQL語句:

  1. UPDATE [dbo].[Employee] SET [EmployeeName] = @p4 WHERE
  2.  ([EmployeeId] = @p0) AND ([DepId] = @p1) AND  
  3. ([EmployeeName] = @p2) AND ([EmployeeSalary] = @p3)  

原來,我們只修改了EmployeeName的字段,生成的SQL語句卻也僅僅是更新了Employee字段。那么,我們再看看后面的條件,為什么會包含除了主鍵以外的其他條件呢?原來,這也是LINQ查詢自動生成SQL語句的嚴謹所在,這是為了防止并發情況下,多個事務針對同一條記錄更新時發生錯誤,假如A事務更新了該記錄,則B事務更新會失敗。

我們不禁要問,假如要更新主鍵字段怎么辦?會不會錯誤的更新到多條記錄呢?答案是肯定的,肯定會錯誤的更新到其他記錄,因此,LINQ中規定了主鍵字段是不允許更新的,如果確實要更新,那么就刪除掉該記錄,重新插入新紀錄。這么嚴謹的SQL語句,會給我們帶來一些麻煩,我們來看下面一個應用場景:

如果我們在表中設有一個字段用于計數器,使用SQL語句是這樣的:

  1. Update CountTable set CountColumn=CountColumn+1 where CountId=@countId 

但使用LINQ查詢生成的Sql語句卻是:

  1. UPDATE [dbo].[CountTable] SET [CountColumn] = @p2 WHERE 
  2. ([CountId] = @p0) AND ([CountColumn] = @p1) 

@p2這個參數是計算好后傳入的,@p1這個參數是CountColumn原來的值。也就是說,CountColumn+1這個值不是由數據庫運算出來的,這樣一來,當并發數很高的時候,我們往往會更新失敗。我做了個測試,使用多線程模擬多用戶的情況下進行計數統計,數據庫中統計的值比使用靜態變量保存的值要小,這也就是說數據庫更新是存在失敗的情況。

另外,這樣每次的更新,需要完成的操作有查找和更新兩個步驟,因此對于效率也有比較大的影響。

以上就是對LINQ查詢與性能的分析。

【編輯推薦】

  1. 詳談Linq查詢結果分析的方法
  2. 簡簡單單學習Linq查詢語法
  3. 詳細闡述Linq插入數據的操作方法
  4. 淺析Linq插入數據的實現方法
  5. 簡單解決Linq多條件組合問題
責任編輯:阡陌 來源: 新浪博客
相關推薦

2009-12-23 17:31:56

WPF Style

2009-09-15 10:16:01

LINQ動態查詢

2012-04-13 10:00:04

LINQ

2012-06-06 09:52:07

Windows Azu存儲安全

2012-02-01 11:19:09

三網融合IPTV

2025-02-24 01:00:00

LINQ核心技術語言集成

2009-08-27 10:22:40

LINQ查詢

2009-09-16 17:33:16

LINQ TO SQL

2024-01-31 23:47:17

i++++i編碼

2009-09-11 11:39:23

C# RadioBut

2009-09-15 14:52:15

linq級聯刪除

2010-11-25 09:37:14

MySQL查詢緩存機制

2010-02-04 10:05:28

Dalvik虛擬機

2009-09-08 17:27:18

LINQ to Dat

2009-09-14 10:13:02

LINQ查詢操作

2009-09-10 16:28:17

LINQ查詢

2009-09-09 16:53:53

LINQ查詢語法

2009-09-14 10:09:26

LINQ查詢結果

2009-09-16 10:38:43

LINQ查詢

2009-09-15 10:46:04

LINQ to SQL
點贊
收藏

51CTO技術棧公眾號

高清不卡av| 日韩中文字幕影院| 色一区二区三区四区| 欧美群妇大交群中文字幕| 老司机午夜网站| 日日夜夜精品免费| 日韩成人一级片| 欧美第一淫aaasss性| 成人h动漫精品一区| 开心久久婷婷综合中文字幕| 亚洲国产婷婷综合在线精品| 青青草久久网络| 精品国产av一区二区三区| 亚洲日本黄色| 日韩视频免费中文字幕| 国产精品无码在线| 台湾天天综合人成在线| 午夜欧美大尺度福利影院在线看 | 人妻少妇被粗大爽9797pw| 撸视在线观看免费视频| 极品少妇一区二区三区精品视频 | 国产综合色区在线观看| 一区二区三区成人| 亚洲 日韩 国产第一区| 少妇无码一区二区三区| 精彩视频一区二区三区| 欧美在线观看一区二区三区| 538精品在线视频| 亚洲制服欧美另类| 欧美成人免费网站| www.色欧美| 日韩欧美2区| 精品动漫一区二区| 水蜜桃在线免费观看| 毛片网站在线| 91免费版在线| 国产一区二区在线观看免费播放| 精品久久久久中文慕人妻 | 日本午夜精品理论片a级appf发布| 成人免费视频网站入口::| 成人黄色小视频| 精品香蕉一区二区三区| 国产精品嫩草69影院| 精品国产欧美| 欧美日韩激情一区二区| 免费看污污网站| 欧美特黄aaaaaaaa大片| 欧美日韩国产中文字幕| 成人免费在线网| 国产极品人妖在线观看| 一区二区日韩电影| 国产资源第一页| 成年人黄视频在线观看| 中文字幕在线播放不卡一区| 一区二区冒白浆视频| 超碰97在线免费观看| 91女神在线视频| 老牛影视免费一区二区| 天天射,天天干| 97精品国产露脸对白| 精品一区二区国产| 性xxxxbbbb| 久久蜜臀精品av| 日韩电影天堂视频一区二区| 国产资源在线观看| 亚洲国产精品黑人久久久| 日韩av电影免费观看| 北岛玲一区二区三区| 中文字幕国产一区| 中文字幕久久一区| 中国av在线播放| 亚洲一级片在线观看| 免费一级特黄毛片| 女人高潮被爽到呻吟在线观看| 精品久久久视频| 茄子视频成人免费观看| 一二区成人影院电影网| 欧美日韩性生活| 欧美污在线观看| 福利电影一区| 国产亚洲精品久久| 东京热无码av男人的天堂| 天天做天天爱天天综合网2021| 久久九九亚洲综合| 国产性猛交普通话对白| 国产欧美一级| 成人激情免费在线| 亚洲精品一区二区三区区别| 91香蕉视频污| 日韩欧美在线一区二区| 超碰在线最新| 欧美性猛交99久久久久99按摩| 在线观看的毛片| 日本一区二区三区电影免费观看 | 成年人在线视频免费观看| 亚洲视频在线观看三级| 国产天堂视频在线观看| 免费电影日韩网站| 91精选在线观看| 女~淫辱の触手3d动漫| 影视一区二区| 国产91av在线| 国产美女明星三级做爰| 99精品国产91久久久久久| 这里只有精品66| 亚洲精品日产| 日韩免费观看高清完整版| 香蕉视频黄色在线观看| 91成人免费| 日本不卡高字幕在线2019| 精品久久人妻av中文字幕| 久久九九久精品国产免费直播| 日韩一二区视频| 成人看片网站| 亚洲国产精品99| 91久久国产综合| 日韩主播视频在线| 国产精品一区在线观看| 免费在线你懂的| 日韩欧美中文免费| 美女伦理水蜜桃4| 亚洲国产日韩欧美在线| 国产精品久久久久av| 色婷婷激情五月| 亚洲精品少妇30p| 中国黄色片免费看| 国产精品午夜一区二区三区| 久久久免费高清电视剧观看| 国产三级小视频| 国产精品久久久久久久久免费樱桃| 国产在线青青草| 卡通动漫精品一区二区三区| 欧美激情网友自拍| 99在线观看免费| 日韩一区欧美一区| 麻豆三级在线观看| av在线不卡顿| 国产精品第二页| 国产高清一级毛片在线不卡| 丰满岳妇乱一区二区三区| wwwxx日本| 黄色一区二区三区四区| 91在线观看网站| 99福利在线| 在线综合视频播放| 日本高清不卡免费| 精品写真视频在线观看| 伊人久久大香线蕉精品| 日本免费成人| 日韩亚洲精品电影| 国产又大又黄又爽| 综合网在线视频| 亚洲热在线视频| 中文字幕一区二区三区在线视频| 91免费看片在线| 国产鲁鲁视频在线观看特色| 欧美探花视频资源| 九九九视频在线观看| 免费在线观看精品| 中文字幕在线中文字幕日亚韩一区| 怡红院成人在线| 中文字幕免费国产精品| 在线亚洲欧美日韩| √…a在线天堂一区| 久久精品久久99| 亚洲网站视频| 麻豆传媒一区| jizz欧美| 九九久久综合网站| 日本精品一二区| 欧美性xxxx极品hd满灌| 91成人精品一区二区| 国产在线精品免费av| 亚洲爆乳无码精品aaa片蜜桃| 福利欧美精品在线| 日本久久久久久| 亚乱亚乱亚洲乱妇| 欧美一区二区三区免费视频| 欧美高清视频一区二区三区| 成人不卡免费av| 免费男同深夜夜行网站| 国产大片一区| 国产一区二区在线观看免费播放| 欧美××××黑人××性爽| 久久九九亚洲综合| 色婷婷中文字幕| 欧日韩精品视频| 国产精品久久久久久久精| 91在线小视频| 日韩va在线观看| 99成人在线| 亚洲国产欧洲综合997久久| 精品一区二区三区四区五区 | 99精品视频99| 亚洲国产精品99久久久久久久久 | 波多野结衣一区二区在线| 亚洲欧美日韩国产手机在线| 免费成人深夜夜行p站| 久久精品噜噜噜成人av农村| 免费毛片网站在线观看| 青青草国产成人a∨下载安卓| 99久久自偷自偷国产精品不卡| 日本电影欧美片| 欧美丰满少妇xxxx| 精品电影在线| 精品福利av导航| 怡红院男人的天堂| 亚洲成av人片在线观看| 国产一级淫片久久久片a级| 不卡一卡二卡三乱码免费网站| 伊人成人222| 天堂一区二区在线免费观看| 免费拍拍拍网站| 婷婷综合在线| 日韩高清av| 色狠狠久久av综合| 51精品国产人成在线观看| www.久久| 日韩美女写真福利在线观看| 182在线视频观看| 久久成人这里只有精品| 成人免费在线电影| 亚洲精品永久免费精品| 亚洲老妇色熟女老太| 欧美日韩激情在线| 69xxxx国产| 欧美日韩在线一区| 国产一级免费观看| 亚洲免费观看视频| 亚洲一级片在线播放| 26uuu色噜噜精品一区二区| 久久久久亚洲av无码专区首jn| 麻豆精品新av中文字幕| 韩国日本在线视频| 一区二区三区导航| 日韩五码在线观看| 欧美日韩一区自拍| 黄色小视频大全| 影音先锋成人在线电影| 宅男噜噜99国产精品观看免费| 日韩大片在线播放| 午夜一区二区三区| 欧美美女视频| 亚洲bbw性色大片| 日韩高清欧美| 亚洲视频sss| 91视频一区| 久久久久久久免费视频| 婷婷六月综合| 国产精品一二三在线观看| 欧美福利影院| 久久久久久久9| 亚洲国产欧美国产综合一区| 国产va亚洲va在线va| 亚洲激情欧美| 大j8黑人w巨大888a片| 国产偷自视频区视频一区二区| 成人在线观看你懂的| 亚洲深夜av| 日日摸天天爽天天爽视频| 日韩高清欧美激情| 久久人人爽av| 国产在线观看一区二区| 亚洲精品乱码久久久久久9色| 国产成人av电影在线播放| 亚洲成年人av| 久久久亚洲欧洲日产国码αv| 国产又黄又粗视频| 国产精品久久久久久久第一福利 | 精品福利樱桃av导航| 国内精品福利视频| 欧美视频一区二区三区在线观看| 亚洲中文字幕一区二区| 91精品欧美一区二区三区综合在 | 91在线视频在线| 少妇无套高潮一二三区| 中文字幕在线观看不卡| 久草视频在线免费看| 欧美性20hd另类| 亚洲永久精品视频| 亚洲成avwww人| 国产一二三区在线视频| 久久久国产一区二区| 岛国av在线播放| 国产精品欧美日韩一区二区| 免费观看在线一区二区三区| 久久人人九九| 欧美激情偷拍自拍| 久久手机在线视频| 久久天堂精品| 乳色吐息在线观看| 99re亚洲国产精品| 老熟妻内射精品一区| 精品福利免费观看| 国产三级精品在线观看| 日韩成人xxxx| 在线xxxx| 国产精品久久久久久久天堂 | 久久狠狠亚洲综合| 性久久久久久久久久久| **欧美大码日韩| 国产午夜性春猛交ⅹxxx| 欧美久久一二三四区| 午夜视频在线播放| 久久精品99无色码中文字幕| 色综合桃花网| 97人人香蕉| 久久国产中文字幕| 国产中文字幕免费观看| 国产一区二区三区四区五区入口| 中国毛片在线观看| 亚洲午夜在线视频| 国产农村妇女毛片精品久久| 国产丝袜精品视频| 久久香蕉av| 成人写真视频福利网| 成人vr资源| 免费观看精品视频| 大陆成人av片| 成人性生活毛片| 欧美日韩在线一区二区| 男人的天堂在线| 91国内精品久久| 日韩欧美中文在线观看| 永久域名在线精品| 青草国产精品久久久久久| aa片在线观看视频在线播放| 亚洲一区二区在线观看视频| 国产福利小视频| 久久成年人视频| 永久免费观看精品视频| 亚洲精品一区二区三区樱花| 视频在线观看一区二区三区| 香蕉网在线播放| 精品高清一区二区三区| 日本美女一级片| 国内精品小视频| gogo人体一区| 九九爱精品视频| 成人av免费在线观看| 久久久久久久黄色| 日韩欧美一区电影| 在线中文免费视频| 亚洲自拍高清视频网站| 伊人色**天天综合婷婷| 无套白嫩进入乌克兰美女| 国产精品久久久久久久久搜平片| 在线观看亚洲国产| 深夜福利一区二区| 四虎精品永久免费| 大桥未久一区二区三区| 国产美女视频91| 麻豆changesxxx国产| 精品国内二区三区| 丁香花在线电影小说观看| 国产精品久久久久久久天堂第1集| 欧美先锋影音| 久久久久国产精品无码免费看| 亚洲成人在线免费| 四虎影院在线播放| 国产成人亚洲综合91精品| 精品国产91久久久久久浪潮蜜月| 欧美黄色性生活| 中文字幕亚洲区| 国产三级视频在线播放| 欧美激情图片区| 国产乱码精品一区二区亚洲| 992kp快乐看片永久免费网址| 国产精品久久影院| 国产精品视频久久久久久| 欧美另类极品videosbest最新版本 | av在线中文| 91在线色戒在线| 亚洲国产激情| 少妇一级黄色片| 欧美成人精品3d动漫h| 小h片在线观看| 亚洲高清视频在线观看| 国产乱淫av一区二区三区 | 国产在线观看免费麻豆| 成人xxxxx色| 日一区二区三区| 精品99在线观看| 亚洲免费av片| 久久的色偷偷| www国产黄色| 最好看的中文字幕久久| 人妻少妇精品无码专区| 国产成人精品久久久| 欧美黄色aaaa| 亚洲国产日韩一区无码精品久久久| 欧美精品粉嫩高潮一区二区| 丁香花在线电影| 午夜精品视频在线观看一区二区| 国产99久久精品| 姑娘第5集在线观看免费好剧| 欧美疯狂xxxx大交乱88av| 国产调教一区二区三区| 9.1在线观看免费| 欧美午夜精品久久久久久超碰 |