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

從4.75s到0.6s,我只動了一條SQL

數(shù)據(jù)庫 其他數(shù)據(jù)庫
路由規(guī)劃是為保障客戶體驗,依據(jù)產(chǎn)品需求及時效目標(biāo),設(shè)計物流網(wǎng)絡(luò)中每個節(jié)點的操作時長,然后通過節(jié)點互相串聯(lián)保障全程鏈通且綜合最優(yōu),同步輸出規(guī)劃方案并指導(dǎo)運營現(xiàn)場操作,雙向校驗優(yōu)化,實現(xiàn)路由規(guī)劃與實際運營的不斷趨合。

一、前言

軟件在持續(xù)的開發(fā)和維護(hù)過程中,會不斷添加新功能和修復(fù)舊的缺陷,這往往伴隨著代碼的快速增長和復(fù)雜性的提升。若代碼庫沒有得到良好的管理和重構(gòu),就可能積累大量的技術(shù)債務(wù),包括不一致的設(shè)計、冗余代碼、過時的庫和框架以及不再使用的功能。這些因素都會導(dǎo)致軟件結(jié)構(gòu)的脆弱,增加系統(tǒng)出錯的可能性,我們俗稱為“代碼腐化”,持續(xù)性的重構(gòu)是一種好的解決方案。SQL也是我們常用的代碼語言,雖然SQL本身作為一種標(biāo)準(zhǔn)化的查詢語言不會"腐化",但是使用SQL編寫的數(shù)據(jù)庫應(yīng)用程序、查詢和架構(gòu)確實可能會因時間推移而面臨類似于代碼腐化的問題。

平臺技術(shù)部一直堅持做穩(wěn)定性建設(shè),其中慢SQL就作為一個核心指標(biāo)在治理。在治理進(jìn)入深水區(qū)時,就會啃到因“SQL腐化”引入的復(fù)雜SQL治理這種硬骨頭。本文以一個案例為依托來看看怎樣像重構(gòu)Java等高級編程語言一樣來重構(gòu)SQL。

二、JDL路由系統(tǒng)復(fù)雜SQL治理案例

路由規(guī)劃是為保障客戶體驗,依據(jù)產(chǎn)品需求及時效目標(biāo),設(shè)計物流網(wǎng)絡(luò)中每個節(jié)點的操作時長,然后通過節(jié)點互相串聯(lián)保障全程鏈通且綜合最優(yōu),同步輸出規(guī)劃方案并指導(dǎo)運營現(xiàn)場操作,雙向校驗優(yōu)化,實現(xiàn)路由規(guī)劃與實際運營的不斷趨合。

簡言之,路由系統(tǒng)支持的路由規(guī)劃就是在做基于物流網(wǎng)絡(luò)運營的運籌優(yōu)化,網(wǎng)絡(luò)是基礎(chǔ)。而網(wǎng)絡(luò)的基礎(chǔ)又是線路,必然對線路的操作會“千奇百怪”。

1.問題SQL

