久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

詳解Django ORM引發(fā)的數(shù)據(jù)庫(kù)N+1性能問題

瀏覽:177日期:2024-09-21 13:08:19

背景描述

最近在使用 Django 時(shí),發(fā)現(xiàn)當(dāng)調(diào)用 api 后,在數(shù)據(jù)庫(kù)同一個(gè)進(jìn)程下的事務(wù)中,出現(xiàn)了大量的數(shù)據(jù)庫(kù)查詢語(yǔ)句。調(diào)查后發(fā)現(xiàn),是由于 Django ORM 的機(jī)制所引起。

Django Object-Relational Mapper(ORM)作為 Django 比較受歡迎的特性,在開發(fā)中被大量使用。我們可以通過它和數(shù)據(jù)庫(kù)進(jìn)行交互,實(shí)現(xiàn) DDL 和 DML 操作.

具體來說,就是使用 QuerySet 對(duì)象來檢索數(shù)據(jù), 而 QuerySet 本質(zhì)上是通過在預(yù)先定義好的 model 中的 Manager 和數(shù)據(jù)庫(kù)進(jìn)行交互。

Manager 是 Django model 提供數(shù)據(jù)庫(kù)查詢的一個(gè)接口,在每個(gè) Model 中都至少存在一個(gè) Manager 對(duì)象。但今天要介紹的主角是 QuerySet ,它并不是關(guān)鍵。

為了更清晰的表述問題,假設(shè)在數(shù)據(jù)庫(kù)有如下的表:

device 表,表示當(dāng)前網(wǎng)絡(luò)中納管的物理設(shè)備。

interface 表,表示物理設(shè)備擁有的接口。

interface_extension 表,和 interface 表是一對(duì)一關(guān)系,由于 interface 屬性過多,用于存儲(chǔ)一些不太常用的接口屬性。

class Device(models.Model): name = models.CharField(max_length=100, unique=True) # 添加設(shè)備時(shí)的設(shè)備名 hostname = models.CharField(max_length=100, null=True) # 從設(shè)備中獲取的hostname ip_address = models.CharField(max_length=100, null=True) # 設(shè)備管理IPclass Interface(models.Model): device = models.ForeignKey(Device, on_delete=models.PROTECT, null=False,related_name=’interfaces’)) # 屬于哪臺(tái)設(shè)備 name = models.CharField(max_length=100) # 端口名 collect_status = models.CharField(max_length=30, default=’active’) class Meta: unique_together = ('device', 'name') # 聯(lián)合主鍵 class InterfaceExtension(models.Model): interface = models.OneToOneField( Interface, on_delete=models.PROTECT, null=False, related_name=’ex_info’) endpoint_device_id = models.ForeignKey( # 綁定了的終端設(shè)備 Device, db_column=’endpoint_device_id’, on_delete=models.PROTECT, null=True, blank=True) endpoint_interface_id = models.ForeignKey( Interface, db_column=’endpoint_interface_id’, on_delete=models.PROTECT, # 綁定了的終端設(shè)備的接口 null=True, blank=True)

簡(jiǎn)單說一下之間的關(guān)聯(lián)關(guān)系,一個(gè)設(shè)備擁有多個(gè)接口,一個(gè)接口擁有一個(gè)拓展屬性。

在接口的拓展屬性中,可以綁定另一臺(tái)設(shè)備上的接口,所以在 interface_extension 還有兩個(gè)參考外鍵。

為了更好的分析 ORM 執(zhí)行 SQL 的過程,需要將執(zhí)行的 SQL 記錄下來,可以通過如下的方式:

在 django settings 中打開 sql log 的日志 在 MySQL 中打開記錄 sql log 的日志

django 中,在 settings.py 中配置如下內(nèi)容, 就可以在控制臺(tái)上看到 SQL 執(zhí)行過程:

DEBUG = Trueimport loggingl = logging.getLogger(’django.db.backends’)l.setLevel(logging.DEBUG)l.addHandler(logging.StreamHandler())LOGGING = { ’version’: 1, ’disable_existing_loggers’: False, ’filters’: { ’require_debug_false’: { ’()’: ’django.utils.log.RequireDebugFalse’ } }, ’handlers’: { ’mail_admins’: { ’level’: ’ERROR’, ’filters’: [’require_debug_false’], ’class’: ’django.utils.log.AdminEmailHandler’ },’console’: { ’level’: ’DEBUG’, ’class’: ’logging.StreamHandler’, }, }, ’loggers’: { ’django.db’: { ’level’: ’DEBUG’, ’handlers’: [’console’], }, }}

