久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

跨數(shù)據(jù)庫(kù)SQL優(yōu)化:四大引擎的索引、執(zhí)行計(jì)劃與等待事件實(shí)戰(zhàn)指南

跨數(shù)據(jù)庫(kù)SQL優(yōu)化:四大引擎的索引、執(zhí)行計(jì)劃與等待事件實(shí)戰(zhàn)指南 把Oracle上跑得順滑的SQL原封不動(dòng)扔到SQL Server里結(jié)果慢了十幾倍客戶當(dāng)場(chǎng)質(zhì)疑你是不是換了一臺(tái)渣服務(wù)器——這種事我經(jīng)歷過(guò)不止一次。換成MySQL表現(xiàn)可能又不一樣。鍋從來(lái)不在“機(jī)器性能”而在于每個(gè)數(shù)據(jù)庫(kù)引擎各自那套存儲(chǔ)模型、統(tǒng)計(jì)信息、鎖機(jī)制和優(yōu)化器邏輯。本文把主流引擎MySQL InnoDB、SQL Server、Oracle、PostgreSQL的SQL優(yōu)化方案放到同一個(gè)舞臺(tái)上拆開講核心目的只有一個(gè)讓你搞清楚同一類SQL在不同引擎里為什么會(huì)有截然不同的命運(yùn)以及當(dāng)慢SQL報(bào)出來(lái)時(shí)該怎么按引擎對(duì)癥下藥。內(nèi)容會(huì)涉及索引設(shè)計(jì)、執(zhí)行計(jì)劃、等待事件、深翻頁(yè)、去重、窗口函數(shù)、并行度這些高頻場(chǎng)景適合正在做跨數(shù)據(jù)庫(kù)開發(fā)的工程師、剛接手?jǐn)?shù)據(jù)庫(kù)優(yōu)化任務(wù)的DBA以及那些被“換個(gè)庫(kù)就翻車”折磨過(guò)的人。1. 為什么同一句SQL在不同引擎里表現(xiàn)天差地別——優(yōu)化思路的起點(diǎn)1.1 存儲(chǔ)模型決定數(shù)據(jù)“怎么被找到”很多人習(xí)慣把“優(yōu)化SQL”當(dāng)成一套萬(wàn)能公式加索引、避免SELECT *、減少子查詢。這些確實(shí)通用但它們只是戰(zhàn)術(shù)真正決定上限的是數(shù)據(jù)庫(kù)底層怎么存數(shù)據(jù)。MySQL InnoDB是典型的聚簇索引表。整張表就是一棵B樹葉子節(jié)點(diǎn)直接放行數(shù)據(jù)。主鍵就是聚簇索引二級(jí)索引的葉子節(jié)點(diǎn)存儲(chǔ)的是主鍵值。所以走主鍵查詢等于直接定位走二級(jí)索引要先查一遍索引拿到主鍵再回聚簇索引取完整數(shù)據(jù)這就是“回表”。設(shè)計(jì)主鍵時(shí)如果用了UUID之類的隨機(jī)值插入時(shí)會(huì)發(fā)生大量頁(yè)分裂和日志寫入放大這也是為什么InnoDB從業(yè)務(wù)角度都建議用自增主鍵。SQL Server不一樣。它可以建堆表也可以為表指定聚簇索引。堆表的數(shù)據(jù)頁(yè)之間沒(méi)有邏輯順序通過(guò)IAM頁(yè)追蹤聚簇索引表則按聚簇鍵物理排序。在頻繁插入且聚簇鍵變化大的場(chǎng)景堆表反而能減少頁(yè)分裂但大多數(shù)生產(chǎn)場(chǎng)景下合理的聚簇索引對(duì)范圍查詢幫助極大。這里沒(méi)有絕對(duì)的“誰(shuí)更好”只有“你的查詢模式更適合哪種”。Oracle和PostgreSQL都是堆表結(jié)構(gòu)。Oracle通過(guò)ROWID直接定位物理行索引葉子節(jié)點(diǎn)存ROWIDPostgreSQL的索引存的是行指針并且靠可見性映射Visibility Map來(lái)加速M(fèi)VCC判斷。堆表的回表代價(jià)并不一定比聚簇索引高因?yàn)閿?shù)據(jù)頁(yè)可能已經(jīng)在Buffer Pool里。但這也意味著“回表”這件事在每個(gè)引擎里的成本模型是完全不同的。你拿MySQL的經(jīng)驗(yàn)去判斷Oracle的回表開銷從一開始就錯(cuò)了。1.2 優(yōu)化器邏輯與統(tǒng)計(jì)信息的“個(gè)性化差異”SQL優(yōu)化不能只談存儲(chǔ)執(zhí)行計(jì)劃由優(yōu)化器生成而優(yōu)化器吃的是統(tǒng)計(jì)信息。MySQL 8.0的優(yōu)化器比老版本強(qiáng)了不少支持直方圖但整體對(duì)復(fù)合索引、OR條件的處理仍然偏保守。經(jīng)典翻車場(chǎng)景一張表兩個(gè)單列索引WHERE a 1 OR b 2MySQL經(jīng)常直接放棄索引合并做全表掃描而Oracle通常能走INDEX合并或BITMAP轉(zhuǎn)換。這跟引擎能力有關(guān)不是你的SQL寫錯(cuò)了。SQL Server的CBO非常成熟尤其是基數(shù)估計(jì)Cardinality Estimation2014年之后的默認(rèn)CE模型對(duì)“多列獨(dú)立謂詞”的預(yù)估更接近真實(shí)分布。但它也有自己的坑參數(shù)嗅探。第一次執(zhí)行的參數(shù)值決定了執(zhí)行計(jì)劃后面換個(gè)參數(shù)值可能讓計(jì)劃變得極差。Oracle的CBO是目前最復(fù)雜的優(yōu)化器之一支持自適應(yīng)計(jì)劃、統(tǒng)計(jì)信息自動(dòng)收集但綁定變量窺視、分區(qū)裁剪失效這些老問(wèn)題仍然存在。PostgreSQL則給用戶留了很大的自定義空間seq_page_cost、random_page_cost這些成本參數(shù)可以直接影響優(yōu)化器選擇。這些差異告訴我們一個(gè)核心道理跨引擎優(yōu)化第一步永遠(yuǎn)是重新評(píng)估執(zhí)行計(jì)劃而不是把上一個(gè)庫(kù)的“成功經(jīng)驗(yàn)”直接搬過(guò)來(lái)。1.3 “優(yōu)化”的本質(zhì)不是抄方案而是拆場(chǎng)景我接觸過(guò)的很多團(tuán)隊(duì)把SQL優(yōu)化做成了“經(jīng)驗(yàn)搬運(yùn)”MySQL慢就把Oracle那套調(diào)優(yōu)寶典拿來(lái)試試不通就怪?jǐn)?shù)據(jù)庫(kù)。實(shí)際上一個(gè)SQL慢下來(lái)你第一件要做的事不是改語(yǔ)句而是分清楚瓶頸類型IO密集型全表掃描、回表過(guò)多、排序落盤、日志寫入慢CPU密集型大量表達(dá)式計(jì)算、嵌套循環(huán)在超大集上運(yùn)行、并行度過(guò)高導(dǎo)致爭(zhēng)用鎖/等待密集型鎖塊、鎖升級(jí)、死鎖重試、日志同步等待這三個(gè)類型的優(yōu)化手段幾乎不重疊。IO瓶頸看索引和執(zhí)行計(jì)劃CPU瓶頸看表達(dá)式和算子等待瓶頸要看等待事件和并發(fā)配置。接下來(lái)幾節(jié)我會(huì)把索引、慢SQL定位、實(shí)戰(zhàn)場(chǎng)景和配置陷阱逐一展開。2. 索引設(shè)計(jì)的分水嶺從B樹到列存各引擎的索引脾氣2.1 主鍵與聚簇索引InnoDB的“必選”與SQL Server的“可選”索引設(shè)計(jì)是SQL優(yōu)化里最容易被低估的一環(huán)。很多人以為“建了索引就快了”但索引建錯(cuò)了效果可能比不建還差。MySQL InnoDB里聚簇索引是躲不掉的沒(méi)有主鍵時(shí)引擎會(huì)挑第一個(gè)非空唯一索引實(shí)在沒(méi)有就生成一個(gè)隱藏的rowid列。這意味著你在MySQL里設(shè)計(jì)主鍵本質(zhì)上是在設(shè)計(jì)整張表的物理存儲(chǔ)形態(tài)。隨機(jī)主鍵會(huì)導(dǎo)致頁(yè)分裂讓插入性能斷崖式下跌過(guò)長(zhǎng)的主鍵比如字符串型業(yè)務(wù)單號(hào)會(huì)讓每個(gè)二級(jí)索引都變得臃腫因?yàn)槎?jí)索引葉子節(jié)點(diǎn)要存主鍵值。SQL Server給了你選擇權(quán)。堆表和聚簇索引表各有適用場(chǎng)景如果數(shù)據(jù)是流水型追加寫入范圍查詢少、既沒(méi)有主鍵的排序需求堆表可能更合適但如果存在大量區(qū)間掃描或需要按特定順序輸出聚簇索引能把隨機(jī)IO變成順序IO。SQL Server還要關(guān)注填充因子Fill Factor和碎片率。索引碎片率超過(guò)30%時(shí)即便SQL走對(duì)了索引IO也可能高得離譜。運(yùn)維周期性重建索引這件事在MySQL里不常見但在SQL Server里是常規(guī)操作。Oracle和PostgreSQL的主鍵索引只是普通索引不承擔(dān)數(shù)據(jù)存儲(chǔ)職責(zé)。它們的表數(shù)據(jù)按插入順序放在堆里索引負(fù)責(zé)指向行的物理位置。這種架構(gòu)讓“插入”更輕量但也要注意堆表上頻繁更新會(huì)使行遷移舊位置留下轉(zhuǎn)發(fā)指針查詢會(huì)多一次IO。PostgreSQL的UPDATE會(huì)生成新版本行如果表膨脹嚴(yán)重索引掃描會(huì)掃描大量死元組導(dǎo)致查詢速度越來(lái)越慢——所以autovacuum的配置對(duì)PostgreSQL來(lái)說(shuō)不是“可選優(yōu)化”而是“保命設(shè)置”。2.2 覆蓋索引、索引下推與搜索條件寫法索引設(shè)計(jì)的高級(jí)玩法是讓索引“覆蓋”查詢避免回表。每個(gè)引擎都支持覆蓋索引但觸發(fā)條件不一樣。MySQL里如果SELECT的字段全部在二級(jí)索引中優(yōu)化器會(huì)用Index Only ScanExtra列顯示Using index回表完全省掉。SQL Server里叫“覆蓋索引Covering Index”常用INCLUDE語(yǔ)句把不需要參與排序、但需要輸出的列掛到索引葉子上。Oracle支持在索引里額外放一些列即“Include Column”讓索引能覆蓋更多查詢。PostgreSQL同樣支持INCLUDE。還有一種被忽略的能力是索引下推。MySQL的ICPIndex Condition Pushdown會(huì)在索引遍歷階段就過(guò)濾部分條件減少回表行數(shù)Extra列出現(xiàn)Using index condition就說(shuō)明下推生效。Oracle對(duì)復(fù)合索引的“謂詞推入”也有類似行為但要看執(zhí)行計(jì)劃的Predicate信息。寫SQL時(shí)把條件能寫成區(qū)間就寫成區(qū)間能避免函數(shù)包裹列就避免函數(shù)包裹列。這個(gè)原則四個(gè)引擎都適用但MySQL的感知最強(qiáng)烈因?yàn)樗膬?yōu)化器沒(méi)有Oracle那么“會(huì)兜底”。2.3 列存索引與分析型查詢另一個(gè)維度的“優(yōu)化”說(shuō)到索引不能不提SQL Server 2016之后主推的列存儲(chǔ)索引Columnstore。它把同一列的數(shù)據(jù)連續(xù)存放配合批模式執(zhí)行和頁(yè)壓縮分析類聚合查詢的IO量可以比行存少一個(gè)數(shù)量級(jí)。同樣的思路也是ClickHouse、Spark SQL這類分析引擎提速的核心。從OLTP角度做優(yōu)化時(shí)我們的思維是“減少行的訪問(wèn)”而分析型場(chǎng)景的思維是“減少列的訪問(wèn)”。如果你手上有一批報(bào)表SQL在SQL Server里給大表加一個(gè)列存索引通常比瘋狂優(yōu)化SQL寫法有效得多。Oracle也有列存選項(xiàng)Exadata上的Cell多級(jí)緩存、In-Memory列式格式MySQL則主要靠第三方引擎補(bǔ)位。這個(gè)例子最能說(shuō)明“不同數(shù)據(jù)庫(kù)引擎優(yōu)化方案”的差異方案不是靠某一條金句總結(jié)出來(lái)的而是靠理解引擎各自的強(qiáng)項(xiàng)。3. 慢SQL定位三板斧執(zhí)行計(jì)劃、統(tǒng)計(jì)信息與等待事件3.1 執(zhí)行計(jì)劃怎么看先看實(shí)際行數(shù)與估算行數(shù)的偏差慢SQL排查很多人第一反應(yīng)是看SQL文本試圖“用眼睛優(yōu)化”。但真正專業(yè)的第一動(dòng)作永遠(yuǎn)是拽出執(zhí)行計(jì)劃。四個(gè)引擎看計(jì)劃的方式完全不同你至少要會(huì)用自己手上的那個(gè)MySQLEXPLAIN或者EXPLAIN ANALYZE查看實(shí)際執(zhí)行時(shí)間與行數(shù)。重點(diǎn)看typeALL代表全表掃描range代表索引范圍掃描ref代表普通等值匹配、rows預(yù)估值、Extra里的Using filesort、Using temporary。SQL ServerSET STATISTICS IO ON和SET STATISTICS TIME ON可以輸出邏輯讀和耗時(shí)更直觀的是在SSMS里開啟“包含實(shí)際執(zhí)行計(jì)劃”。重點(diǎn)看每個(gè)操作符的Estimated vs Actual Row數(shù)、IO統(tǒng)計(jì)。OracleEXPLAIN PLAN FOR SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR)如果要看實(shí)際行數(shù)需要設(shè)置STATISTICS_LEVELALL然后再執(zhí)行這樣才能看到A-Rows和E-Rows的對(duì)比。PostgreSQLEXPLAIN (ANALYZE, BUFFERS)最實(shí)用能同時(shí)看到實(shí)際行數(shù)、啟動(dòng)成本和Buffer讀寫信息。我看執(zhí)行計(jì)劃有一個(gè)固定習(xí)慣先對(duì)比操作符的“估算行數(shù)”和“實(shí)際行數(shù)”。如果兩者偏差巨大比如估算1萬(wàn)行、實(shí)際跑了100萬(wàn)行那十有八九是統(tǒng)計(jì)信息過(guò)期。這時(shí)候再怎么改SQL都是治標(biāo)不治本。3.2 統(tǒng)計(jì)信息過(guò)期如何坑掉一條好SQL統(tǒng)計(jì)信息的采集機(jī)制在四個(gè)引擎里各有套路但“過(guò)期”帶來(lái)的問(wèn)題都一樣災(zāi)難性。舉個(gè)我排查過(guò)的真實(shí)案例一張?jiān)吕塾?jì)訂單表平時(shí)1000萬(wàn)行月底批量清洗后只剩10萬(wàn)行。優(yōu)化器不知道表已經(jīng)“瘦身”仍然按1000萬(wàn)行估算給一個(gè)十幾行的結(jié)果集選了哈希連接加全表掃描接口響應(yīng)從20毫秒暴漲到5秒。引擎的自動(dòng)更新機(jī)制并不總是及時(shí)。MySQL的自動(dòng)統(tǒng)計(jì)更新基于變化行數(shù)超過(guò)表大小的閾值指數(shù)級(jí)變化時(shí)通常能觸發(fā)但如果你是用大批量DELETE清數(shù)據(jù)后馬上查還是建議手動(dòng)執(zhí)行ANALYZE TABLE。SQL Server的自動(dòng)更新閾值在舊版本里也是基于百分比頻繁小量更新時(shí)統(tǒng)計(jì)信息可能長(zhǎng)期滯后定期維護(hù)計(jì)劃里加上UPDATE STATISTICS是DBA的基本功。Oracle的自動(dòng)統(tǒng)計(jì)任務(wù)一般在夜間窗口白天大批量導(dǎo)入數(shù)據(jù)后也需要手動(dòng)DBMS_STATS.GATHER_TABLE_STATS。PostgreSQL的autovacuum在默認(rèn)配置下對(duì)大多數(shù)場(chǎng)景夠用但高頻UPDATE的短表仍然容易統(tǒng)計(jì)失真。排查慢SQL時(shí)我建議把“刷新統(tǒng)計(jì)信息”放在前面做掉——成本低、見效快還不會(huì)像改SQL那樣引入新風(fēng)險(xiǎn)。做完再重新抓執(zhí)行計(jì)劃往往問(wèn)題就消失了。3.3 等待事件SQL Server的writelog與Oracle的log file sync有些慢SQL執(zhí)行計(jì)劃完美索引全都用上了但就是快不起來(lái)。這時(shí)候要看的不是執(zhí)行計(jì)劃而是時(shí)間花在哪里了。SQL Server里有一個(gè)很常見的等待類型WRITELOG。它表示會(huì)話在提交事務(wù)時(shí)需要等待日志記錄被寫入磁盤。凡是高頻小事務(wù)場(chǎng)景——比如循環(huán)逐行INSERT、頻繁UPDATE單行——都能看到大量WRITELOG等待。根因通常是磁盤的fsync延遲太高HDD、共享云盤、日志文件與數(shù)據(jù)文件混用或者日志文件初始化太小導(dǎo)致頻繁自動(dòng)增長(zhǎng)。優(yōu)化辦法把事務(wù)日志文件放到低延遲獨(dú)立磁盤、合并小事務(wù)為批量提交、合理預(yù)分配日志文件大小。別小看這個(gè)等待它經(jīng)常是“CPU不忙、磁盤不忙、但接口就是慢”的元兇。Oracle里對(duì)應(yīng)的等待是log file sync和log file parallel write背后邏輯高度相似提交事務(wù)時(shí)LGWR進(jìn)程要確保日志緩沖寫入聯(lián)機(jī)日志文件。排查方法比SQL Server稍微復(fù)雜可以從AWR報(bào)告的Top 5 Timed Events入手確認(rèn)Wait Event是不是log file sync再檢查redo log所在磁盤IO能力。MySQL的對(duì)應(yīng)參數(shù)是innodb_flush_log_at_trx_commit1時(shí)的每次提交刷盤如果業(yè)務(wù)允許改成2會(huì)有數(shù)量級(jí)的性能提升但代價(jià)是丟最多1秒的事務(wù)日志。這個(gè)取舍沒(méi)有標(biāo)準(zhǔn)答案要看業(yè)務(wù)對(duì)數(shù)據(jù)安全的要求。等待事件分析的價(jià)值在于它幫你把“SQL慢”拆成了“SQL自己慢”和“環(huán)境讓它慢”。前者靠索引和執(zhí)行計(jì)劃解決后者靠配置和磁盤布局解決。很多DBA只盯著SQL文本忽略等待類型這是排查慢SQL最容易走的彎路。4. 實(shí)戰(zhàn)拆解去重、分頁(yè)、窗口函數(shù)在四大引擎中的優(yōu)化做法4.1 去重DISTINCT、GROUP BY與ROW_NUMBER的代價(jià)差異“去重”是搜索引擎里最常見的SQL需求但不同引擎對(duì)去重的執(zhí)行方式完全不同。很多人以為DISTINCT就是簡(jiǎn)單的“選不同”實(shí)際它的代價(jià)往往被嚴(yán)重低估。DISTINCT在四個(gè)引擎里核心執(zhí)行方式無(wú)非兩種哈希去重或排序去重。沒(méi)有索引時(shí)MySQL可能使用臨時(shí)表SQL Server可能走Sort算子并觸發(fā)tempdb溢出Oracle默認(rèn)傾向HASH UNIQUEPostgreSQL在work_mem不足時(shí)會(huì)把HashAgg退化成SortGroupAggregate。實(shí)操中我遇到過(guò)最坑的寫法是先JOIN再DISTINCT。用訂單表和訂單明細(xì)表關(guān)聯(lián)最終結(jié)果希望得到“有哪些客戶下單”第一版SQL往往寫成SELECT DISTINCT c.customer_id ... FROM customers c JOIN orders o ON ...。這種寫法會(huì)把明細(xì)表放大后才去重中間結(jié)果驚人。正確的做法是改成EXISTS子查詢SELECT customer_id FROM customers c WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id c.customer_id)。執(zhí)行計(jì)劃直接從HASH JOIN變成SEMI JOIN行數(shù)少了一個(gè)量級(jí)。不同去重手段的選擇也要看業(yè)務(wù)語(yǔ)義需求推薦方式原因簡(jiǎn)單取唯一值SELECT DISTINCT col引擎有專門算子寫法直觀按某字段分組取其他字段GROUP BY 聚合函數(shù)不依賴窗口函數(shù)執(zhí)行計(jì)劃更清晰每組內(nèi)取最新一條/前N條ROW_NUMBER() OVER(PARTITION BY ... ORDER BY ...)窗口函數(shù)語(yǔ)義最強(qiáng)SQL Server 2012/MySQL 8.0/Oracle/PostgreSQL均支持注意一個(gè)細(xì)節(jié)DISTINCT對(duì)NULL的處理是“去重后只保留一個(gè)NULL”GROUP BY會(huì)把NULL當(dāng)成一個(gè)分組常規(guī)業(yè)務(wù)上兩者等價(jià)但如果你寫的是多列去重務(wù)必確認(rèn)NULL列的處理是否符合預(yù)期這一塊容易出隱蔽的語(yǔ)義Bug。4.2 深翻頁(yè)OFFSET不慢慢的是丟棄分頁(yè)是所有業(yè)務(wù)系統(tǒng)躲不開的SQL場(chǎng)景。淺分頁(yè)沒(méi)壓力深翻頁(yè)才是真正的性能殺手。四個(gè)引擎都支持LIMIT/OFFSET或等價(jià)語(yǔ)法但原理一樣先掃描出從第1行到第(offsetlimit)行的全部數(shù)據(jù)丟棄前面的offset行返回最后limit行。頁(yè)數(shù)越深掃描和丟棄的行越多。MySQL的經(jīng)典寫法是LIMIT 1000000, 20它會(huì)掃到第100萬(wàn)行再丟掉SQL Server用OFFSET 1000000 ROWS FETCH NEXT 20 ROWS ONLY底層也是排序后跳過(guò)Oracle老版本用ROWNUM嵌套子查詢12c以后有FETCH FIRST但深分頁(yè)的本質(zhì)沒(méi)有變化。PostgreSQL的LIMIT/OFFSET同樣避免不了這個(gè)問(wèn)題。解決深翻頁(yè)最有效的方案是Keyset Pagination也叫游標(biāo)分頁(yè)。不用OFFSET而是帶一個(gè)排序鍵的WHERE條件-- 傳統(tǒng)深翻頁(yè)慢 SELECT * FROM orders ORDER BY id OFFSET 1000000 ROWS FETCH NEXT 20 ROWS ONLY; -- Keyset Pagination快 SELECT * FROM orders WHERE id 1000000 ORDER BY id FETCH FIRST 20 ROWS ONLY;Keyset方式的執(zhí)行計(jì)劃是典型的索引范圍掃描理論上可以做到翻到第N頁(yè)都只有20行的開銷。前提是排序鍵絕對(duì)唯一且穩(wěn)定。如果業(yè)務(wù)排序需要多字段比如ORDER BY created_at DESC, id DESCWHERE條件也要按同樣順序帶上游標(biāo)值。字符串排序、日期排序同樣適用。實(shí)測(cè)數(shù)據(jù)最直觀一張200萬(wàn)行訂單表傳統(tǒng)OFFSET翻到第1000頁(yè)每頁(yè)20行耗時(shí)約為280毫秒改為Keyset后穩(wěn)定在0.5毫秒左右。所以如果你正在負(fù)責(zé)一個(gè)有深翻頁(yè)需求的接口建議趁早改造不要等用戶報(bào)告“越翻越慢”。4.3 窗口函數(shù)與并行分析需求在不同引擎里的落地姿勢(shì)窗口函數(shù)是SQL優(yōu)化工具箱里的高頻武器。SQL Server從2012版本開始支持ROW_NUMBER、RANK、DENSE_RANK、SUM() OVER()等再早只能靠自連接實(shí)現(xiàn)MySQL從8.0才開始支持之前只能用變量模擬Oracle和PostgreSQL自帶完整的窗口函數(shù)支持它們的執(zhí)行器對(duì)這一類算子優(yōu)化也更成熟。舉一個(gè)十分常見的例子“查每個(gè)客戶最近一筆訂單”。用窗口函數(shù)可以寫成SELECT customer_id, order_id, order_date FROM ( SELECT customer_id, order_id, order_date, ROW_NUMBER() OVER(PARTITION BY customer_id ORDER BY order_date DESC) AS rn FROM orders ) t WHERE rn 1;這段SQL在四個(gè)引擎里都能跑但注意如果orders表非常大窗口函數(shù)的PARTITION BYORDER BY需要一次全局排序。優(yōu)化點(diǎn)是建立復(fù)合索引(customer_id, order_date DESC)讓窗口排序直接走索引有序掃描避免顯式排序。MySQL 8.0對(duì)索引有序性的依賴最強(qiáng)索引建立不對(duì)時(shí)執(zhí)行計(jì)劃會(huì)出現(xiàn)Using filesort數(shù)據(jù)量大時(shí)性能差距能達(dá)幾十倍。SQL Server則可能更依賴內(nèi)存里的Sort算子配合列存索引時(shí)有時(shí)能獲得更激進(jìn)的批處理加速。再說(shuō)并行SQL優(yōu)化。Oracle的并行DML、并行查詢能力很強(qiáng)可以在SQL上加PARALLEL Hint讓一個(gè)復(fù)雜聚合查詢同時(shí)跑多個(gè)并行服務(wù)進(jìn)程SQL Server用MAXDOP設(shè)置并行度PostgreSQL從9.6開始引入了并行順序掃描和并行聚合但并行度受限于planning參數(shù)。MySQL至今沒(méi)有原生的“一條SQL自動(dòng)并行”能力一個(gè)高成本查詢只能單線程執(zhí)行。這個(gè)差異意味著同樣的分析SQL在Oracle和PG上可以通過(guò)調(diào)整并行度實(shí)現(xiàn)質(zhì)的飛躍在MySQL上則必須靠?jī)?yōu)化語(yǔ)句本身、建物化視圖或引入分析引擎來(lái)解決問(wèn)題??缫鎯?yōu)化時(shí)必須先認(rèn)清有些特性是這個(gè)引擎天生沒(méi)有的與其死磕不如改變架構(gòu)方案。5. 常見陷阱與規(guī)避從SQL寫法到引擎配置的教訓(xùn)5.1 參數(shù)化與SQL注入安全底線也是性能底線搜索引擎熱詞榜里永遠(yuǎn)有SQL注入這不是偶然。很多運(yùn)維和開發(fā)把“SQL注入防護(hù)”當(dāng)成純安全議題實(shí)際上它與SQL優(yōu)化是同一件事。參數(shù)化查詢Prepared Statement除了能防注入還能提升執(zhí)行計(jì)劃復(fù)用率。以SQL Server為例如果業(yè)務(wù)代碼每次都拼接一個(gè)新的SQL文本提交每次都需要硬解析生成新的執(zhí)行計(jì)劃CPU壓力升高、計(jì)劃緩存命中率下降改成參數(shù)化寫法后同一個(gè)計(jì)劃模板可以被反復(fù)復(fù)用。Oracle的綁定變量、MySQL的PREPARE、PostgreSQL的PREPARE也都是一樣的邏輯。反過(guò)來(lái)說(shuō)SQL注入的根因就是非參數(shù)化的字符串拼接?;ヂ?lián)網(wǎng)上流傳的所謂“繞過(guò)手法”本質(zhì)上都是利用拼接邏輯的缺陷做字符串逃逸。修復(fù)方式?jīng)]有捷徑全部改成參數(shù)化查詢數(shù)據(jù)庫(kù)賬號(hào)按庫(kù)表權(quán)限最小化應(yīng)用層再做一層白名單校驗(yàn)。參數(shù)化一上注入漏洞攻擊面立刻歸零計(jì)劃緩存利用率同步提升——一次改造安全性和性能雙收益。5.2 隱式轉(zhuǎn)換與函數(shù)包裹讓索引瞬間失效的寫法這是跨引擎優(yōu)化里最統(tǒng)一的一條經(jīng)驗(yàn)在索引列上做函數(shù)運(yùn)算或隱式類型轉(zhuǎn)換絕大多數(shù)情況下會(huì)讓索引失效。MySQL里最常見的翻車現(xiàn)場(chǎng)是字段類型是VARCHARSQL寫成了WHERE phone 13800138000MySQL會(huì)先把字段轉(zhuǎn)成數(shù)值再比較索引直接報(bào)廢。解決辦法就是讓參數(shù)類型與字段類型保持一致寫成13800138000字符串。SQL Server也有類似行為字符列與數(shù)值常量比較時(shí)常會(huì)觸發(fā)隱式轉(zhuǎn)換執(zhí)行計(jì)劃里會(huì)出現(xiàn)CONVERT_IMPLICIT掃描行數(shù)瞬間暴增。日期函數(shù)包裹列是另一個(gè)通病。WHERE DATE(create_time) 2024-01-01這種寫法會(huì)把create_time列塞進(jìn)函數(shù)里即便該列有索引也掃不了。改成WHERE create_time 2024-01-01 00:00:00 AND create_time 2024-01-02 00:00:00既能走索引邏輯上也等價(jià)。引擎差異在這里也有體現(xiàn)。Oracle里你還能用函數(shù)索引如TO_CHAR(create_time, YYYY-MM-DD)建索引兜底MySQL 8.0也支持函數(shù)索引SQL Server可以通過(guò)計(jì)算列加索引實(shí)現(xiàn)類似效果。但我的習(xí)慣仍然是優(yōu)先改SQL寫法而不是為不合理的寫法建特殊索引。因?yàn)楹瘮?shù)索引對(duì)寫入有額外維護(hù)成本而且應(yīng)用一旦換寫法索引就浪費(fèi)了。5.3 系統(tǒng)性“偽慢SQL”監(jiān)聽、連接池與臨時(shí)文件最后一類慢SQL其實(shí)SQL本身是無(wú)辜的。比如Oracle報(bào)錯(cuò)ORA-12518“監(jiān)聽程序無(wú)法分發(fā)”這個(gè)錯(cuò)誤的本質(zhì)往往不是SQL性能問(wèn)題而是監(jiān)聽進(jìn)程無(wú)法fork新的服務(wù)器進(jìn)程——常見原因是processes參數(shù)打滿、操作系統(tǒng)進(jìn)程數(shù)限制、SGA/PGA內(nèi)存不足。排查方向是調(diào)大processes、sessions參數(shù)限制應(yīng)用的空閑連接數(shù)檢查系統(tǒng)內(nèi)存。如果你只盯著SQL調(diào)優(yōu)永遠(yuǎn)看不到問(wèn)題。連接池配置同理。很多接口慢不是SQL慢而是連接池里線程都在排隊(duì)等連接。HikariCP、Druid這類連接池的maximumPoolSize設(shè)置過(guò)小高并發(fā)時(shí)請(qǐng)求全部阻塞在獲取連接階段設(shè)置過(guò)大數(shù)據(jù)庫(kù)端又會(huì)資源爭(zhēng)用。我在實(shí)際優(yōu)化項(xiàng)目里見過(guò)接口P99從800毫秒降到80毫秒的案例改動(dòng)僅僅是調(diào)整連接池大小和空閑超時(shí)SQL一行沒(méi)改。臨時(shí)文件和日志文件也經(jīng)常被忽視。SQL Server的tempdb如果默認(rèn)配置且與其他庫(kù)共用硬盤排序和哈希連接一旦落盤就會(huì)拖慢所有查詢MySQL的tmp_table_size過(guò)小時(shí)GROUP BY會(huì)轉(zhuǎn)到磁盤臨時(shí)表PostgreSQL的work_mem直接決定Sort/Hash操作是走內(nèi)存還是走磁盤默認(rèn)4MB對(duì)一個(gè)稍大排序來(lái)說(shuō)小得離譜。所以當(dāng)你面對(duì)一條“查了半小時(shí)還不出來(lái)”的SQL排查順序我建議是統(tǒng)計(jì)信息→等待事件→執(zhí)行計(jì)劃→SQL改寫→索引調(diào)整→系統(tǒng)配置。前面幾步可以快速排除環(huán)境因素后面幾步才是真正的SQL優(yōu)化。順序反了很容易在一個(gè)錯(cuò)誤的方向上耗費(fèi)半天。做數(shù)據(jù)庫(kù)優(yōu)化這些年我最深的體會(huì)是優(yōu)化不是背答案而是理解每個(gè)引擎是怎么存、怎么找、怎么鎖的。同一套經(jīng)驗(yàn)換一個(gè)數(shù)據(jù)庫(kù)往往就失真所以每次跨庫(kù)排查我都默認(rèn)自己是個(gè)新手從頭看執(zhí)行計(jì)劃和等待事件。很多團(tuán)隊(duì)迷信所謂的“大廠調(diào)優(yōu)參數(shù)”拿一套配置到處套結(jié)果連基礎(chǔ)的數(shù)據(jù)文件布局都沒(méi)看。老老實(shí)實(shí)按“統(tǒng)計(jì)信息是否新鮮、等待事件是否異常、執(zhí)行計(jì)劃是否合理、索引是否被有效使用”這個(gè)順序走一遍多數(shù)慢SQL問(wèn)題都能在半小時(shí)內(nèi)定位。最后再分享一個(gè)實(shí)戰(zhàn)習(xí)慣每次只改一個(gè)變量。改完SQL跑一次驗(yàn)證建完索引再看一遍執(zhí)行計(jì)劃。多個(gè)優(yōu)化點(diǎn)一起上出了問(wèn)題你根本不知道是誰(shuí)的鍋。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
夜夜影视四色| 99青草| 色哟哟精品1精品2| 欧美婷婷| 熟妇的味道HD中文字幕| 亚洲加勒比色图| 超碰在线91| 蜜桃狠狠色伊人亚洲综合网站| 老熟女熟妇| 黄片无码在线制服| 免费精品中文字幕| 在线观看中文字幕| 国产婷婷一区| 久久久九97| 亚洲国产婷婷在线播放| 精品人妻av区天天看片| 亚洲精品白丝| 亚洲美女30b| www.99热| 五十路人妻在线| 婷婷色网| 色九区| 一级乱伦网站| 青青久久艹| 色九九九| 私色综合网| 日本一级性爱| 中文字幕乱在线伦视频中文字幕乱码在线 | 欧美男人一区| 日本色色色视频| 91春色| 99精品无码| 欧美日韩精品国产91| 超碰国产在线| 国产一级αv免费看片| 成人a v在线播放免费| 少妇无码999| 亚洲综合九| 欧美色三级片91| 性爱Av免费| 欧美色图第一页| 国产搭汕a级片| 亚洲天堂一二| 亚洲高清色综合| 人妻少妇精品久久久| 嗯嗯,啊啊,国产精品| 亚洲天天精品| 啊啊啊操死我了| 97国产伦理| 欲射影视| 茄子社区国产精品| 久草成人影片| 97久久超碰日韩精品| 国产精品69久久久久孕妇欧美 | 色五91| 猛交交| 偷窥自拍A片| 天天色综亚洲91污| 看一级黄色视频| 丁香五月久久| 91人妻超碰| 丝袜喷水在线| 91n免费处女| 亚洲亚洲亚洲天堂天堂| 夜夜嗨一区| 亚洲天在线| 超碰99re| 大香网站| 一二三区在线| 自拍丝袜美腿人妻| 激情文学亚洲| 高潮精品| 日本一区二区成人在线| 国产九月婷婷| 欧美国产一区二区三区麻豆传媒| 欧美在线观看综合国产| 男人夜色天堂ss| 五月丁香六月| 中文字幕视频免费| 肉动漫无遮挡h在线观看| 中文字幕视频二区| 欧美高清18A片| 中文字幕丝袜国产第一页不卡| 国产精品无码av| 91搞逼视频| 美国日韩黄色片| 超碰av人人人| 亚洲黄色电影| 久久久久国产无av| 中国黑人三级片网站上区| 九九九久千久久激情蜜桃在线看 | 亚洲欧美国产日本一区二区三区| 黑操B| 91骚妇| 亚洲有薄码区久久在线一区| 麻豆国产精品午夜视频| 国语人妻精彩刺激| 上床啊啊啊| 日本无码1| 97色插| 熟女高潮合集-永久久久-成人AV| 九九九精品| 囯产乱伦一区二区三女| 美女大乳久久久久久久女人18| 亚洲人综合| 精品天堂| 精品国产精品一区二区| 夜夜操一区二区| 日本一道在线播放高清| 五月丁香| 日日骚一区二区三区| 草莓精品视频在线免费观看| 5252色欧美在线| 欧美亚洲丝袜人妻制服中文99| 欧美日韩国产成人高清| 亚洲熟妇自偷自拍另欧美| 亚州男人的天堂| 亚洲中文字幕在现观看| 人人妻人射| 亚洲男人的天堂一区二区| 九九热国产| 噜噜噜在线视频| 国产熟女少妇一区| 色香天天| 中文字幕高清20页视频| 中国91AV| 人妻丝袜无 码视频专区| 人人妻人人色一区二区三区| 香蕉热人人精品| 国产精品成人午夜福利| 韩国黄色片精品久久久| 中文日韩欧美熟| 中文三一区| 午夜高清成人在线视频| 日日摸日日弄日日拍| 眼镜人妻101.com| 爱欲AV| 亚洲影视综合| 伊人久久国产免费观看视频| 亚洲国产精品V?在线播放| 深爱激情五月天| 五十路三区在线| 玖玖玖玖精品国产剧情| 久久精品无码一区二区三区| 色噜噜狠狠色综合日日| 男人天堂网站| 丝袜天堂| 国产精品免费美女视频| 四虎精品一区二区| 日韩丝袜高跟制服在线观看| 国产精品无码在线| 校园春色亚洲| 99re69综合| 久久久久久久久久久免费精品| 国产肏屁眼视频| 中文字幕精品一区二区精| 物业黑人 AV一区| a级成人毛片免费视频高清| 亚洲男人天堂视频| 一区二区激情国产熟女 | 人人做,人人操,人人摸| 亚洲男人天堂网久久| 蜜乳成人AV| 99热18这里只有精品| 人人天天干干| 色欲天天综合久久久无码网中文| 天天色怡春院| 丁香激情网| 岛国福利在线精品播放| 精品中文一区二区| 97一区二区蜜臀| 国产专区第一页| 99精品在线| 久久婷婷国产一区二区色| 欧美片第一页| 91在线国产后入风骚翘臀美女素人| 日韩啪啪网| 亚洲精品xxx| 国产一二三福利视频网| 亚州久久9| 九九色综合| 18啪啪手机免费性爱| 久久r精品| 婷婷情色综合网| 91高清无码下载| 婷婷五月天激情四射| 亚州色国| 97国产精品国| 97资源制服丝袜| 中文操嬖片。| 香伊人在线| 九九九国产| 91色堂| 天天摸夜夜摸| 97精品综合| 亚洲制服aⅴ中文字幕| 蜜桃久久一区二区| 中文字幕av片| 色眯眯av| 国产精品久久久久久久免牛肉蒲团| 丁香九月激情| 人妻精品一区二区在线| 97人妻免费中文字幕| 国产精品探花色| 亚洲欧美情色| 亚洲人妻久久| 亚洲欧洲中文日韩女优乱码| 精…码一二三区| 欧美97日韩精品| 日韩影片中文字幕一区二区三区| 99久久com免费视频′| 国产做?爰片久久毛片?片美国| 国产精品天堂| 东京热一区二区中文字幕| 老熟女天天操| 蜜臀一区二区三区在线| 97免费视频在线观看| 新怡红院| 精品少妇一区二区| 色色97爱| 亚洲欧美另类图片| 国产精品久久久久久久久久久久| 精品69网| 日韩欧美性吧婷婷乱伦大香蕉| 中文字幕在线免费观看| 视频不卡中文字幕| 91啦人妻| 国产精品熟女九色九色蜜臀| av在线播放国产一区| 久久精品国产亚洲妲己影视| 波多野42部无码喷潮在线观看| 欧美 精品国产制服第一页 | 夜夜人妻爽| 操死我了嗯嗯嗯| 亚州 综合 色图| 九九九九精品一区| 97伊人超碰| 欧美精品一二三| 成人免费性爱视视| 丰满岳乱妇一区二区三区| 老熟女乱子伦中文字幕一区二区| 人、人、摸,人、人、草| 日本在线不卡一二区| 国产精品婬乱一级毛片彝族| 26uuu欧美日韩| 日韩乱中文| 操屄不卡视频| 亚洲激情 欧美色图| 欧美一品道| 久久久青青草| 99久久久无码精品国产人| 免费无码国产精品v片在线观看| www.99中文字幕| 国产JDAV无码视频在线观看| 超碰成人最新最好看| 五月激情视频| 麻豆AV短剧| 亚洲男人天堂2| www国产无码| 亚洲成人一区二区精品| 一区二区三区四区五区高清无码永久视频 | 九九久久一区二区伦理| 久久黄黄| 久久久性少妇| 富女玩鸭子一级毛片| 日韩激情啪啪啪| 一二三四免费视频| 亚洲。天堂。日本在线观看| 嗯嗯啊啊操我| 日本理论在线| 久久久∴| 操逼网站网站| 99热这里只有精品99| 国产视频一区二区免费| 一区中文字幕二区日韩| 秋霞福利网| 亚洲av青草久久一区二区| 亚洲国产成人7777| 欧美精品成人亚洲| 欧美成人色| 亚洲无992tv| 欧美黑人精品在线播放| 美女啊啊啊啊pc| 亚洲乱熟女一区二区| 日本国产亚洲一区在线观看| 一区二区三区在线资源| 97资源站国产精品| 国产69精品久久久久99尤物| 欧美日韩国产电影| 亚洲欧美一区二区网址| 亚洲国产欧美中日韩成人综合视频| 天天摸天天碰天天添青青| 美女网站91| 免费看黄视频亚洲网站| 91精品丝袜久久久久久无码人妻| 插入逼91| 无码一区二区三区四区五区六区七区八区九区十区视频 | 欧美成人精品欧美一级乱黄一区二…| 日韩簧片免费看| 人妻夜夜爽天天爽麻豆三区网站| 99在线精品视频| 久久久久久AⅤ无码免费肉站| 四虎影库国产精品免费| 91亚洲综合| 熟妇在线视频一区二区| 久艹日日日| 五月激情综合网| 日韩大香蕉精品在线视频| 国产性久久久| 色香综合天天影视综合 | 思思性爱| 国产后入式在线观看| 在线无码操| 亚洲中文字幕妇伦久久| 日韩乱伦AⅤ| 精品人妻一区二区三区夜夜| 顶级丝袜熟女一区二区三区| 免费99精品国产自在在线| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 家庭乱伦网站国产| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 色哟哟-国产专区| 91精品国产91久久福利| 99国产精品久久久在线播放| 性色av网站| 中文字幕熟女人妻丝袜丝| 久久久久国产无av| 欧洲亚洲人妻无码高清久久三区四区| 九九成人| 熟妇xxxxx性春色| 久久久穴999| 天天干人人干天天日97| 青青久日| 91网亚洲| 99综合网| 1级黄色夫妻对换性交免费看| 91女优在线观看| 超碰在线人妻| 看免费一级在线播放毛片| 熟妇高潮一区二区免费视频| 91东北熟女| 中文字幕女同在线| 福利操逼| 91熟女网| 亚洲成人妻日韩在线| 性爱av在线免费观看| 天天干夜夜鈤| 干妹子| 江都AV在线| 亚洲啪AⅤ永久无码| 天天躁夜夜躁狠狠躁AV| 又黑又大又粗 | 婷婷五月天成人| 午夜亚洲WWW湿好大| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 国产高清亚洲日韩一区| 天天综合网~91| 欧美亚洲丝袜美女电影| 91chinese在线| 91欧| 偷拍综合亚洲| 亚洲图片欧美制度| h在线看免费版在线看| 免费的很黄很污的全部视频| 欧美色图91| 亚州Av天美传媒| 亚洲中文字幕噜噜噜久久久| 日韩精品碰碰| 2024黄色视频| 97欧美综合| 日韩干B| 素颜老阿姨乱情色| 60秒试看最爽10分钟网站| 制服乱伦| 中国国国产一级特黄毛片| 亚洲丝袜少妇在线| 亚洲精品国产拍免费91在线| 色五月激情AV在线| 久久久男人的天堂| 青青色综合| 天天色悠悠激情| 五月天激情四射| 久综合国内精品自在自线| 国产400孕妇孕交群| 色噜噜日韩精品| 射丝袜大香蕉| 亚洲不卡一| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 一区二区视频在看| 91美女在线看| 狠狠夜色午夜久久综合在线| 91殴美大片| 97人肏| 97久精品| www四虎| 激情图片伦理国产一区二区日韩| 亚洲国产精品久久久久婷婷青年| 97精品综合| 啪啪资源网| 亚洲精品人妻在线| 偷窥自拍A片| 90后性网国产欧美| 五月激情小说| www…国产操逼| 五月婷婷无码| 久久精品亚洲婷婷| 青青草在线视频欧美| 9超碰免费| 日韩欧美被操黄免费观看| 成人五月香网在线| 美骚妇av高清在线| 国产成人精品一区| 试看60秒 爽| 色吧91| 日本羞羞的视频在线播放| 爱爱动态60秒| 伦理第一页| 国产91精品在线免费| 99亚洲精品| 乱伦1色页| 色99在线| 天天看人人操屄犊摸阴| 屌妞视频久久久久久久 | 国产精品一区av在线| 97香蕉网| 欧美成va视频网站| 97视频网站在线观看| 麻豆av一区二区三区| 精品久久久久久久久久久久| 在线啊啊啊| 欧美高清91| 日本韩国国产精品一区| 日本色婷婷| 97 超碰 人人做 人人爱| 中文字幕人乱码中文字的预防方法 | 中文字幕人妻资源在线| 无码丰满熟妇一区二区浪潮AV| 亚洲无码太久| 91干熟女| 嫩草影院永久在线制服丝袜| 伊人九九九| 国产隔壁老王影院在线| 久久这里只精品99re66图| 免费a级毛片av无码久久精品中文字幕| 日逼逼免费看| 九色 人妻 大香蕉| 羞答答AV中文字| 在线日韩精品一区二区三区| 日韩精品一区的| 殴美综合色88| 啊啊啊啊啊好多水| 中文字幕在线日亚洲9| 久久偷拍人| 91丨人妻丨国产丨丝袜| 8x福利精品第一福利视频导航| 国产精品久久久久av| 大香蕉欧美国产日韩高潮| 男女啊啊啊啊啊| yazhousetuoumei| 国产在线激情| 新版天堂中文资源8在线| 欧美天堂日韩三级国产传媒| 蜜乳av一区二区三区四区不卡| 亚洲欧美变态| 亚洲黄色网址视频| 校园春色宗合网| 人人做,人人操,人人摸| 麻豆 欧美 日韩| 中文字幕一区二区三区四五区| 亚洲AV性爱电影| www.夜夜操| 亚洲极品| 热99这里只有精品| 97少妇人妻中文字幕久久| 岛国免费黄色网址| 插老姨肥穴| 中文乱码字字幕在线第5页| 久久激情亚洲精品无码?V| 高树玛利亚无码流出| 精品午夜福利| 婷婷色影院| 亚州日韩97| 色激情综合网站| 国产超碰人人爽人人做| 国产日韩中文字幕欧美| 黑人精品成人一区二区三区| 日韩无码服务区| 久久东京伊人一本到鬼色| 日韩精品人妻中文字幕久久久| 亚洲日韩精品久久久久一区壹牛| 日韩超碰精品综合| 搡老熟女免费视频| 色综合加勒比四四季| 成人无遮挡毛片免费看| 伊人991| 色呦呦呦在线观看视频| 日本五区不卡| 日韩精品区二区三区不卡| 97超碰9| 四虎精品一区| 久热这里| 大香蕉中文在线| 清清一区二区三区四区不卡视频| 一本色道无码DVD中文字幕| 中文字幕乱碼在线| 黄色小视频日本txt| 蜜桃午夜视频一区二区 | 超碰97伊人| 青娱乐导航AV| 中日亚韩免费视频| 欧美性爱超碰97| 新版天堂中文资源8在线| 手机av亚洲丝袜美腿日韩第一页二页| 亚洲无码久久久久久久| 蜜臀99久久精品| 美女黄页| 插入逼91| 日本日皮视频逼| 超碰人人干天天射| 欧美玖玖爱免费玖玖| 天堂成人网| 九九久久九九久久| 久久无码成人| 校园春色欧美色图| 成人免费视瓶| 日本一级二级三级网站| 亚洲性综合9| 无码国产精品午夜不卡(| 亚洲综合888| 成人性交免费视屏| 国产操偷| 97在线亚洲| 亚洲另类色图片| 丰满人妻av一区二区三区| 亚洲色图91| 天天综合网亚洲综合网| 久久一区无码| 亚洲成av人片色午夜乱码| 亚洲日韩在线a不卡99精品| 国产又长又大又粗的视频| 玖玖在线视频| 九九九九久久久久| 97国产精选| 欧美国产一区二区三区麻豆传媒| 色穴精品| 亚洲色久| 久久精品国产亚洲AV无码电影| 日韩兔费看黄片| 美女91网址| 热的中文 热的有码 热的国产| 日韩人妻操B| 日本3级一区二区免费| 天天影视网综合少妇| 色噜噜人妻丝袜a∨先锋影| 午夜亚洲WWW湿好大| 久久久久久久97| 91无码人妻精品一区二区三区蜜桃 | 亚洲男人天堂2019| 国产精品午夜高潮呻吟久久av| 国产女人与拘做受视频免费| 秋霞成人做爱| 亚洲精品国产专区在线观看| 免费日韩黄片| 超碰在线人妻中文字幕| 精品三级在线专区| 女性91网站| 91亚洲在线| 一区二区三| 日韩情色一区二区| 久久精品国产亚洲5555| 国产品精品自在在线午夜免费 | 欧美很很操视频| 午夜高清成人在线视频| 色官网在线| 久久直播国产| 丁香六月东京热| 国语av最新自产拍在线观看| 伊人色综合网电影| 91精品久久久久久综合五月天| 激情五月天社区| 丁香五月久久| 一本一道人妻久久一区二区三区| 99re6久热只有精品6在线直播| 亚洲中文字幕97久久精品少妇| 亚洲黄色影视| AV色天香在线| 天天天乱色综合全| 综合九九| 天天久久| 99re98| 91网九色蝌蚪操熟女| 91亚洲色人| 色色香蕉| 蜜臀av在线播放一区二区三区| 91N欧美| 人人妻人人色| 9久9久9久9久视频网站| 国产福利合集| 免费A片三p视频| 大鸡吧尹人在线| 夜夜騷av、一區二區| 日本三级韩国三级美三级91| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 91痴汉| 久久久96| 永久免费发布性爱网| 少妇超碰在线| 精品久久大胆人体| 欧美性性性| 尤物视频一区| 99∨VTV| 国产1727欧美| 中文字幕99999| 岛国在线一区二区三区| 亚洲天堂7777| 久九九九九九九热| 国产蜜臀精品一区二区尤物| 99亚洲国产精品色一区二区三区| 性做久久久久久免费观看软件| 久草久热| 日韩欧美~中文字| 爱妃国产亚洲视频中文字幕| 国模精品一区二区三区苹果色戒| 人人摸人人干| 亚洲欧美碰碰| av天堂5| 江都AV在线| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 亚洲色图图片| 色情综合| 欧美传媒一区| 无码一区二区精品视频久久久春药 | 91偷拍欧美亚洲| 91国产丝袜白虎| 久草免费福利在线播放| 在线观看十八禁| 91n处女在线观看| 日本成人电影资源网| 久草资源在线视频官方总站日韩丝袜美腿 | AVE乱伦| 蜜桃视频精品一区二区| 久久久月天| 亚洲男人综合| 高清不卡国产| 天天日天天干少妇日| 日韩成人性爱电影在线播放| 刺激性视频黄页| 传媒在线观看一区二区三区| 国产成人bd在线观看| 97视频在线免费播放| 白丝被操91| 日本不卡三级网在线播放| 熟女少妇视频| 日逼国产| 99热这里只有精品1| 免费强奸av| 肉丝中文无码高清| 亚洲第一成人影院色播| 久久久9 9 9精品| 99久久e免费热视| 欧美91久久久久| 日韩欧美一级特黄大片| 日本免费一区二区不卡 | 日韩人妻精品中文字幕| 岛国激情视频软件| 亚av顶级裸体一区二区三区四区五区| 欧美五十路熟| 欧洲射精91| 操操逼视频| 久噜噜| 浪人综合网| 操死我了啊啊啊| 91成人在线免费视频| 国产丝袜一区二区三区| 欧美一级色| 亚洲丝袜诱惑| AV老汉| 黑人无码一区二区| 欧美一级专区免费大片| 8050午夜少妇无码| 91日韩国产欧美亚洲另类精盘州至城都| 99在线观看| 精品高潮| 国产99999久久精品| 婷婷五月天影院| 天天躁狠狠躁av| a在线观看| 综合久久少妇中文字幕| 牛牛久久国产精品视频一二三| 日本操色导航| 亚洲男人在线观看天堂| 天天干一区二区| 国产一级不卡在线观看| 久久男人| 91熟女综合| 你懂得91| 蜜臀AV秘一区翔田千里| 91视频综合在线| 精品久久人妻成人网| 国产精品天堂| 9 9无尺码天堂网| 国产超碰在线| 国产黄片精品在线| 少妇高潮九九九九| 日欧毛片久久| 蜜臀少妇一区二区| 国产理论视频在线播放| 国产精品网址| 9999久久久久| 麻豆乱码久久精| 国产CHASE男男GAYGA 毛多色婷婷| 好属操| 男人天堂网手机版婷婷| 99色悠悠| 亚洲中文日韩精品| 日韩无码精品综合久久| 校园激情狠狠四射| 香蕉免费一区二区三区不读| 人夜夜精品网站香蕉嫩草| av网页一区二区三区| 日本一区二区不卡| 日日97| 天天摸天天舔天天操| 91人妻视频在线| 99热这里是精品| 日韩亚洲中文字幕在线| 91丨国产丨白浆秘 洗澡动漫| 色哟哟精品1精品2| 九九九久久久久| 老鸭窝亚洲毛片| 综合久久婷婷| 久久香蕉综合一本到3atv| 国产美女销魂在线观看不卡| 亚洲精品久久久久久久蜜桃臀| 久日91在线| 色五月婷婷在线| 天天爽人人综合免费7799| 乳欲人妻办公室奶水| 97资源视频| 综合第一页| 精品在线78| 久久久久久久综合,国产| 国产二区三区粉嫩在线| 91网18| 亚洲精品欧美专业| 欧美亚洲20p| 久久人人爽爽爽人久久久| 国内精品999| 日韩人妻操B| 欧美午夜精品久久久久久超碰| 九月婷婷综合| 欧美日韩999| 日韩三级一区| 黑丝少妇在线观看| 91久久精品蜜臀| 国产亚洲人妻综合日韩 久久| 日韩另类| 天天看综合网| 色婷婷aV一区二区三区麻豆综合| 成人五月香网在线| 富二代亚洲精品99| 五月婷婷AV| 日韩啪啪视频| 天堂蜜桃无码视频一区二区| WWW黄片COM| 国产亚洲色婷婷久久99精品91| 美女黄频a美女大全免费皮| 欧美激情中文字幕另类小说| av资源在线观看少妇| 天天干天天做| 18一区二区三区| 国产午夜视频| 亚洲麻豆18发?| 久久这里只精品| 亚洲风情在线观看| 91亚洲图片| 国产91影院| 日韩国产欧美伦理在线| 91快色色色色色| 国产精品久久久鸭无码的功能| 丁香五月电影| 4141514逼喷水三级片| 97bbn| 99操逼| 综合伊人网12色| 国产高清亚洲日韩一区| 亚欧成人综合影院| 久操婷婷| 九九热超碰97亚洲最新香蕉| 天天综合网91入口| 蜜臀av中文字幕| 无码人妻精品酒店| 亚洲最新中文字幕免费| 91丨九色丨东北熟女| 欧洲射精91| 97chaopenrihan| 亚洲日韩国产精品| 亚洲黄色a级片| 伊人网av| 大香蕉啪啪啪啪在线| 国内精品久9| 在线播放成人高清免费视频| 国产麻豆一级精品视频| 在线人妻熟女一区二区三区四区五区| 久久人妇| 污色区网站| 亚洲图片偷拍视频区| 亚洲欧洲偷拍一区| 91色综合色| 国产一级舔足在线观看| 日本123区操B视频| 夜夜福利| 日韩在线观看三级电影| 97摸视频| av天天在线| 精品国产Av无码久久久伦古装| 秋霞蝌科网日本一区| 九一亚洲国产免费| 五月天婷婷社区| 国产www色在线观看| 涩五月婷婷| 91 综合 色| 人妻精品免费一二三区| 激情综合五月| 91插B网站| 欧美性爱第一页久久| 色婷婷激情| 精品一区99999| 精品无码久久久久久国产浪潮| 五月婷婷丁香六月| 亚欧操逼片在线观看| 国模艳艳啪啪一区| 日韩一级二级| 少妇的嫩逼图片| 欧美精品自慰系列寂寞少妇| 俞拍自拍| 这里只有精品视频在线观看麻豆| 青青色综合| 男女啪啪啪18禁网站| 亚洲天堂区| 久久国产精品一区二区| 国产高清精品福利| 久久久91福利姬| 亚洲黄色视频在线观看视频| 中文伊人大香蕉视频| 久久伊人影院| 亚洲欧美精品一区天堂久久 | 天天综合91入口| 91精品伊人久久久大香线蕉91| 久啪| 91快色色色色色| 啊啊啊在线观看免费视频| TS人妖另类精品视频系列| 电影69乱码96| 成人五月天丁香激情综合| 亚洲天堂色图| 久操91视频| 香蕉久久精品| 老熟妇一区二区三区…| 欧美色综合图片| 免费中文在线| 国产suv一区二区三区6| 日韩精品在线观看网站| 久久99干一本高清| 日韩不卡毛片Av免费高清| 久久9免费视频| 操逼逼福利视频| 日韩欧美~中文字| www.夜夜操| 亚洲一区二区在线观看91| 91丝袜美女| 亚洲精品人妻在线| 日本久久久精品电影| 丁香六月婷婷| 国产成人拍国产亚洲精品| 大香蕉综合在线| 日韩成人网址| 男女性无套 免费九一| 伊人久久久日韩一区| α√在线| 中文字幕成人乱码熟女精品国50| 婷婷久久综合久| 亚洲资源一区| 久热精品色情| 免费精品福利在线观看| 日韩超碰97| 一区二区三区无卡视频在线观看| 在线精品福利免费播放| 91综合网站| 亚洲欧美日韩国产丝袜自拍中文| 熟女突然公开看18禁影片| 一起草高清无码| 一区二区三区成人| 一区二区三区精品黑丝白丝酒店对鸡 | 久久国产视频专区一二三| 性在久久久久久| 欧美 亚洲 第一页 | 美女啊啊啊啊啊啊啊| 国产精品黄色三级av| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 成年女人黄网站| 不卡在线观看视频| 97视频在线视频| 人妻久热在线| 欧美性爱精品一区二区| 岛国黄片网站| 校园春色第一页| 色噜噜狠狠色综无码久久| 国产偷仑| 泰国AV在线观看| 婷婷五月天激情小说| 中文字幕亚韩| 国产h片在线观看视频| 在线免费观看高清无码视频| 怡红院成人视频| 久久亚洲日韩国产欧| 夜夜操一区二区| 伊人一区二区三区| 97资源欧美| 97综合在线| 久久五十路熟女人妻| 97精品| 97美日韩视频| 性欧美第一页| 亚欧美色图| 少妇高潮喷水无套久久久久久| 精品一区二区三区四区女| 性欧美体内射精| 日韩99999色| 超碰爽人妻熟女Av| 天天肏美女| 干B视频伊人网| 亚洲中文字幕有码视频一区二区三区| 国语人妻精彩刺激| 综合影院亚洲| 亚洲天堂色图| 91丝袜在线观看视频在线观看| 麻豆天美国美国产| 亚洲精品丝袜| 91伊人大香蕉| 色娱乐色呦呦夜夜夜夜av| 天天综合网AV91| 亚洲日韩久久精品一区| 校园春色欧美| 久久久女人| 久久区| 69av一区二区三区| 久久综合国产精品国产| 亚洲αv一区二区三区| 久久高清欧美国产| 99re在线观看| 久久女人视频| 97色妞| 亚洲脚交| 夜色91| 亚洲国产欧美一区二区潘金莲| 中文字幕亚洲热播人妻| 99久久精品国产高潮| 色色国产| 99操| 亚洲做性| 91搡老女人老妇女老熟女歌词翻译| 久久在线观看免费视频| 人人看欧美性爱| 久久婷婷色| 厕所偷拍在线| 国产女人9999| 欧美 亚洲| 秋霞一级A片黄色视频| 欧美精品久久久久久久久88| 麻豆久久久一区二区| 天天日天天射天天干| 夜夜国自区| 国产强奸乱伦无码视频| 国产精品一区二区三区,亚洲综合 性开放中文AV高清无码免费看 | 少妇啪啪自拍| 丁香婷婷久久 | 日韩综合无码一区久久92| 奇米四色影视777久久久| 九热视频| 97精品视频网站| 啊啊啊好大好深| 高潮的A片激情扒开一区| 欧美一级做a爰片免费视频| 97超碰色五月| 一区二区不卡免费| 日韩无码人妻| 成人网址在线观看| 九九九九九九成人| 麻豆精品.欧美精品.日韩精品.| 国产一区二区在线播放量| 99久久99九九99九九九| 欧美视频第二页| 久久久久久久91| 成人性爱美曰韩| 欧美图片色综合| 欧美伊人电影| 久草视频观看视频在线| 精品国产乱码久久久久久影片| 久久人妻无码毛片A片麻豆| 曰韩中文人妻视频| 无遮挡猛进视频免费无限观看| 精品无码一区二区| 91蜜臀人妻中文字幕在线| 影视综合无码少妇| 热天堂一区二区| 日韩欧美女求操每天更新| 奇米狠999| 久久夜嗨| 男女一进一出视频久久| 亚洲另类电影| 熟女露脸激情自拍视频| 日熟女| 污到发麻的视频 国产| 奶水 人妻 哺乳 在线| 精品毛片久久久精品毛片| 久久綜合很很很| J?P?NESEHD熟女熟妇伦| 五月丁香六月激情综合| 一二区在线观看视频| 久久夜黄色无码A级大片| 亚欧中文字幕在线视频| 看日韩黄片| 啊啊啊 在线观看| 国产AV中文| 五月婷婷六月丁香| 99精品九九九九九九| 国产农村一一级特黄毛片| 夜夜免费视频| 亞洲久久直播| 91精品久久久久久77777| 377p欧洲日本亚洲大胆| 色九九九综合| 正在播放国产精品一区| 操操操操网黑人| 日韩精品一区二区高清| 少妇人妻精品| 不卡av在线中文字幕| 久久精品夜色国产亚洲AV| 欧美黄色片在线播放| 久久久久78| 一区二区三区探花在线观看| 欧美在线色| 丝袜美腿制服人妻二区中文字幕 | 国产精品久久久久久无码红治院| 动漫区日韩区欧美区| 亚洲性爱免费电影| 久久原创中文| 日本一级性爱| 日日不卡av| AV色天香在线| 香蕉黄色一级视频| 97频视在线| 九九综合久久| 欧美 亚洲精品首页| 美女露胸露奶头| 999精品国产高清一区二区| 日韩电影天堂视频一区二区| 亚洲AV操| 综合亚洲欧美| 岛国AV一区二区电影| 一起草欧美| 色97国产69香蕉| 九九九九久久久| 激情五月综合开心五月| 天综合网欧美| 激情综合五月| 日韩有码 一区二区三区| 97精品国产精品免费观看| 国产精品亚洲免费| 97超碰超碰| 欧美日韩人妻婷婷一区| 五月天大香蕉| 无码一区免费在线不卡| 五毛骚逼极品美女怕怕| 超碰人人妻| 无码 黑人一区二区三区| 天天在线91| 欧美黑人与女人91~| 欧美日韩性爱无码| 九九九九精品九九九九| 香蕉免费一区二区三区不读| 中文字幕在线观看视频www| 日本成人免费一区二区三区| 九热超碰| 日本天天人人狠狠在线日美女 | 77国产精品| 99性爱视频| 岛国视频一二三区| 94色色电影网| 亚洲Av噜噜一区二区三区妖精| 99热网站| 性久久| 男人的天堂 在线一区| 中文一区在线日| 国产原创精品| 99ri精品| 国产精品视频麻豆入口| 精品人妻一区二区三区在线视频不卡| 97精品国产手机| 天天综合网一91网| 国产一级做a爰大片免费久久| 26uuu久久| 夫妻日逼| 欧美伦乱| 福利一级版子| 精品人妻一区二区三区-国产精品| 92午夜免费福利视频| 欧美不卡在线一区二区| 国产精品网址| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 欧亚第一综合网| 嗯啊不要在线观看嗯啊| 96久久精品一二三区色欲| 国产精品日韩在线一区| 久久一区二区三区四区五区| 久肏视频字幕| 天堂亚洲精品久久老牛| 97视频在线观看高清资源| 久操B网| 青青草视频这里只有精品| 久操热线| 伊人久久大香大香线蕉中文| 国产中文精品一区二区在线观看| 操逼无码操逼| 99精品国产户外露出| 亚洲国产97| 久久久久成人亚洲国产| www..com操老师| 天天操天天射天天日| 五月丁香色综合| 尤物视频偷拍免费| 人妻人人澡人人爽人人| 97 亚洲 日韩 欧美 在线| 亚洲图片欧美91N| 蜜臀国产AV中文字幕| 婷婷色婷婷| 亚洲激情四射| 99热这里是精品| 99激情| 97资源制服丝袜| 性爱动态120秒| 亚洲中文制服诱惑| 精品无码久久久| 久久a久久| 色五月69夫妻| 美女诱惑在线一区| 男人把坤坤插入女人的下体| 校园春色中文字幕AV| 国产视频大全| q2午夜理论片夜色av| 99999亚洲另类| 天天干18禁| 亚洲本色精品一区二区久久| 激情综合网激情综合| 伊人久久综合影院精品久久久| 91精品亚洲内射孕妇| 国产精品成人福利在线| 91精品无码人妻系列| 五月色网|