select count(*) total_count from (select * from (select a.line_store_goods_id as line_resource_id, a.group_num as group_num, a.approval_erp as approval_erp, a.approval_person as approval_person, a.approval_status as approval_status, a.approval_time as approval_time, a.approval_remark as approval_remark, a.master_slave as master_slave, a.parent_line_code as parent_line_code, a.remarks as remarks, a.operator_time, a.same_stowage as same_stowage, b.start_org_id, b.start_org_name, b.start_province_id, b.start_province_name, b.start_city_id, b.start_city_name, b.start_node_code, b.start_node_name, b.end_org_id, b.end_org_name, b.end_province_id, b.end_province_name, b.end_city_id, b.end_city_name, b.end_node_code, b.end_node_name, b.depart_time, b.arrive_time, b.depart_wave_code, b.arrive_wave_code, b.enable_time, b.disable_time, a.store_enable_time, a.store_disable_time, a.update_name operator_name, b.line_code, b.line_type, b.transport_type, IF(a.store_enable_time > b.enable_time, IF(a.store_enable_time > c.enable_time, a.store_enable_time, c.enable_time), IF(b.enable_time > c.enable_time, b.enable_time, c.enable_time)) as insect_start_time, IF(a.store_disable_time < b.disable_time, IF(a.store_disable_time < c.disable_time, a.store_disable_time, c.disable_time), IF(b.disable_time < c.disable_time, b.disable_time, c.disable_time)) as insect_end_time FROM (select * FROM line_store_goods WHERE yn = 1 and master_slave = 1) a join (select start_org_id, start_org_name, start_province_id, start_province_name, start_city_id, start_city_name, start_node_code, start_node_name, end_org_id, end_org_name, end_province_id, end_province_name, end_city_id, end_city_name, end_node_code, end_node_name, depart_time, arrive_time, depart_wave_code, arrive_wave_code, line_code, line_type, transport_type, min(enable_time) as enable_time, max(disable_time) as disable_time from line_resource where line_code in (select line_code from line_store_goods WHERE yn = 1 ) and yn=1 group by line_code) b ON a.line_code = b.line_code and a.start_node_code = b.start_node_code join (select line_code,start_node_code, min(enable_time) as enable_time, max(disable_time) as disable_time from line_resource WHERE yn = 1 group by line_code) c ON a.parent_line_code = c.line_code and a.start_node_code = c.start_node_code) temp WHERE start_node_code = '311F001' and disable_time > '2023-11-15 00:00:00' and enable_time < disable_time) t_total;

這是一段運行在生產(chǎn)上的復(fù)雜SQL案例,通過慢SQL指標(biāo)統(tǒng)計識別出來。一眼看過去毫無頭緒(說明不僅性能差,而且可讀性差,那么必然可維護(hù)性差),非功能性指標(biāo)總是存在很強的關(guān)聯(lián)性。

2.開始治理

step1.格式化

對工程人員而言:要重構(gòu),格式化很重要,保證一定的可讀性。

select count(*) total_count from     (select * from         (select a.line_store_goods_id as line_resource_id, a.group_num as group_num, a.approval_erp as approval_erp, a.approval_person as approval_person, a.approval_status as approval_status, a.approval_time as approval_time, a.approval_remark as approval_remark, a.master_slave as master_slave, a.parent_line_code as parent_line_code, a.remarks as remarks, a.operator_time, a.same_stowage as same_stowage, b.start_org_id, b.start_org_name, b.start_province_id, b.start_province_name, b.start_city_id, b.start_city_name, b.start_node_code, b.start_node_name, b.end_org_id, b.end_org_name, b.end_province_id, b.end_province_name, b.end_city_id, b.end_city_name, b.end_node_code, b.end_node_name, b.depart_time, b.arrive_time, b.depart_wave_code, b.arrive_wave_code, b.enable_time, b.disable_time, a.store_enable_time, a.store_disable_time, a.update_name operator_name, b.line_code, b.line_type, b.transport_type, IF(a.store_enable_time > b.enable_time, IF(a.store_enable_time > c.enable_time, a.store_enable_time, c.enable_time), IF(b.enable_time > c.enable_time, b.enable_time, c.enable_time)) as insect_start_time, IF(a.store_disable_time < b.disable_time, IF(a.store_disable_time < c.disable_time, a.store_disable_time, c.disable_time), IF(b.disable_time < c.disable_time, b.disable_time, c.disable_time)) as insect_end_time             FROM (select *                        FROM line_store_goods WHERE yn = 1 and master_slave = 1) a                             join (select start_org_id, start_org_name, start_province_id, start_province_name, start_city_id, start_city_name, start_node_code, start_node_name, end_org_id, end_org_name, end_province_id, end_province_name, end_city_id, end_city_name, end_node_code, end_node_name, depart_time, arrive_time, depart_wave_code, arrive_wave_code, line_code, line_type, transport_type, min(enable_time) as enable_time, max(disable_time) as disable_time from line_resource where line_code in (select line_code from line_store_goods WHERE yn = 1 ) and yn=1 group by line_code) b                             ON a.line_code = b.line_code and a.start_node_code = b.start_node_code                             join (select line_code,start_node_code, min(enable_time) as enable_time, max(disable_time) as disable_time from line_resource WHERE yn = 1 group by line_code) c                             ON a.parent_line_code = c.line_code and a.start_node_code = c.start_node_code) temp                             WHERE start_node_code = '311F001' and disable_time > '2023-11-15 00:00:00' and enable_time < disable_time) t_total;