或者直接在 MySQL 中配置:

# 查看記錄 SQL 的功能是否打開,默認(rèn)是關(guān)閉的:SHOW VARIABLES LIKE 'general_log%';# 將記錄功能打開,具體的 log 路徑會(huì)通過上面的命令顯示出來。SET GLOBAL general_log = ’ON’;

QuerySet

假如要通過 QuerySet 來查詢,所有接口的所屬設(shè)備的名稱:

interfaces = Interface.objects.filter()[:5] # hit once databasefor interface in interfaces: print(’interface_name: ’, interface.name, ’device_name: ’, interface.device.name) # hit database again

上面第一句取前 5 條 interface 記錄,對(duì)應(yīng)的 raw sql 就是 select * from interface limit 5; 沒有任何問題。

但下面取接口所屬的設(shè)備名時(shí),就會(huì)出現(xiàn)反復(fù)調(diào)用數(shù)據(jù)庫(kù)情況:當(dāng)遍歷到一個(gè)接口,就會(huì)通過獲取的 device_id 去數(shù)據(jù)庫(kù)查詢 device_name. 對(duì)應(yīng)的 raw sql 類似于:select name from device where id = {}.

也就是說,假如有 10 萬個(gè)接口,就會(huì)執(zhí)行 10 萬次查詢,性能的消耗可想而知。算上之前查找所有接口的一次查詢,合稱為 N + 1 次查詢問題。

解決方式也很簡(jiǎn)單,如果使用原生 SQL,通常有兩種解決方式:

在第一次查詢接口時(shí),使用 join,將 interface 和 device 關(guān)聯(lián)起來。這樣僅會(huì)執(zhí)行一次數(shù)據(jù)庫(kù)調(diào)用。 或者在查詢接口后,通過代碼邏輯,將所需要的 device_id 以集合的形式收集起來,然后通過 in 語(yǔ)句來查詢。類似于 SELECT name FROM device WHERE id in (....). 這樣做僅會(huì)執(zhí)行兩次 SQL。

具體選擇哪種,就要結(jié)合具體的場(chǎng)景,比如有無索引,表的大小具體分析了。

回到 QuerySet,那么如何讓 QuerySet 解決這個(gè)問題呢,同樣也有兩種解決方法,使用 QuerySet 中提供的 select_related() 或者 prefetch_related() 方法。

select_related

在調(diào)用 select_related() 方法時(shí),Queryset 會(huì)將所屬 Model 的外鍵關(guān)系,一起查詢。相當(dāng)于 raw sql 中的 join . 一次將所有數(shù)據(jù)同時(shí)查詢出來。select_related() 主要的應(yīng)用場(chǎng)景是:某個(gè) model 中關(guān)聯(lián)了外鍵(多對(duì)一),或者有 1 對(duì) 1 的關(guān)聯(lián)關(guān)系情況。

還拿上面的查找接口的設(shè)備名稱舉例的話:

interfaces = Interface.objects.select_related(’device’).filter()[:5] # hit once databasefor interface in interfaces: print(’interface_name: ’, interface.name, ’device_name: ’, interface.device.name) # don’t need to hit database again

上面的查詢 SQL 就類似于:SELECT xx FROMinterface INNER JOIN device ON interface.device_id = device.id limit5,注意這里是 inner join 是因?yàn)槭欠强胀怄I。

select_related() 還支持一個(gè) model 中關(guān)聯(lián)了多個(gè)外鍵的情況:如拓展接口,查詢綁定的設(shè)備名稱和接口名稱:

ex_interfaces = InterfaceExtension.objects.select_related( ’endpoint_device_id’, ’endpoint_interface_id’).filter()[:5] # orex_interfaces = InterfaceExtension.objects.select_related( ’endpoint_device_id’).select_related(’endpoint_interface_id’).filter()[:5]

上面的 SQL 類似于:

SELECT XXX FROM interface_extension LEFT OUTER JOIN device ON (interface_extension.endpoint_device_id=device.id) LEFT OUTER JOIN interface ON (interface_extension.endpoint_interface_id=interface.id)LIMIT 5

這里由于是可空外鍵,所以是 left join.

如果想要清空 QuerySet 的外鍵關(guān)系,可以通過:queryset.select_related(None) 來清空。

prefetch_related