經(jīng)過格式化之后,能簡單判斷出SQL的功能是檢索滿足某條件的線路數(shù)量統(tǒng)計。

注意:格式化作為一個重要的工具可以在任意階段發(fā)生作用。

step2.分層拆解

  • level0
select count(*) total_count from t_total

  • level1 - t_total
select * from temp WHERE start_node_code = '311F001' and disable_time > '2023-11-15 00:00:00' and enable_time < disable_time

  • level2 - temp
select a.line_store_goods_id as line_resource_id, a.group_num as group_num, a.approval_erp as approval_erp, a.approval_person as approval_person, a.approval_status as approval_status, a.approval_time as approval_time, a.approval_remark as approval_remark, a.master_slave as master_slave, a.parent_line_code as parent_line_code, a.remarks as remarks, a.operator_time, a.same_stowage as same_stowage, b.start_org_id, b.start_org_name, b.start_province_id, b.start_province_name, b.start_city_id, b.start_city_name, b.start_node_code, b.start_node_name, b.end_org_id, b.end_org_name, b.end_province_id, b.end_province_name, b.end_city_id, b.end_city_name, b.end_node_code, b.end_node_name, b.depart_time, b.arrive_time, b.depart_wave_code, b.arrive_wave_code, b.enable_time, b.disable_time, a.store_enable_time, a.store_disable_time, a.update_name operator_name, b.line_code, b.line_type, b.transport_type, IF(a.store_enable_time > b.enable_time, IF(a.store_enable_time > c.enable_time, a.store_enable_time, c.enable_time), IF(b.enable_time > c.enable_time, b.enable_time, c.enable_time)) as insect_start_time, IF(a.store_disable_time < b.disable_time, IF(a.store_disable_time < c.disable_time, a.store_disable_time, c.disable_time), IF(b.disable_time < c.disable_time, b.disable_time, c.disable_time)) as insect_end_time FROM join_table

  • level3 - join_table
(select * FROM line_store_goods WHERE yn = 1 and master_slave = 1) a join (select start_org_id, start_org_name, start_province_id, start_province_name, start_city_id, start_city_name, start_node_code, start_node_name, end_org_id, end_org_name, end_province_id, end_province_name, end_city_id, end_city_name, end_node_code, end_node_name, depart_time, arrive_time, depart_wave_code, arrive_wave_code, line_code, line_type, transport_type, min(enable_time) as enable_time, max(disable_time) as disable_time from line_resource where line_code in (select line_code from line_store_goods WHERE yn = 1 ) and yn=1 group by line_code) b     ON a.line_code = b.line_code and a.start_node_code = b.start_node_code join (select line_code,start_node_code, min(enable_time) as enable_time, max(disable_time) as disable_time from line_resource WHERE yn = 1 group by line_code) c     ON a.parent_line_code = c.line_code and a.start_node_code = c.start_node_code

  • level4 - a,b,c
select * FROM line_store_goods WHERE yn = 1 and master_slave = 1
select start_org_id, start_org_name, start_province_id, start_province_name, start_city_id, start_city_name, start_node_code, start_node_name, end_org_id, end_org_name, end_province_id, end_province_name, end_city_id, end_city_name, end_node_code, end_node_name, depart_time, arrive_time, depart_wave_code, arrive_wave_code, line_code, line_type, transport_type, min(enable_time) as enable_time, max(disable_time) as disable_time from line_resource where line_code in (select line_code from line_store_goods WHERE yn = 1 ) and yn=1 group by line_code

select line_code,start_node_code, min(enable_time) as enable_time, max(disable_time) as disable_time from line_resource WHERE yn = 1 group by line_code

step3.重構(gòu)

對于Java程序員而言,《重構(gòu) - 改善既有代碼的設(shè)計》一書應(yīng)該不陌生。重構(gòu)的核心在設(shè)計原則(“道”&“法”);但是工具包(“術(shù)”)同樣重要,指導(dǎo)具體落地。

工具包準(zhǔn)備:

  • 層級合并:減少臨時表個數(shù)
  • 條件下推:減少檢索行數(shù)&臨時表大小
  • join優(yōu)化:減少檢索行數(shù)&臨時表大小
  • 子查詢刪除:減少臨時表個數(shù)
  • 子查詢與join的相互轉(zhuǎn)換:減少檢索行數(shù)

重構(gòu)1 - 層級合并

  • level0 & level1

如下兩個SQL執(zhí)行效果一致,但是性能表現(xiàn)會有很大差異。

select count(*) total_count from (select * from temp where a = "1")select count(*) from temp where a = "1"

第二種方式的性能表現(xiàn)會更好一些。原因如下:

1)減少查詢計算開銷:在第二種方式中,直接對表進(jìn)行 count(*) 統(tǒng)計,不需要額外的子查詢和臨時表操作,可以減少計算的開銷。

2)減少內(nèi)存占用:第一種方式需要在內(nèi)存中創(chuàng)建一個臨時表來存儲子查詢的結(jié)果,而第二種方式直接對原表進(jìn)行統(tǒng)計,不需要額外的內(nèi)存占用。

3)減少磁盤 IO:第二種方式可以直接利用表的索引進(jìn)行 count(*) 統(tǒng)計,而第一種方式可能需要額外的磁盤 IO 來處理子查詢和臨時表的操作。

因此,一般情況下,推薦使用第二種方式來進(jìn)行 count()統(tǒng)計,以獲得更好的性能表現(xiàn)。當(dāng)然,在實際情況中,也需要根據(jù)具體的業(yè)務(wù)場景和數(shù)據(jù)量來綜合考慮,有時候使用子查詢的方式也是必要的,但總體來說,直接對原表進(jìn)行 count() 統(tǒng)計會更高效。

重構(gòu)2 - 條件下推

start_node_code = '311F001' 直接下推至level4

SQL的執(zhí)行是流程化的,從執(zhí)行層視角看,涉及時空資源消耗最關(guān)鍵的有兩類:1-時間(行記錄掃描)、2-空間(臨時表)。

簡化來看,問題SQL的執(zhí)行過程是子查詢形成臨時表,而后基于臨時表做各種形式的計算(過濾、聯(lián)合)。

通過條件下推,可以將過濾動作盡可能前置,減少后續(xù)過程臨時表的大小。

重構(gòu)3 - join優(yōu)化

按個人喜好進(jìn)行格式化:

圖片圖片

條件下推:

圖片圖片

剝離冗余字段,冗余字段在SQL優(yōu)化過程中是一個影響易讀性的干擾信息,剝離冗余字段給工程人員一個干凈的畫板來盡情施為。

圖片圖片

刪除無效條件。join的on條件中start_node_code條件因為條件下推已經(jīng)不再是有效條件。注意,此處為了行文方便做了一定的簡化,理論上之前的剝離冗余字段理論上需要包含start_node_code字段查詢,在此步驟之后變?yōu)槿哂嘧侄魏蟊粍冸x

圖片圖片

刪除無效子查詢。此時從上往下看,表a和表b存在一個奇怪的現(xiàn)象 - 使用了兩個類似功能(子查詢和join),兩者的功能完全一致。題外話:此案例作為反面教材真心不錯。涉及兩者的優(yōu)劣決策,個人做取舍的兩個點是性能和可讀性。在此案例中功能實現(xiàn)場景特別簡單,join的可讀性明顯更好,在條件限定后掃描行數(shù)基本一致,但子查詢多一個臨時表;綜合考量會刪除子查詢。