prefetch_related 和 select_related 一樣都是為了避免大量查詢關(guān)系時(shí)的數(shù)據(jù)庫(kù)調(diào)用。只不過為了避免多表 join 后產(chǎn)生的巨大結(jié)果集以及效率問題, 所以 select_related 比較偏向于外鍵(多對(duì)一)和一對(duì)一的關(guān)系。

而 prefetch_related 的實(shí)現(xiàn)方式則類似于之前 raw sql 的第二種,分開查詢之間的關(guān)系,然后通過 python 代碼,將其組合在一起。所以 prefetch_related 可以很好的支持一對(duì)多或者多對(duì)多的關(guān)系。

還是拿查詢所有接口的設(shè)備名稱舉例:

interfaces = Interface.objects.prefetch_related(’device’).filter()[:5] # hit twice databasefor interface in interfaces: print(’interface_name: ’, interface.name, ’device_name: ’, interface.device.name) # don’t need to hit database again

換成 prefetch_related 后,sql 的執(zhí)行邏輯變成這樣:

'SELECT * FROM interface ' 'SELECT * FROM device where device_id in (.....)' 然后通過 python 代碼將之間的關(guān)系組合起來。

如果查詢所有設(shè)備具有哪些接口也是一樣:

devices = Device.objects.prefetch_related(’interfaces’).filter()[:5] # hit twice databasefor device in devices: print(’device_name: ’, device.name, ’interface_list: ’, device.interfaces.all())

執(zhí)行邏輯也是:

'SELECT * FROM device' 'SELECT * FROM interface where device_id in (.....)' 然后通過 python 代碼將之間的關(guān)系組合起來。

如果換成多對(duì)多的關(guān)系,在第二步會(huì)變?yōu)?join 后在 in,具體可以直接嘗試。

但有一點(diǎn)需要注意,當(dāng)使用的 QuerySet 有新的邏輯查詢時(shí), prefetch_related 的結(jié)果不會(huì)生效,還是會(huì)去查詢數(shù)據(jù)庫(kù):

如在查詢所有設(shè)備具有哪些接口上,增加一個(gè)條件,接口的狀態(tài)是 up 的接口

devices = Device.objects.prefetch_related(’interfaces’).filter()[:5] # hit twice databasefor device in devices: print(’device_name: ’, device.name, ’interfaces:’, device.interfaces.filter(collect_status=’active’)) # hit dababase repeatly

執(zhí)行邏輯變成:

'SELECT * FROM device' 'SELECT * FROM interface where device_id in (.....)' 一直重復(fù) device 的數(shù)量次: 'SELECT * FROM interface where device_id = xx and collect_status=’up’;' 最后通過 python 組合到一起。

原因在于:之前的 prefetch_related 查詢,并不包含判斷 collect_status 的狀態(tài)。所以對(duì)于 QuerySet 來說,這是一個(gè)新的查詢。所以會(huì)重新執(zhí)行。

可以利用 Prefetch 對(duì)象 進(jìn)一步控制并解決上面的問題:

devices = Device.objects.prefetch_related( Prefetch(’interfaces’, queryset=Interface.objects.filter(collect_status=’active’)) ).filter()[:5] # hit twice databasefor device in devices: print(’device_name: ’, device.name, ’interfaces:’, device.interfaces)

執(zhí)行邏輯變成:

'SELECT * FROM device' 'SELECT * FROM interface where device_id in (.....) and collect_status = ’up’;' 最后通過 python 組合到一起。

可以通過 Prefetch 對(duì)象的 to_attr,來改變之間關(guān)聯(lián)關(guān)系的名稱:

devices = Device.objects.prefetch_related( Prefetch(’interfaces’, queryset=Interface.objects.filter(collect_status=’active’), to_attr=’actived_interfaces’) ).filter()[:5] # hit twice databasefor device in devices: print(’device_name: ’, device.name, ’interfaces:’, device.actived_interfaces)

可以看到通過 Prefetch,可以實(shí)現(xiàn)控制關(guān)聯(lián)那些有關(guān)系的對(duì)象。

最后,對(duì)于一些關(guān)聯(lián)結(jié)構(gòu)較為復(fù)雜的情況,可以將 prefetch_related 和 select_related 組合到一起,從而控制查詢數(shù)據(jù)庫(kù)的邏輯。

比如,想要查詢?nèi)拷涌诘男畔ⅲ捌湓O(shè)備名稱,以及拓展接口中綁定了對(duì)端設(shè)備和接口的信息。