圖片圖片

合并冗余join。繼續(xù)從上往下看,表b和表c看起來一模一樣。再次重復(fù)題外話:此案例作為反面教材真心不錯。

圖片圖片

等價條件替換,再次刪除冗余字段。

圖片圖片

經(jīng)過優(yōu)化后的join語句,可讀性發(fā)生了很大的變化 - 簡單的雙表關(guān)聯(lián)查詢。

圖片圖片

step4.結(jié)果的理論驗證

select count(*) from (    (select line_code FROM line_store_goods WHERE yn = 1 and parent_line_code = line_code and master_slave = 1 and start_node_code = '311F001') a        join    (select line_code, min(enable_time) as enable_time, max(disable_time) as disable_time from line_resource where yn=1 and start_node_code = '311F001' group by line_code) b        ON a.line_code = b.line_code) where disable_time > '2023-11-15 00:00:00' and enable_time < disable_time

重構(gòu)后的SQL具備良好的可讀性,基于此很容易反推出SQL的業(yè)務(wù)功能。基于此與其理論應(yīng)用場景做是否匹配的理論判斷很重要。有的時候生產(chǎn)上的SQL不一定是正確的,因為部分場景下可用性并不完全等價于正確性。

step5.索引優(yōu)化

大量索引優(yōu)化的文章可參考,此處不再贅述。

step6.結(jié)果的測試驗證

與代碼重構(gòu)一樣,測試通過永遠(yuǎn)是變更的正確性保證。較為特殊的是SQL改造后功能測試和性能測試都是必要的。

3.效果對比

圖片

三、寫在最后

重構(gòu)的原則具備普適性,但是工具包每個人都有自己用得順手的一套,沒必要完全趨同。

另外,上面的技術(shù)能不用就不用,好的前置設(shè)計勝過事后的十八般武藝。

責(zé)任編輯:武曉燕 來源: 一安未來
相關(guān)推薦

2020-07-01 09:07:52

SQL索引語句

2023-05-14 17:16:22

分類樹SpringBoot

2024-09-29 08:21:06

2025-05-20 00:00:00

2019-06-20 11:20:25

sql優(yōu)化數(shù)據(jù)庫

2020-10-26 08:02:28

SQL慢查詢索引

2021-04-16 07:04:53

SQLOracle故障

2022-06-29 09:43:14

SQL優(yōu)化數(shù)據(jù)庫

2023-11-29 08:10:52

類型sql語句

2025-05-12 08:27:25

2024-07-29 09:49:00

SQLMySQL執(zhí)行

2022-06-30 19:40:36

查詢接口索引優(yōu)化

2023-12-25 08:24:03

雙異步數(shù)據(jù)庫Excel

2012-11-08 14:28:16

2011-03-23 13:52:09

ORACLESQL十進(jìn)制

2022-05-31 13:58:09

MySQL查詢語句

2022-02-11 14:43:53

SQL語句C/S架構(gòu)

2023-03-26 22:42:02

SQL關(guān)聯(lián)索引

2022-07-06 10:25:29

數(shù)據(jù)科學(xué)CIO

2024-12-17 06:20:00

MySQLSQL語句數(shù)據(jù)庫
點贊
收藏

51CTO技術(shù)棧公眾號

国内成人自拍视频| 国产精品17p| 国产精品久久久久影视| 成人在线免费观看视视频| 丝袜美腿小色网| 中文字幕一区二区三区日韩精品| 岛国精品视频在线播放| 亚洲精品高清视频| www.蜜臀av| 久久资源在线| 欧美大片第1页| аⅴ天堂中文在线网| 91成人在线精品视频| 欧美亚日韩国产aⅴ精品中极品| 中文字幕色一区二区| 无码国产精品一区二区色情男同 | 中文字幕 国产精品| 图片小说视频色综合| 亚洲精选一区二区| 久久久无码人妻精品无码| 成人在线视频观看| 亚洲国产日日夜夜| 杨幂一区欧美专区| 涩涩视频在线观看免费| 国产麻豆精品95视频| 日本午夜精品理论片a级appf发布| 麻豆视频在线免费看| 欧美一区二区三区激情视频| 日韩成人av网址| 韩国三级与黑人| 国产成人福利夜色影视| 狠狠综合久久av一区二区小说| 色婷婷777777仙踪林| 超碰国产在线| 国产日产欧美一区二区视频| 精品日本一区二区三区| aa视频在线免费观看| 久久99精品久久久久久| 国产精品视频内| 黄色片中文字幕| 国产精品老牛| 91av国产在线| 日韩三级av在线| 亚洲日韩视频| 国产最新精品视频| 久青草免费视频| 欧美日韩调教| 欧美激情视频在线| 极品颜值美女露脸啪啪| 中文字幕一区二区三区在线视频| www.美女亚洲精品| 午夜激情视频在线播放| 日韩免费视频| 色吧影院999| 手机看片国产日韩| 日韩欧美1区| 日韩一区二区三区xxxx| 国产91在线播放九色| 色综合天天爱| 欧美精品免费播放| 日本少妇高清视频| 狠狠噜噜久久| 91成人在线观看国产| 天天做天天爱夜夜爽| 老鸭窝91久久精品色噜噜导演| 日本一区二区不卡| 波多野结衣人妻| 六月婷婷色综合| 91美女高潮出水| wwwav网站| 99精品视频中文字幕| 欧美综合激情| 亚洲免费视频一区二区三区| 亚洲天堂精品在线观看| 精品免费久久久久久久| 97人人在线视频| 色综合久久久久网| 9l视频白拍9色9l视频| 国产成人免费视频网站视频社区| 日韩亚洲欧美一区| 中国极品少妇videossexhd| 色婷婷av一区二区三区丝袜美腿| 国产亚洲综合久久| 久久精品黄色片| 亚洲男人影院| 亚洲a一级视频| 性插视频在线观看| 中文字幕第一区| 欧美黄色免费网址| 免费电影日韩网站| 3d动漫精品啪啪| 中文成人无字幕乱码精品区| 日韩欧美电影| 91国产高清在线| 在线观看一二三区| 成人天堂资源www在线| 蜜桃传媒视频第一区入口在线看| 91吃瓜网在线观看| 亚洲成人一区二区在线观看| 国产精品拍拍拍| a级日韩大片| 在线观看国产精品91| 久久午夜无码鲁丝片| 日韩国产精品大片| 亚洲一区二区中文字幕| 青草久久伊人| 一区二区久久久久| 孩娇小videos精品| 欧美午夜寂寞| 欧美人在线视频| 69视频免费看| 99在线精品观看| 欧美三级午夜理伦三级老人| 范冰冰一级做a爰片久久毛片| 欧美一区二区三区白人| 最新中文字幕av| 国产一区二区三区成人欧美日韩在线观看 | 精品国产乱码久久久久久久软件| 免费超碰在线| 色素色在线综合| 日韩精品视频一区二区| 亚洲成av人电影| 国产精品久久久久久久久久东京| 天天操天天干天天爱| 亚洲男人的天堂一区二区| 九色91popny| 少妇精品久久久一区二区三区 | 日韩一区二区三区免费| 亚洲国产精品人久久电影| 婷婷激情四射网| 男男视频亚洲欧美| 日本在线高清视频一区| 小视频免费在线观看| 精品国产乱码久久久久久牛牛| 久久免费手机视频| 日韩精品电影一区亚洲| 欧美亚洲免费高清在线观看| 日本三级一区| 亚洲精品电影网站| 亚洲 欧美 视频| 成人精品免费网站| 欧美大黑帍在线播放| 日韩最新av| 久久99久久久久久久噜噜| 国产精品久久久久久久久毛片| 中文字幕在线不卡一区 | 久久日本片精品aaaaa国产| 亚洲欧美综合精品久久成人| 欧美三级韩国三级日本三斤在线观看| 成人污视频在线观看| 久久这里只有精品23| 91精品日本| 久久久久久久久国产精品| 免费a视频在线观看| 亚洲国产精品视频| 亚洲综合自拍网| 亚洲欧美日本日韩| 日韩精品国内| 亚洲一区二区小说| 欧美成人激情在线| 黄色av网址在线| 疯狂做受xxxx欧美肥白少妇| 黄色正能量网站| 日韩国产高清影视| 宅男av一区二区三区| 精品国产伦一区二区三区观看说明 | 欧洲av一区二区三区| 美女www一区二区| 久久久久福利视频| 国产精品115| 国产精品成人va在线观看| 在线免费黄色| 日韩精品中午字幕| 好吊妞视频一区二区三区| 久久久精品免费网站| 亚欧激情乱码久久久久久久久| 99精品视频在线观看播放| 成人国产一区二区| 亚洲十八**毛片| 丝袜情趣国产精品| 精品国产av一区二区| 精品国产户外野外| 国产精品20p| 国产一区二区日韩精品| 欧美,日韩,国产在线| 日韩国产一区| 国产精品免费在线| 亚洲成人人体| 欧美大片欧美激情性色a∨久久| 五月婷婷激情在线| 欧美日韩成人在线| 国产成人无码精品久在线观看| 国产三级一区二区三区| 韩国三级hd中文字幕有哪些| 久久精品123| 永久免费网站视频在线观看| 亚洲欧洲av| 91嫩草免费看| 国产第一精品| 91精品国产免费久久久久久| 黄色大片在线播放| 亚洲乱码国产乱码精品精| 91在线精品入口| 日韩欧美a级成人黄色| 免费三级在线观看| 国产免费久久精品| 亚洲色图欧美另类| 久久国内精品自在自线400部| 蜜臀av色欲a片无码精品一区| 成人高清电影网站| 久久99精品久久久久久三级 | 亚洲人与黑人屁股眼交| 91丨porny丨国产入口| 久久人人爽人人片| 免费成人在线视频观看| 人妻精品无码一区二区三区| 欧美激情视频一区二区三区在线播放| 日韩欧美一区二区视频在线播放| 都市激情亚洲欧美| 亚洲最大福利视频网| 国产成人精选| 国产精品久久久久国产a级| 女人让男人操自己视频在线观看| 欧美激情a∨在线视频播放| 丝袜美腿美女被狂躁在线观看| 亚洲区免费影片| 天天综合永久入口| 亚洲第一精品电影| 成人高潮片免费视频| 欧美人动与zoxxxx乱| av首页在线观看| 日本韩国视频一区二区| 九一国产在线观看| 欧美日韩国产色视频| 久久精品久久精品久久| 亚洲激情图片qvod| 国产乱国产乱老熟300| 国产精品传媒视频| 91香蕉视频污在线观看| 日韩一区欧美一区| 亚洲人做受高潮| 亚洲日本中文字幕区| 欧美一区免费观看| 亚洲天堂av一区| √天堂中文官网8在线| 亚洲图片你懂的| 国产成人自拍网站| 亚洲日本电影在线| 欧美亚洲日本在线| 亚洲在线成人精品| 日本少妇在线观看| 天天操天天综合网| 亚洲日本视频在线观看| 色域天天综合网| 欧美男人天堂网| 欧美精选在线播放| 国产熟女一区二区三区五月婷| 日韩欧美国产成人一区二区| 亚洲欧美激情国产综合久久久| 精品国产一区久久| 天天操天天射天天舔| 亚洲精品视频免费| 精品成人一区二区三区免费视频| 亚洲深夜福利在线| 午夜免费福利在线观看| 亚州欧美在线| 国产精品第10页| 黄色日韩网站| 亚洲自拍小视频| 国产精品极品国产中出| 美乳视频一区二区| 91久久夜色精品国产按摩| 特级西西444| 夜夜嗨一区二区三区| 北条麻妃在线视频| 国产自产高清不卡| 国产草草浮力影院| 久久精品在线免费观看| 久久久精品少妇| 亚洲一区二区三区美女| 精品国产xxx| 91精品欧美福利在线观看| 99热精品在线播放| 亚洲精美色品网站| 欧美成人精品一区二区男人看| 欧美激情综合色| 亚洲欧美韩国| 成人欧美一区二区三区在线湿哒哒| 一区二区三区视频播放| 欧美成人免费在线| 中国成人一区| 成人一级片网站| 韩国av一区二区三区| 久久久国产精品无码| 国产精品毛片无遮挡高清| 国产精品二区一区二区aⅴ| 欧美伊人久久久久久午夜久久久久| www久久久com| 中日韩午夜理伦电影免费| 97人澡人人添人人爽欧美| 国产日韩精品在线| 亚州av一区| www.亚洲视频.com| 久久91精品国产91久久小草| 亚洲av网址在线| 亚洲精品国产精华液| 成人黄色免费网| 亚洲白虎美女被爆操| 麻豆传媒视频在线| 国产精品国产福利国产秒拍| 人人爽人人爽人人片av| 91精品国产综合久久精品图片| 激情福利在线| 韩国美女主播一区| 粉嫩av国产一区二区三区| 奇米影视首页 狠狠色丁香婷婷久久综合| 亚洲综合中文| 伊人国产在线视频| 久久久久久久久久看片| av大片免费在线观看| 欧美大片拔萝卜| 国产精品刘玥久久一区| 国产精品旅馆在线| 久久爱www成人| 精品99在线视频| 91在线免费播放| 日韩手机在线观看| 欧美成人aa大片| 中文在线免费| 亚洲自拍欧美另类| 99久久.com| 天堂在线中文在线| 中文字幕久久午夜不卡| 日韩乱码一区二区三区| 国产亚洲精品美女久久久久| 在线免费日韩片| 老牛影视免费一区二区| 亚洲综合电影一区二区三区| www.日本高清| 欧美日韩国产一区二区三区| 熟妇人妻av无码一区二区三区| 久久久久久久久国产精品| 成人另类视频| 亚洲人成无码网站久久99热国产| 国产91丝袜在线播放| 精品深夜av无码一区二区老年| 精品免费视频.| 波多野结依一区| 久久草.com| 丝袜亚洲另类欧美| 日本污视频网站| 欧美久久一二三四区| h片在线免费观看| 成人免费视频观看视频| 亚洲黄色毛片| 成人免费av片| 欧美综合一区二区| 欧美jizzhd69巨大| 91av一区二区三区| 亚洲天堂男人| 亚洲综合色一区| 欧美高清视频在线高清观看mv色露露十八 | 国产一区二区中文字幕| 青草草在线视频| 亚洲精品大尺度| av成人亚洲| 蜜桃视频成人在线观看| 成人一区二区三区视频在线观看| 日韩欧美一区二区一幕| 一区二区三区视频免费在线观看| 国产91亚洲精品久久久| 波多野结衣 作品| 91看片淫黄大片一级在线观看| 中文字幕免费播放| 九九九久久久久久| 亚洲自拍电影| 国产一级免费大片| 亚洲h动漫在线| 888av在线| 国产高清不卡av| 日本欧美在线观看| 波多野结衣亚洲色图| 精品呦交小u女在线| 亚洲天堂网站| 国产成人精品视频免费看| 国产精品丝袜一区| 刘亦菲久久免费一区二区| 国产精品久久久久aaaa九色| 你懂的一区二区| 国产传媒国产传媒| 日韩欧美一区二区久久婷婷| 亚洲欧美在线成人| 亚洲熟妇无码av在线播放| 国产午夜精品一区二区三区视频| www国产一区| 国产日韩欧美在线播放| 亚洲精品社区| 黄色a级片在线观看| 亚洲色图综合网| 欧美成a人免费观看久久|