queryset = Interface.objects.select_related(’ex_info’).prefetch_related( ’ex_info__endpoint_device_id’, ’ex_info__endpoint_interface_id’)

執(zhí)行邏輯如下:

SELECT XXX FROM interface LEFT OUTER JOIN interface_extension ON (interface.id=interface_extension .interface_id) SELECT XXX FROM device where id in () SELECT XXX FROM interface where id in () 最后通過 python 組合到一起。

第一步, 由于 interface 和 interface_extension 是 1 對(duì) 1 的關(guān)系,所以使用 select_related 將其關(guān)聯(lián)起來。

第二三步:雖然 interface_extension 和 endpoint_device_id 和 endpoint_interface_id 是外鍵關(guān)系,如果繼續(xù)使用 select_related 則會(huì)進(jìn)行 4 張表連續(xù) join,將其換成 select_related,對(duì)于 interface_extension 外鍵關(guān)聯(lián)的屬性使用 in 查詢,因?yàn)閕nterface_extension 表的屬性并不是經(jīng)常使用的。

總結(jié)

在這篇文章中,介紹了 Django N +1 問題產(chǎn)生的原因,解決的方法就是通過調(diào)用 QuerySet 的 select_related 或 prefetch_related 方法。

對(duì)于 select_related 來說,應(yīng)用場(chǎng)景主要在外鍵和一對(duì)一的關(guān)系中。對(duì)應(yīng)到原生的 SQL 類似于 JOIN 操作。

對(duì)于 prefetch_related 來說,應(yīng)用場(chǎng)景主要在多對(duì)一和多對(duì)多的關(guān)系中。對(duì)應(yīng)到原生的 SQL 類似于 IN 操作。

通過 Prefetch 對(duì)象,可以控制 select_related 和 prefetch_related 和那些有關(guān)系的對(duì)象做關(guān)聯(lián)。

最后,在每個(gè) QuerySet 可以通過組合 select_related 和 prefetch_related 的方式,更改查詢數(shù)據(jù)庫(kù)的邏輯。

參考

https://docs.djangoproject.com/en/3.1/ref/models/querysets/]

(https://docs.djangoproject.com/en/3.1/ref/models/querysets/)

https://medium.com/better-programming/django-select-related-and-prefetch-related-f23043fd635d

https://stackoverflow.com/questions/39669553/django-rest-framework-setting-up-prefetching-for-nested-serializers

[https://medium.com/@michael_england/debugging-query-performance-issues-when-using-the-django-orm-f05f83041c5f

到此這篇關(guān)于詳解Django ORM引發(fā)的數(shù)據(jù)庫(kù)N+1性能問題的文章就介紹到這了,更多相關(guān)Django ORM 數(shù)據(jù)庫(kù)N+1性能內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Django
相關(guān)文章:
主站蜘蛛池模板: 午夜精品久久久久久久久久久久 | 蜜桃αv | 国产视频久久精品 | www91在线观看 | 欧美一级片在线 | 国产成人精品一区二 | 国产精品视频网 | 欧美午夜一区二区三区免费大片 | 国产免费黄色 | 国产在线精品一区二区三区 | 亚洲天堂一区二区 | 中文字幕在线观看亚洲 | 久久99精品久久久久久园产越南 | 美女扒开尿口来摸 | 特一级毛片 | av网站推荐 | 日韩视频在线播放 | 亚洲www啪成人一区二区 | 国产综合视频 | 日韩精品中文字幕在线观看 | 亚洲天天操 | 后进极品白嫩翘臀在线视频 | 亚洲一区在线日韩在线深爱 | 国产精品久久久久久吹潮 | 中文字幕一区在线观看视频 | 国产大毛片 | 国产一级毛片国语一级 | 日韩在线视频免费看 | 午夜精品久久久久久久久久久久 | 日韩激情视频一区二区 | 中文字幕在线观看一区二区三区 | 亚洲网站在线观看 | 国产精品伊人影院 | 综合久久99 | 精品2区 | 欧美一级片在线 | 国产一区二区三区免费 | 久久国 | av天天干| 国产一级色 | 中文字幕 视频一区 | 成人一级视频在线观看 | 国产精品久久久精品 | 亚洲一区中文字幕 | 天堂福利影院 | 国产伦精品一区二区三区四区视频 | 欧美一级高清在线 | 久久精品手机视频 | 欧美黄色片免费观看 | 免费v片在线观看 | 国产三级精品三级 | 91精品综合久久久久久五月天 | 一区在线免费 | 天天天操操操 | a级黄色在线观看 | www.com欧美| 国产高清精品一区二区三区 | 国产美女久久 | 欧美精品成人一区二区三区四区 | 有码一区| 久久久国产精品 | 岛国免费av| 国产精品久久久久久久天堂 | 7777久久 | 国产女人爽到高潮免费视频 | 超碰日韩在线 | 免费在线看a| 久草 在线 | 精品免费久久久久久久苍 | 在线观看理论电影 | 欧美日韩久久精品 | 国产精品一区在线 | 国产99久久久精品视频 | 色综合天天综合网国产成人网 | 色婷婷综合在线视频 | 久久综合亚洲 | 一区二区三区免费网站 | 中文无码久久精品 | 日韩av一区在线 | 荷兰欧美一级毛片 | 国产成人一区二区 | 一级毛片免费看 | 国产精品成人国产乱一区 | 久久伊人草 | 日韩爱爱免费视频 | 久久激情五月丁香伊人 | 久久国产精品99精国产 | 黄色一级在线播放 | 一级国产视频 | 欧美一区二区日韩 | 国产亚洲欧美一区二区 | 91亚洲狠狠婷婷综合久久久 | 99中文字幕 | 黄色天堂在线观看 | 成人精品在线视频 | 欧美精品欧美极品欧美激情 | 在线免费中文字幕 | 中文字幕av亚洲精品一部二部 | 国产精品久久久久久久久免费桃花 | 欧美二区三区视频 | 中文字幕一区二区在线观看 | 黄色在线观看网址 | 在线精品亚洲欧美日韩国产 | 日韩一区二区福利 | 国产区视频在线观看 | 羞羞av在线 | 国产午夜小视频 | www四虎com| 国产亚洲欧美在线 | 日日爱视频 | 成人黄色电影在线观看 | 波多野结衣 一区二区三区 精品精品久久 | 狠狠躁天天躁夜夜添人人 | 国产美女网站 | 日韩3级 | 观看av| 亚洲一区二区三区在线 | 亚洲午夜精品 | 91爱爱网| 黄瓜av| 亚洲 欧美日韩 国产 中文 | 97人人干| 狠狠躁夜夜躁人人爽天天高潮 | a一级毛片| 国产精品久久久久久久久小说 | 久久久99久久 | 午夜色播 | 久章操 | 精品久久伊人 | 欧美一区二区三区男人的天堂 | 亚洲一区二区精品视频 | 91亚洲国产 | 一区二区三区在线免费观看 | 欧美精品欧美精品系列 | 97av在线视频 | 欧美xxxx在线 | 九九综合久久 | 成人看片网| 99综合| 蜜桃av人人夜夜澡人人爽 | 国产精品一区二区久久久久 | 日韩成人影视 | 激情久久av一区av二区av三区 | 精品99久久久久久 | 91色乱码一区二区三区 | 成人免费xxx在线观看 | 欧美日韩大陆 | 国产精品久久久久久久久久久久久久 | 国内精品亚洲 | 国产精品免费视频一区 | 成人在线视频网站 | 日韩精品免费在线视频 | 久久久久国产精品免费免费搜索 | 精品视频在线观看 | 国产艳妇av视国产精选av一区 | 欧美xxxx做受欧美 | 欧美日韩一二三区 | 国产精品欧美一区二区三区不卡 | 在线观看国产视频 | 91色在线| www.夜夜骑 | 一级黄色国产 | 国产精品久久久久久久久久免费看 | 精品久久伊人 | 久久精品播放 | 久久黄色片 | 欧美一区三区 | 国产精品久久久久久久久久久久午夜片 | 日本狠狠干 | 久久99精品国产自在现线 | 色婷婷久久一区二区三区麻豆 | 国产精品日本一区二区在线播放 | 精品一区二区三区四区五区 | 99热新 | 伦理午夜电影免费观看 | 精品久久电影 | 91精品综合久久久久久五月天 | 久久久久国产一区二区三区 | 亚洲精品久久久一区二区三区 | 综合五月激情 | 亚洲一区二区在线免费观看 | 日本一区二区三区四区 | 久久成人精品一区二区三区 | 亚洲男人天堂2023 | 日韩1区| 奇米在线视频 | 黑人巨大精品欧美一区二区免费 | 国产美女在线观看 | 四季久久免费一区二区三区四区 | 男女羞羞视频在线观看 | 国产成人精品久久二区二区91 | 成人欧美 | 91社区在线高清 | 羞羞视频网站 | 国产精品一区二 | 欧美日韩国产精品 | 一级在线播放 | 久草视频播放 | 一级免费黄色免费片 | 国产精选视频 | 国产精品视频一区二区三区 | 亚洲精品一区二区另类图片 | 午夜婷婷色 | 中文字幕一区二区三区乱码图片 | 国产精品美女久久久久久久久久久 | 日韩中出| 中文字幕网在线 | 国产亚洲精品美女久久久久久久久久 | 超碰人操| www国产免费| 欧美福利二区 | 久久久精彩视频 | 久久九九国产精品 | 黄色片一区 | 九九免费视频 | 黄色大片在线播放 | 久久狠狠| 99久久99久久精品国产片果冻 | 日韩精品www | 中文精品在线 | 日韩久久一区二区 | 国产二区三区 | 久久亚洲一区 | 国产中文视频 | 午夜精品久久久久久久星辰影院 | 在线毛片观看 | 亚洲黄色高清视频 | 久久精品在线 | 99热婷婷| 国产成人高清精品免费5388 | 欧美精品一二三区 | 男女羞羞视频网站18 | 91综合网| 综合一区| 亚洲精品一| 日韩精品中文字幕一区二区三区 | 啪啪免费网站 | 欧美性一级 | 欧美成人手机在线 | 精品国产欧美 | 日本一区二区三区四区 | 午夜免费剧场 | 成人久久 | 日本色综合 | 性欧美大战久久久久久久免费观看 | av大片| 久久久精品视频免费观看 | 亚洲精品久久久久久久久久久 | 国产成人av综合 | 精品国产31久久久久久 | 精品无人乱码一区二区三区 | 精品国产欧美一区二区 | 欧美国产一区二区三区 | 欧美午夜精品一区二区三区电影 | 超碰香蕉 | 国产精品久久久久久久毛片 | 亚洲欧洲综合 | 日韩一区二区三区福利视频 | 亚洲久草在线 | 精品久久影院 | 色av综合| 黄色片地址 | 精品久久香蕉国产线看观看亚洲 | 欧美国产日韩在线观看 | 亚洲精品夜夜夜 | 久久精品2| 日韩精品专区在线影院重磅 | 成年人网站在线免费看 | 日本午夜电影 | 成人欧美一区二区三区在线观看 | 中文在线一区 | 久久国产亚洲 | 欧州一区二区三区 | 青青草亚洲 | 国产高潮失禁喷水爽网站 | 欧美成人一区二区三区片免费 | 久久久久久久国产 | 精品一区国产 | 国产精国产精品 | 国产一区二区精品在线观看 | 亚洲一区视频在线 | 精品久久久成人 | 精品一区二区三区四区 | 北条麻妃99精品青青久久主播 | 国产高清精品在线 | 福利视频一区二区三区 | 中文字幕一区二区三区不卡 | 色综合久久久久 | 欧美黑人一级爽快片淫片高清 | 国产成人综合在线 | 91啦| 欧美日韩免费在线 | 蜜桃一区二区三区 | 天天操夜夜干 | 麻豆av电影在线观看 | 日韩欧美视频一区 | 成人黄色一区 | 日韩一区二区三区在线观看 | 成年人视频在线免费观看 | 日日夜夜精品 | 精品一区二区三区四区五区 | 美女天天操 | 久久久久国产一区二区三区四区 | 亚洲男人网 | 久久久久久久国产精品 | 亚洲免费观看视频 | 色婷婷国产精品 | 91精产国品一二三区在线观看 | 中文一区 | 亚洲综合在线一区 | 国产一区二区三区免费观看 | 国产精品免费在线 | 九九免费视频 | 精品欧美一区二区三区久久久 | 荷兰欧美一级毛片 | 久久精品免费一区二区三区 | 欧美成人免费网站 | 视频一区二区三区中文字幕 | 久久久精品一区 | 国产欧美高清在线观看 | 亚州中文字幕蜜桃视频 | 黄网站在线播放 | 欧美日韩一区二区电影 | 欧美日韩国产综合视频 | 一区二区三区免费 | 久久久久久9 | 久草久草久 | 国产综合精品一区二区三区 | 亚洲国产精品自拍 | 91免费在线播放 | 亚洲一区二区精品视频 | 波多野结衣一二三 | 国产精品视频一区二区三区 | 亚洲国产精品人人爽夜夜爽 | 欧美久久一级特黄毛片 | 亚洲中字幕女 | 羞羞视频在线观免费观看 | 国产中文字幕在线观看 | 亚洲在线免费观看 | 国产午夜精品一区二区三区视频 | 一道本一二三区 | 久久免费国产 | 男女视频在线观看 | 国产综合久久久久久鬼色 | 欧美国产视频 | 国产精品福利午夜在线观看 | 亚洲免费人成在线视频观看 | 成人在线手机版视频 | 欧洲毛片基地 | 亚洲一级毛片 | 久久精品一区二区三区四区 | 日韩精品一区二区三区老鸭窝 | 亚洲精品国偷拍自产在线观看 | 久久爱www.| 男女视频免费在线观看 | 日日夜夜精品免费视频 | 国产免费看 | 精品一区二区三区四区五区 | 久久se精品一区精品二区 | 国产亚洲欧美一区 | 成人在线视频免费观看 | 97久久精品午夜一区二区 | 欧美精品成人一区二区在线 | 伊人在线| 国产不卡在线观看 | 日韩一区二区在线播放 | 欧美成人精品一区二区男人看 | 日韩午夜电影 | 成人在线观 | 久久一区二区三区四区 | 人人做人人澡人人爽欧美 | 欧美激情国产日韩精品一区18 | 久久视频一区二区 | 一区二区三区国产视频 | 久久久久国产 | 久久精品无码一区二区日韩av | 男女深夜视频 | 国产不卡免费视频 | 欧美激情亚洲 | 亚洲va欧美va天堂v国产综合 | 综合久久一区 | 亚洲一区电影 | 午夜久久久久 | 日韩av视屏 | 中文字幕一区二区三区在线视频 | 天天操,夜夜操 | 久久影音先锋 | 天天操网 | 欧美精品在线一区二区 | 91中文字幕在线观看 | 国产三级在线播放 | jizz中国日本 | 日本黄色一级片视频 | 一级全黄少妇性色生活片毛片 | 亚洲高清在线观看 | 国产综合精品一区二区三区 | 国产精品99 | 精品久久久久久久久久久 | 在线欧美视频 | 一道本视频 | 一区二区免费在线 | 黄色片在线观看视频 | 日韩欧美国产一区二区 | 日韩精品专区 | 日韩精品在线视频 | 欧美一区2区三区4区公司二百 | 欧美一区二区三区 | 日本私人网站在线观看 | 日韩视频精品在线 | 99伊人 | 久久资源av | 日韩精品免费在线观看 | 天天拍天天草 | 日韩av一区二区三区四区 | 亚洲二区在线 | jizz国产免费| 50人群体交乱视频 | 亚洲欧美日韩一区二区 | 毛片在线看片 | 色婷婷亚洲国产女人的天堂 | 欧美精产国品一二三区 | 精品久久ai| 天堂一区二区三区 | 一级毛片免费在线 | 激情在线观看视频 | 狠狠ri | 久久亚洲网 | 国产日韩精品一区二区 | 日韩中文字幕在线看 | 亚洲伦理 | 一区视频网站 | 色婷婷综合久久久中文字幕 | 日干夜干天天干 | 日韩欧美国产精品综合嫩v 国产高清av在线一区二区三区 | 国产精品一二三区视频 | 午夜黄色影院 | 欧美一级在线 | 人人干天天干 | 欧美精品成人一区二区三区四区 | 午夜影晥| 性色国产 | 日韩一区二区在线观看 | 欧美日韩免费在线 | 国产97色在线 | 亚洲 | 极品久久 | 免费精品视频 | 99色在线视频 | 黑人粗黑大躁护士 | 亚洲一区二区中文字幕 | 黄a一级 | 日韩欧美国产一区二区 | 96久久久 | 日本久久久久久久久久 | 久久国产午夜 | 国产妇女乱码一区二区三区 | 二区视频| 久久久精品国产 | 欧美日本一区 | 久久视频免费在线 | 天天干com| 成人一级毛片 | 亚洲精品乱码久久久久久蜜桃91 | 亚洲社区在线 | 黄色一级影视 | 日韩中文字幕在线视频 | 毛片av在线 | 精品久久一二三区 | 国产精品一二区 | 亚洲精选一区 | 一区免费看| 国产18av | 亚洲成人在线视频观看 | 欧美成人a∨高清免费观看 在线视频成人 | 日韩在线成人 | 久久99精品久久久久久久青青日本 | 91激情在线 | 日本a视频 | av片在线观看网站 | 日本福利网站 | 国产精品无码永久免费888 | 久久久999精品视频 欧美老妇交乱视频 | 国产精品永久免费视频 | 中文一二区 | 精品亚洲一区二区 | 热久久这里只有精品 | 日韩电影免费在线观看中文字幕 | 日韩精品一区二区三区第95 | 日本欧美在线观看 | 91精品国产综合久久久久久软件 | 国产精品xxxx| 亚洲 激情 在线 | 青草青草久热精品视频在线观看 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 涩涩久久 | av片在线观看网站 | 久久久精品视频免费观看 | 国产精品日韩欧美 | 午夜tv免费观看 | 无套内谢孕妇毛片免费看红桃影视 | 久久精品一区二区三区不卡牛牛 | 中文字幕乱码亚洲精品一区 | 99精品免费 | 99热在线免费观看 | 久久夜精 | 免费av一区| 一a毛片| 国产男女视频在线观看 | 欧美 日韩 国产 一区 | 中文字幕 亚洲一区 | 成人欧美一区二区三区视频xxx | 亚洲精品资源在线观看 | 自拍偷拍专区 | 免费成人一级片 | 久久国产精品久久精品 | 日韩在线免费 | 欧美性猛交一区二区三区精品 | 欧美精品一区二区三区蜜桃视频 | 99色影院| 国产1页 | 国内精品视频一区二区三区 | 精品综合久久 | a毛片在线免费观看 | 国产精品乱码一区二区三区 | 伊人色播 | 日韩精品专区 | 中文字幕亚洲欧美日韩在线不卡 | 福利久久| 国产精品久久久久久久久久小说 | 久久精品日产高清版的功能介绍 | 国产欧美日韩精品在线 | 欧美福利视频 | 一本一本久久a久久精品综合妖精 | 亚洲欧洲一区 | 成人 在线 | 国产精品久久久久久久久 | 久久久久久91亚洲精品中文字幕 | 国产精品美女久久久久aⅴ国产馆 | 国产免费久久 | 精品国产青草久久久久福利 | 国产精品视频免费观看 | 成人午夜毛片 | 久久这里只有国产精品 | 亚洲中国精品精华液 | 日韩不卡一区二区三区 | 精品国产乱码久久久久久密桃99 | 久久99精品国产99久久6男男 | 国产乱码精品一区二区三区忘忧草 | 日韩在线视频网站 | 中文字幕色 | 97久久久国产精品 | 久久综合久久综合久久综合 | 亚洲一区二区在线 | 日韩精品一区二区三区在线观看 | 国产成人精品一区二区三区四区 | 黑人av | 日本三级电影天堂 | 精品成人| 亚洲 中文 欧美 日韩在线观看 | 午夜在线 | 国产一区二区三区久久久 | 亚洲免费精品 | 在线看欧美 | www.操操操 | 日韩成人免费电影 | 国产96在线视频 | 最新中文字幕在线 | 91精品久久久久久久久久 | 国产一级淫片a级aaa | 后人极品翘臀美女在线播放 | a在线观看 | 久久久久亚洲精品 | 午夜国产视频 | 大乳videos巨大吃奶 | 国产精品欧美一区二区三区 | 美女视频黄a | 国产精品视频一区二区免费不卡 | 亚洲国产一区二区三区四区 | 久久精彩 | 亚洲精品国产综合区久久久久久久 | 日韩成人免费中文字幕 | 精品一区二区三区免费 | 久久r免费视频 | 国产免费亚洲 | 亚洲精品一区二区在线 | a级性视频 | 免费看的黄色 | 91高清视频在线观看 | 亚洲经典视频在线观看 | 欧美激情欧美激情在线五月 | 国产偷录视频叫床高潮对白 | 激情毛片 | 夜夜天天操 | 亚洲综合二区 | 国产精品九九九 | 欧美午夜精品一区二区三区电影 | 亚洲成人高清 | av黄色在线 | 日本免费在线 | 欧美成人免费在线观看 | 国产一区国产二区在线观看 | 国产精品一二三区 | av国产精品| 91精品国产欧美一区二区成人 | 久草久 | 中文字幕亚洲视频 | 国产一区二区三区免费 | 成人在线精品 | 国产日韩一区 | 欧美一区二区三区在线 | 亚洲精品久久久一区二区三区 | 亚洲一区在线日韩在线深爱 | 欧美嘿咻 | 久久成人精品 | 91久久国产精品 | 久久久999精品视频 欧美老妇交乱视频 |