亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

面試官:MySQL中的 distinct 和 group by 哪個(gè)效率更高?

面試官:MySQL中的 distinct 和 group by 哪個(gè)效率更高? 一、開篇一道高頻面試題背后的問題在 MySQL 相關(guān)的面試中有一道題經(jīng)常被面試官問到distinct 和 group by 都能去重它們哪個(gè)效率更高很多候選人聽到這個(gè)問題后會(huì)下意識(shí)地回答「distinct 更快因?yàn)樗恼Z義更簡單」也有一些人會(huì)回答「group by 更快因?yàn)樗δ芨鼜?qiáng)」。實(shí)際上這道題并沒有一個(gè)脫離場(chǎng)景的唯一答案。要回答好這道題不能只停留在「誰比誰快」的結(jié)論上而應(yīng)該從 SQL 語義、執(zhí)行計(jì)劃、索引使用、臨時(shí)表、排序和優(yōu)化器行為幾個(gè)維度展開。本文將以 MySQL 8.0 為主要版本結(jié)合 InnoDB 存儲(chǔ)引擎從原理到實(shí)驗(yàn)系統(tǒng)地把 distinct 與 group by 的去重機(jī)制講清楚并給出不同場(chǎng)景下的選擇建議。整篇文章將覆蓋以下幾個(gè)方面distinct 與 group by 的基礎(chǔ)語法和語義差異兩種寫法在優(yōu)化器中的執(zhí)行計(jì)劃差異單列去重與多列去重的內(nèi)部處理方式count(distinct) 的特殊性和性能問題索引對(duì)去重效率的影響臨時(shí)表、文件排序和內(nèi)存限制的作用性能實(shí)測(cè)數(shù)據(jù)對(duì)比group by 相比 distinct 的額外能力不同業(yè)務(wù)場(chǎng)景下的選擇策略和優(yōu)化建議圍繞這道題常見的面試追問在正式開始之前需要先說明一點(diǎn)本文討論的是「用 group by 實(shí)現(xiàn)去重」與「直接使用 distinct 去重」之間的效率對(duì)比默認(rèn)查詢最終返回的都是去重后的結(jié)果集。理解了這一點(diǎn)后面的分析和實(shí)驗(yàn)才有統(tǒng)一的比較基準(zhǔn)。二、基礎(chǔ)回顧distinct 與 group by 的用法2.1 distinct 的語法與語義distinct 是 SELECT 語句中的一個(gè)關(guān)鍵字用來去除查詢結(jié)果中的重復(fù)行。它的位置通常緊跟在 SELECT 之后作用于 SELECT 列表中的全部列。也就是說distinct 去重的對(duì)象不是某一列而是整行記錄的組合。例如有一張用戶表 user里面記錄了用戶的城市和職業(yè)CREATE TABLE user ( id BIGINT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, city VARCHAR(50) NOT NULL, job VARCHAR(50) NOT NULL, KEY idx_city (city) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;如果只想查詢所有出現(xiàn)過的城市可以使用SELECT DISTINCT city FROM user;如果查詢的是 city 和 job 兩列去重的就是「城市和職業(yè)」這個(gè)二元組合SELECT DISTINCT city, job FROM user;注意distinct 關(guān)鍵字的位置不能隨意放在列后面它是一種作用于整行結(jié)果的關(guān)鍵字。比如下面這種寫法是不符合語法的SELECT city, DISTINCT job FROM user; -- 錯(cuò)誤寫法2.2 group by 的語法與語義group by 是 SQL 中的分組關(guān)鍵字它會(huì)按照指定列的值把結(jié)果集分成若干組每組最終輸出一行。由于每個(gè)分組的列值相同因此從結(jié)果上看group by 指定的列天然具有去重效果。同樣查詢所有出現(xiàn)過的城市用 group by 可以寫成SELECT city FROM user GROUP BY city;查詢城市和職業(yè)組合時(shí)SELECT city, job FROM user GROUP BY city, job;從去重效果來看上面兩條 group by 語句分別等價(jià)于對(duì)應(yīng)的 distinct 語句。但二者的語義并不完全相同group by 除了去重以外還允許對(duì)每個(gè)分組進(jìn)行聚合計(jì)算而 distinct 本身不具備聚合能力。三、從執(zhí)行計(jì)劃看本質(zhì)差異要判斷 distinct 和 group by 誰更高效首先要看優(yōu)化器如何解析和執(zhí)行這兩類語句。執(zhí)行計(jì)劃是分析 SQL 性能最直接的入口使用 EXPLAIN 可以查看優(yōu)化器選擇的訪問路徑。3.1 distinct 的執(zhí)行計(jì)劃先建立一個(gè)測(cè)試表并寫入一定量的數(shù)據(jù)DROP TABLE IF EXISTS t_distinct_test; CREATE TABLE t_distinct_test ( id INT PRIMARY KEY AUTO_INCREMENT, category INT NOT NULL, name VARCHAR(100) NOT NULL, create_time DATETIME NOT NULL, KEY idx_category (category) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;查看單列 distinct 的執(zhí)行計(jì)劃EXPLAIN SELECT DISTINCT category FROM t_distinct_test;如果 category 字段上存在索引 idx_category優(yōu)化器通常會(huì)優(yōu)先選擇該索引進(jìn)行掃描并利用Loose Index Scan或索引順序掃描來避免創(chuàng)建臨時(shí)表。此時(shí) Extra 列中可能會(huì)出現(xiàn)Using index for group-by之類的提示。需要說明的是雖然提示中有 group-by 字樣但它表示的是優(yōu)化器采用了松散索引掃描這種針對(duì)分組和去重場(chǎng)景的優(yōu)化策略distinct 和 group by 都可能受益。如果去重字段沒有可用索引執(zhí)行計(jì)劃往往會(huì)顯示出Using temporary這意味著 MySQL 需要借助臨時(shí)表來存儲(chǔ)已經(jīng)出現(xiàn)過的值并在插入時(shí)判斷是否重復(fù)。3.2 group by 的執(zhí)行計(jì)劃查看對(duì)同一列進(jìn)行分組的執(zhí)行計(jì)劃EXPLAIN SELECT category FROM t_distinct_test GROUP BY category;當(dāng) category 列有索引時(shí)group by 同樣可以走索引。與 distinct 類似優(yōu)化器也可能采用松散索引掃描。對(duì)于只包含分組列、沒有聚合函數(shù)的簡單分組查詢MySQL 的優(yōu)化器在很多情況下會(huì)把 group by 和 distinct 的執(zhí)行路徑優(yōu)化得非常接近甚至生成等價(jià)的執(zhí)行計(jì)劃。也就是說在最簡單的「單列去重且該列有索引」場(chǎng)景下distinct 和 group by 的性能幾乎沒有明顯差異二者都可能通過索引高效完成去重。3.3 關(guān)鍵區(qū)別不一定在執(zhí)行計(jì)劃而在功能定位需要糾正一個(gè)常見誤解很多人認(rèn)為 distinct 一定比 group by 快理由是 distinct 只需要判斷重復(fù)而 group by 還要分組排序。實(shí)際上MySQL 的 group by 并不一定要求排序只有顯式使用 ORDER BY 或者某些特定執(zhí)行路徑才會(huì)產(chǎn)生排序開銷。而 distinct 在必要時(shí)同樣會(huì)使用臨時(shí)表。因此單純從「關(guān)鍵字語義」判斷效率是不準(zhǔn)確的真正決定性能的是去重列是否有索引、數(shù)據(jù)量大小、去重后的基數(shù)高低、內(nèi)存是否充足、是否需要額外排序這些條件。四、單列去重的內(nèi)部處理4.1 有索引時(shí)的去重策略假如查詢語句是SELECT DISTINCT category FROM t_distinct_test;并且 category 列上建立了普通索引那么 InnoDB 的二級(jí)索引葉子節(jié)點(diǎn)中保存的是「索引列值加主鍵值」并且索引本身按照 category 的順序排列。由于相同 category 的記錄在索引中是連續(xù)存放的掃描索引時(shí)只需要讀取第一個(gè)值然后跳過后續(xù)相同的值即可。對(duì)于 group by 的等價(jià)寫法SELECT category FROM t_distinct_test GROUP BY category;MySQL 同樣可以利用索引的有序性進(jìn)行分組。Optimizer 在掃描索引時(shí)每遇到一個(gè)新的 category 值就輸出一行這被稱為松散索引掃描。這種掃描方式不需要把全部記錄加載到臨時(shí)表中內(nèi)存占用小執(zhí)行效率高。在有合適索引的情況下簡單 distinct 和簡單 group by 的去重成本都是 O(n) 級(jí)別的掃描成本差別很小。真正拉開差距的往往是那些更復(fù)雜的查詢形態(tài)。4.2 無索引時(shí)的臨時(shí)表處理當(dāng)去重列沒有索引時(shí)MySQL 無法借助有序性去重只能建立一個(gè)臨時(shí)表。臨時(shí)表可以是內(nèi)存表也可以是磁盤表。執(zhí)行過程大致如下掃描源表記錄對(duì)每一條記錄判斷其去重鍵是否已經(jīng)存在于臨時(shí)表如果不存在則插入臨時(shí)表并輸出或暫存該行如果存在則跳過當(dāng)數(shù)據(jù)量較大、臨時(shí)表超過 tmp_table_size 或 max_heap_table_size 限制時(shí)MySQL 會(huì)把內(nèi)存臨時(shí)表轉(zhuǎn)為磁盤臨時(shí)表使用 MyISAM 或 TempTable 存儲(chǔ)引擎性能會(huì)明顯下降。在這種情況下distinct 和 group by 都可能使用臨時(shí)表二者的底層開銷接近。相對(duì)而言group by 在支持聚合時(shí)還可以做更多優(yōu)化而 distinct 的能力邊界則停留在去重。五、多列去重的差異5.1 distinct 作用于整行distinct 的語義是對(duì) SELECT 列表中的所有列組成的行進(jìn)行去重。例如SELECT DISTINCT city, job FROM user;這條語句會(huì)返回 city 和 job 都不重復(fù)的組合。如果 user 表有 100 萬行但 city 和 job 的組合只有 1 萬種那么最終返回 1 萬行。在執(zhí)行計(jì)劃上如果 city 和 job 上存在聯(lián)合索引 idx_city_jobMySQL 可能通過該索引完成去重。但如果只對(duì) city 建了索引、job 沒有索引那么僅靠 city 索引無法保證 city 和 job 組合在索引中是連續(xù)有序的優(yōu)化器的選擇就會(huì)更復(fù)雜可能需要回表后再進(jìn)行去重或使用臨時(shí)表。5.2 group by 同樣作用于分組列組合使用 group by 的等價(jià)寫法是SELECT city, job FROM user GROUP BY city, job;這里 city 和 job 是分組列結(jié)果同樣是去重后的組合。與 distinct 相比二者的語義在「只查分組列」時(shí)幾乎一致。但如果查詢中增加了聚合函數(shù)語義就開始分化SELECT city, job, COUNT(*) AS cnt FROM user GROUP BY city, job;這種查詢 distinct 無法直接替代。即便使用 distinct 配合窗口函數(shù)或其他手段模擬寫法也復(fù)雜得多。這正是 group by 相比 distinct 最本質(zhì)的優(yōu)勢(shì)之一。5.3 多列去重中容易出現(xiàn)的一個(gè)誤區(qū)有些開發(fā)者會(huì)寫成SELECT DISTINCT city, job FROM user WHERE city 北京;并認(rèn)為 where 條件中的 city 已經(jīng)固定distinct 只需要對(duì) job 去重。這個(gè)理解在結(jié)果層面是對(duì)的但優(yōu)化器是否能據(jù)此降低去重成本取決于索引情況。如果存在 (city, job) 聯(lián)合索引利用索引最左前綴匹配city 固定后 job 依然有序去重效率會(huì)很高如果只有單列 city 索引job 部分仍可能需要額外去重。六、count(distinct) 的特殊問題在涉及 distinct 的面試題中count(distinct) 是一個(gè)繞不開的進(jìn)階點(diǎn)。它的性能和普通 distinct 查詢有明顯差異也經(jīng)常被用來考察候選人對(duì)執(zhí)行計(jì)劃的理解深度。6.1 count(distinct col) 能走普通索引嗎先看一個(gè)常見查詢SELECT COUNT(DISTINCT category) FROM t_distinct_test;這里要統(tǒng)計(jì) category 的去重個(gè)數(shù)。與 SELECT DISTINCT category 不同count(distinct) 需要得到去重后的記錄數(shù)量而不是去重后的明細(xì)行。當(dāng) category 上有索引時(shí)show 執(zhí)行計(jì)劃或用 EXPLAIN ANALYZE 觀察MySQL 是否能利用索引完成 count(distinct)在不同版本中表現(xiàn)不同。在 MySQL 8.0 中對(duì)于 COUNT(DISTINCT col) 這類聚合優(yōu)化器通??梢話呙杷饕匀豢赡苄枰趻呙柽^程中進(jìn)行去重統(tǒng)計(jì)。如果 category 沒有索引或者需要對(duì)多列進(jìn)行 count(distinct)執(zhí)行成本會(huì)顯著上升因?yàn)樾枰S護(hù)一個(gè)較大的去重集合且無法簡單利用索引順序。6.2 count(distinct a, b) 的代價(jià)考察下面這種查詢SELECT COUNT(DISTINCT city, job) FROM user;這種寫法需要對(duì) city 和 job 的組合進(jìn)行去重后再計(jì)數(shù)。即便 city 上有索引、job 上也有索引如果不存在 (city, job) 聯(lián)合索引MySQL 也很難直接利用單個(gè)索引完成組合去重。底層實(shí)現(xiàn)上MySQL 可能在掃描結(jié)果的基礎(chǔ)上維護(hù)一個(gè)去重結(jié)構(gòu)。去重集合越大內(nèi)存占用越高一旦超過最大限制就會(huì)落盤性能急劇下降。這也是為什么在數(shù)據(jù)倉庫和大數(shù)據(jù)量報(bào)表中count(distinct) 經(jīng)常是性能瓶頸之一。6.3 count(distinct) 的一些優(yōu)化思路如果業(yè)務(wù)確實(shí)需要統(tǒng)計(jì)去重個(gè)數(shù)可以考慮以下優(yōu)化方案為需要去重的列建立合適的聯(lián)合索引使優(yōu)化器能夠有效利用索引順序把 count(distinct col) 改寫為對(duì)「列為主鍵或唯一鍵的子查詢」進(jìn)行計(jì)數(shù)使用 group by 加 count(*) 的寫法再對(duì)分組結(jié)果進(jìn)行計(jì)數(shù)必要時(shí)借助子查詢或派生表在大數(shù)據(jù)量場(chǎng)景下先在應(yīng)用層或 ETL 階段做近似去重如使用 HyperLogLog 思路檢查 innodb_buffer_pool_size 和臨時(shí)表相關(guān)參數(shù)降低落盤概率下面是一種常見的改寫方式使用派生表把去重和計(jì)數(shù)拆開讓執(zhí)行計(jì)劃更清晰-- 原始寫法 SELECT COUNT(DISTINCT category) FROM t_distinct_test; -- 改寫為先去重再計(jì)數(shù) SELECT COUNT(*) FROM ( SELECT category FROM t_distinct_test GROUP BY category ) AS dedup;這種改寫并不一定總是更快但至少可以讓去重過程和計(jì)數(shù)過程分離便于進(jìn)一步針對(duì)索引和執(zhí)行計(jì)劃進(jìn)行優(yōu)化。七、索引如何影響效率7.1 覆蓋索引與回表在討論 distinct 和 group by 的效率時(shí)索引是一個(gè)核心變量。以查詢單個(gè)去重列為例SELECT DISTINCT category FROM t_distinct_test;如果 category 上有普通索引并且查詢只需要 category 列那么該索引就是覆蓋索引。掃描二級(jí)索引時(shí)可以直接獲得 category 值不需要回表查詢聚簇索引IO 成本較低。但如果查詢還包含其他列例如SELECT DISTINCT category, name FROM t_distinct_test;而索引只有 idx_category(category)那么掃描 category 索引找到候選記錄后還需要根據(jù)主鍵回表讀取 name 列再進(jìn)行整行去重。此時(shí)掃描成本雖然可能降低但回表成本仍然存在是否劃算取決于過濾后的數(shù)據(jù)量。7.2 索引順序與去重方向如果去重列有索引且查詢不需要額外排序distinct 和 group by 都能按索引順序讀取。但如果查詢要求結(jié)果按另一列排序就需要額外排序SELECT DISTINCT category FROM t_distinct_test ORDER BY category;當(dāng) ORDER BY 的列與去重列一致且索引順序匹配時(shí)排序可以省去。反之如果排序字段不同優(yōu)化器可能先完成去重再做 filesort。group by 也有類似問題。group by 默認(rèn)并不保證結(jié)果有序雖然舊版本在某些存儲(chǔ)引擎下會(huì)隱式排序但 MySQL 8.0 已經(jīng)移除對(duì)隱式排序的依賴。因此不要假設(shè) group by 的結(jié)果天然按分組列排序。7.3 聯(lián)合索引的覆蓋能力對(duì)于多列去重聯(lián)合索引的設(shè)計(jì)非常關(guān)鍵。比如頻繁執(zhí)行SELECT DISTINCT city, job FROM user;此時(shí)建立聯(lián)合索引 idx_city_job(city, job) 對(duì)去重最有幫助。掃描該索引時(shí)city、job 組合天然有序相同組合連續(xù)出現(xiàn)去重成本最低。需要注意聯(lián)合索引的順序要和查詢中的列順序、過濾條件相匹配。如果更多查詢是「先按 job 過濾再按 city 去重」那么可能建立 (job, city) 聯(lián)合索引會(huì)更合適。聯(lián)合索引設(shè)計(jì)要結(jié)合真實(shí)業(yè)務(wù)查詢而不是機(jī)械套用某一種寫法。例如如果查詢還經(jīng)常包含 create_time 條件也可以考慮在高頻過濾列的基礎(chǔ)上組合去重列但索引列越多寫入和維護(hù)成本也會(huì)越高需要在查詢收益和寫入成本之間做平衡。八、臨時(shí)表、文件排序與內(nèi)存限制的作用當(dāng) distinct 或 group by 無法借助索引直接完成去重或分組時(shí)MySQL 通常會(huì)退回到臨時(shí)表。臨時(shí)表的工作方式以及和它密切相關(guān)的文件排序、內(nèi)存參數(shù)往往是不同 SQL 寫法之間出現(xiàn)性能差距的關(guān)鍵來源。8.1 臨時(shí)表會(huì)在哪些情況下被使用以下幾種情況很容易觸發(fā)Using temporary去重或分組列沒有可用索引。多列去重的組合與現(xiàn)有索引順序不匹配。去重或分組前還需要進(jìn)行函數(shù)計(jì)算、類型轉(zhuǎn)換、隱式轉(zhuǎn)換。SQL 中同時(shí)包含不同字段的 ORDER BY優(yōu)化器無法直接復(fù)用同一個(gè)索引順序。執(zhí)行計(jì)劃中出現(xiàn)Using temporary時(shí)說明 MySQL 需要借助一個(gè)額外的中間結(jié)構(gòu)來保存中間結(jié)果。這個(gè)中間結(jié)構(gòu)可能只存在于內(nèi)存中也可能落到磁盤上兩者的開銷差距非常大。8.2 內(nèi)存臨時(shí)表與磁盤臨時(shí)表的區(qū)別MySQL 會(huì)優(yōu)先創(chuàng)建內(nèi)存臨時(shí)表。內(nèi)存臨時(shí)表的大小受到tmp_table_size和max_heap_table_size兩個(gè)參數(shù)的共同限制取兩者中的較小值作為內(nèi)存臨時(shí)表的上限。當(dāng)中間結(jié)果超過這個(gè)上限后MySQL 會(huì)把臨時(shí)表轉(zhuǎn)成磁盤臨時(shí)表。磁盤臨時(shí)表可能使用 TempTable 引擎并落到 InnoDB 的磁盤表空間也可能在特定場(chǎng)景下使用 MyISAM。無論哪種實(shí)現(xiàn)磁盤 IO 的開銷都會(huì)讓處理速度明顯下降。所以同樣是去重在小數(shù)據(jù)量下 distinct 和 group by 可能都很快但數(shù)據(jù)量一旦超過內(nèi)存閾值導(dǎo)致臨時(shí)表落盤整體耗時(shí)可能成倍上升。這也是很多開發(fā)者在線上寫出慢 SQL測(cè)試環(huán)境卻表現(xiàn)正常的原因之一。8.3 filesort 對(duì)去重查詢的影響如果查詢結(jié)果需要按照非索引順序排序MySQL 就會(huì)使用 filesort。filesort 并不是一定寫文件它首先在sort_buffer_size指定的排序緩沖區(qū)中排序只有當(dāng)數(shù)據(jù)量超過緩沖區(qū)大小時(shí)才會(huì)使用外部歸并排序并寫到磁盤。以一個(gè)常見場(chǎng)景為例SELECT DISTINCT category FROM t_distinct_test ORDER BY name;這里去重列是 category排序列是 name。如果只有 category 索引優(yōu)化器可以先利用索引完成去重然后對(duì)去重結(jié)果執(zhí)行 filesort。去重后如果結(jié)果仍然很大filesort 的成本可能比去重本身更高。group by 也有相同問題。不要假設(shè)分組列和排序列一致就一定沒有排序也不要假設(shè) group by 一定有排序最終要看優(yōu)化器選擇的執(zhí)行路徑和表上的索引設(shè)置。8.4 調(diào)優(yōu)時(shí)應(yīng)該關(guān)注哪些參數(shù)如果確認(rèn) SQL 出現(xiàn)了臨時(shí)表或文件排序問題可以從這些參數(shù)和設(shè)計(jì)維度入手tmp_table_size控制內(nèi)存臨時(shí)表上限可結(jié)合業(yè)務(wù)數(shù)據(jù)量適當(dāng)調(diào)大但不能無限調(diào)大。max_heap_table_size與控制內(nèi)存表大小相關(guān)的參數(shù)和 tmp_table_size 共同生效。sort_buffer_size控制 filesort 緩沖區(qū)大小影響排序是否容易落盤。innodb_buffer_pool_size保證熱點(diǎn)索引和數(shù)據(jù)盡量留在緩沖池中減少磁盤讀。把去重/分組列和排序列納入索引設(shè)計(jì)從根源上減少臨時(shí)表和 filesort。九、性能實(shí)測(cè)不同場(chǎng)景下的數(shù)據(jù)對(duì)比前面更多是從執(zhí)行計(jì)劃角度分析下面用一個(gè)簡單的測(cè)試場(chǎng)景把不同條件下 distinct 和 group by 的表現(xiàn)做一個(gè)直觀對(duì)比。這里的數(shù)值是示例環(huán)境中的一組測(cè)試結(jié)果重點(diǎn)看趨勢(shì)不做絕對(duì)性能承諾。9.1 測(cè)試數(shù)據(jù)準(zhǔn)備繼續(xù)使用前面建立的t_distinct_test表向表中寫入 100 萬行測(cè)試數(shù)據(jù)category列基數(shù)約為 1 萬值分布不均勻。name列使用隨機(jī)字符串重復(fù)度較低。create_time覆蓋最近一年的時(shí)間范圍。分別測(cè)試無索引、單列 category 索引、聯(lián)合索引條件下的耗時(shí)。每次查詢執(zhí)行多次后取平均值避免單次波動(dòng)影響結(jié)論。9.2 單列去重場(chǎng)景對(duì)比語句SELECT DISTINCT category FROM t_distinct_test; SELECT category FROM t_distinct_test GROUP BY category;示例數(shù)據(jù)如下場(chǎng)景索引情況distinct 平均耗時(shí)group by 平均耗時(shí)結(jié)論單列去重 category無索引約 890 ms約 900 ms二者接近臨時(shí)表開銷明顯單列去重 categorycategory 上有索引約 45 ms約 48 ms差異很小都走索引去重可以看到在有索引時(shí)簡單 distinct 和簡單 group by 的耗時(shí)幾乎可以忽略差異在無索引時(shí)兩者都會(huì)受到臨時(shí)表影響耗時(shí)明顯上升。9.3 多列去重場(chǎng)景對(duì)比語句SELECT DISTINCT city, job FROM user; SELECT city, job FROM user GROUP BY city, job;示例數(shù)據(jù)如下場(chǎng)景索引情況distinct 平均耗時(shí)group by 平均耗時(shí)結(jié)論多列去重 city, job只有 city 單列索引約 1350 ms約 1380 ms無法直接利用索引組合成本高多列去重 city, job(city, job) 聯(lián)合索引約 65 ms約 62 ms聯(lián)合索引顯著降低去重成本這說明多列去重時(shí)聯(lián)合索引的收益要遠(yuǎn)大于在 distinct 和 group by 兩種寫法之間反復(fù)糾結(jié)。9.4 從實(shí)測(cè)結(jié)果中讀出的結(jié)論在簡單的單列去重、有合適索引時(shí)distinct 和 group by 性能差異很小。在無索引或多列去重?zé)o法利用聯(lián)合索引時(shí)二者的性能都會(huì)明顯下降且差距不大。真正決定性能的是索引設(shè)計(jì)、數(shù)據(jù)量、去重基數(shù)、臨時(shí)表是否落盤和排序需求。與其糾結(jié)用哪個(gè)關(guān)鍵字不如先檢查去重列有沒有合適的索引。十、group by 相比 distinct 的額外能力理解了執(zhí)行計(jì)劃之后就可以回答面試中常見的另一個(gè)問題既然 distinct 和 group by 都能去重為什么還要用 group by這是因?yàn)?group by 的功能邊界遠(yuǎn)不止去重。10.1 聚合計(jì)算group by 可以和聚合函數(shù)直接配合統(tǒng)計(jì)每個(gè)分組內(nèi)的數(shù)量、總和、平均值、最大值和最小值SELECT city, COUNT(*) AS user_count FROM user GROUP BY city;而 distinct 只能返回不重復(fù)的行本身不具備聚合能力。要想用 distinct 同時(shí)得到計(jì)數(shù)往往需要借助子查詢、窗口函數(shù)或額外掃描寫法復(fù)雜得多。10.2 HAVING 分組后過濾group by 之后可以使用 HAVING 對(duì)分組結(jié)果繼續(xù)過濾SELECT city, COUNT(*) AS user_count FROM user GROUP BY city HAVING COUNT(*) 100;這種“分組后再篩選組”的能力是 distinct 不具備的。10.3 多級(jí)匯總與 WITH ROLLUPgroup by 可以配合WITH ROLLUP生成小計(jì)行和總計(jì)行SELECT city, job, COUNT(*) AS cnt FROM user GROUP BY city, job WITH ROLLUP;這種用于報(bào)表和統(tǒng)計(jì)的寫法distinct 也無法直接實(shí)現(xiàn)。10.4 ONLY_FULL_GROUP_BY 下的語義差異MySQL 8.0 默認(rèn)開啟ONLY_FULL_GROUP_BY。啟用后SELECT 列表中的非聚合列必須出現(xiàn)在 group by 子句中-- ONLY_FULL_GROUP_BY 下可能報(bào)錯(cuò) SELECT city, job FROM user GROUP BY city;這說明 group by 承載的是一整套分組聚合語義而 distinct 只承載“結(jié)果去重”這一件事。二者定位不同不能簡單互替。十一、不同業(yè)務(wù)場(chǎng)景下的選擇策略與優(yōu)化建議綜合前面的分析可以把實(shí)際工作場(chǎng)景歸為幾類分別給出選擇建議。11.1 只需要去重不需要聚合如果需求只是取出去重后的列值或行組合推薦優(yōu)先使用 distinct。它的語義更直接代碼可讀性更好。在去重列有索引時(shí)性能和 group by 沒有本質(zhì)區(qū)別。11.2 去重后還要聚合、分組或過濾如果去重只是第一步后續(xù)還要 count、sum、avg或者需要按分組條件過濾應(yīng)直接使用 group by。這樣可以一次完成分組和聚合避免繞行派生表。11.3 多列去重優(yōu)先設(shè)計(jì)聯(lián)合索引對(duì)于列組合去重優(yōu)先把去重列按照業(yè)務(wù)查詢順序建成聯(lián)合索引。聯(lián)合索引能讓去重從臨時(shí)表方案變成索引掃描方案收益通常遠(yuǎn)超調(diào)整 SQL 關(guān)鍵字。11.4 面向接口的列表去重要區(qū)分層級(jí)有些“去重”問題本質(zhì)是業(yè)務(wù)模型問題例如分頁后出現(xiàn)重復(fù)數(shù)據(jù)、關(guān)聯(lián)查詢放大結(jié)果。此時(shí)不應(yīng)該通過無腦加 distinct 掩蓋問題而應(yīng)檢查連接條件、數(shù)據(jù)粒度或主鍵生成邏輯。11.5 超大表和報(bào)表場(chǎng)景在數(shù)據(jù)量很大的報(bào)表場(chǎng)景盡量避開直接 count(distinct)優(yōu)先用 group by 派生表分別完成去重和計(jì)數(shù)。對(duì)允許誤差的統(tǒng)計(jì)可以考慮 HyperLogLog 等近似去重方案。把高頻統(tǒng)計(jì)下推到數(shù)倉、ES、ClickHouse 等擅長聚合的組件中。檢查臨時(shí)表落盤情況必要時(shí)在 ETL 階段預(yù)先聚合。十二、高頻面試追問與回答要點(diǎn)回到這道面試題本身。面試官真正想考察的不是讓候選人背出一個(gè)“標(biāo)準(zhǔn)答案”而是看候選人能否根據(jù)執(zhí)行計(jì)劃和場(chǎng)景差異講清原因。12.1 distinct 一定比 group by 快嗎不是。在簡單單列去重且去重列有索引時(shí)兩者性能接近在無索引或多列去重時(shí)兩者的臨時(shí)表成本接近。性能主要取決于索引、數(shù)據(jù)量、去重基數(shù)和排序需求。12.2 count(distinct) 為什么經(jīng)常成為慢查詢因?yàn)?count(distinct) 需要維護(hù)去重結(jié)果才能統(tǒng)計(jì)數(shù)量去重集合越大越容易占用大量內(nèi)存超過限制后就會(huì)落盤。多列 count(distinct) 更難直接利用單個(gè)索引??梢愿膶憺?group by 派生表再計(jì)數(shù)或考慮近似去重方案。12.3 group by 一定需要排序嗎不一定。MySQL 8.0 中 group by 默認(rèn)不會(huì)隱式保證排序結(jié)果只有顯式 ORDER BY 或某些執(zhí)行路徑才會(huì)產(chǎn)生排序成本。如果結(jié)果需要穩(wěn)定順序應(yīng)顯式寫 ORDER BY。12.4 松散索引掃描是什么松散索引掃描是 MySQL 利用索引有序性進(jìn)行去重或分組的一種方式。掃描索引時(shí)每遇到一個(gè)新的去重鍵就輸出一行跳過后續(xù)相同值相比把所有數(shù)據(jù)加載到臨時(shí)表能顯著節(jié)省內(nèi)存和 IO。12.5 多列去重時(shí)怎么設(shè)計(jì)索引優(yōu)先為去重列建立聯(lián)合索引索引列順序要和查詢條件、分組順序匹配。例如高頻查詢是 city 加 job 去重就考慮 (city, job) 聯(lián)合索引。同時(shí)應(yīng)結(jié)合實(shí)際查詢中的過濾列、排序需求來綜合設(shè)計(jì)。12.6 為什么 group by 能聚合而 distinct 不能因?yàn)?distinct 是面向整行結(jié)果集去重的關(guān)鍵字功能定位在“去掉重復(fù)行”group by 是分組子句核心作用是建立分組上下文再配合聚合函數(shù)對(duì)每一組進(jìn)行計(jì)算二者功能邊界不同。十三、總結(jié)與回答模板回到文章開頭的高頻面試題。比較穩(wěn)妥的回答方式是distinct 和 group by 在“簡單去重”這一目標(biāo)上可以等價(jià)實(shí)現(xiàn)而效率高低主要不取決于關(guān)鍵字本身而取決于去重列是否有索引、是否需要聯(lián)合索引、去重后的基數(shù)多大、臨時(shí)表和排序是否落盤。只有去重需求且語義清晰時(shí)優(yōu)先用 distinct去重之后還要聚合、分組過濾或匯總統(tǒng)計(jì)時(shí)用 group by。優(yōu)化時(shí)先看執(zhí)行計(jì)劃和索引設(shè)計(jì)再?zèng)Q定 SQL 寫法。整體判斷邏輯可以概括為三步第一步看需求是只去重還是要聚合第二步看執(zhí)行計(jì)劃是否存在全表掃描、臨時(shí)表、filesort第三步看索引能不能用覆蓋索引或聯(lián)合索引把去重成本降到最低。大多數(shù)場(chǎng)景下distinct 和 group by 的性能差距遠(yuǎn)沒有“索引不合理、臨時(shí)表落盤、排序字段沒有索引”帶來的影響大。掌握這個(gè)分析框架遠(yuǎn)比記住“誰更快”的結(jié)論更有價(jià)值。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
两女互慰AV高潮喷水在线观看| 婷婷三区| 天天做日日做天天欢。| 一本大道青青| 五月天精品| 密臀在线视频| 亚洲国产精品乱码在线观看| 国产乱伦性爱区| 青青草十区九区爱夜| 9久在线视频只有精品| 一二三区精品视频| 六月丁香网| 久久久久久久久久久免费精品| 加勒比性爱成人在线| 日本性爱不卡视频| 八戒午夜福利理论片| 草久在线| 日夜尻逼网| 亚洲图片偷拍视频区| 99re这里只有精品2| 欧美 综合 亚洲| 加勒比久久综合网高清| 天天干夜夜鈤| 97这里有精品| 国产免a费看黄片在线| 69人妻精品丰满熟女区| 午夜超爽| 精品免费1| 日韩精品-原创伙伴| 久久最新免费视频23| 青娱乐国产盛宴视频| 男女啪啪啪18禁网站| 无码视频一区二区| 久久久久13| 色综合久久av| 日韩一999精品| 日本欧美成人片AAAA| 天天综合,91入口| 在线黄页看毛片| 久久欲| 一本色道人妻久久| 91观看 国产白丝| 992大香蕉| 久久久免费高清中文视频| 欧美综合第一| 色呦呦、国产精品| 宅男91视频在线播放| 操操AV电影| 亚洲国产高清福利视频| 麻豆国产97在线| 日本成人在线不卡一区二区三区 | 97亚洲综合电影| 精品人妻一区二区视频| 97色碰| 黄色片,com| 亚洲激情久久久伊人综合| 91欧美少妇| 天天天肏屄肏屄肏屄欧美欧美| 色色九区| 人妻内射一区二区在线视频| 亚洲黄色影视| 亚洲美女30b| 久久性生大片免费观看性| 韩国国产欧美情侣视频在线| 国产欧洲精品亚洲午夜拍精品| 天天摸天天插天天日| 97超级久久强资源| 少妇内射www在线观看视频| 日本美女性生活久久久久久久| 日本日皮视频逼| 天天激情综合站| 操逼片国产| 亚洲日韩精品在线播放| 欧美色棕合| 日本精品人妻少妇一区二区| 欧美视频中文字幕区| 日韩免费看在线黄色片| 青青草精品| 冬京热男人的天堂| 蜜臀va69| 乱伦强奸区日韩| 国产诱惑| 人妻丰满熟妇av无码区蜜桃| 毛片久久| 日本99一区二区| 四虎免费在线播放| 久热影视| 禁止观看美女黄| 黄色操人| 色婷婷香蕉| renqi久久久久久久久久久久| 久久精品国产免费观看99| www.激情| 东京热大香焦| 国产精品久久天天干| av资源在线观看少妇| 日日操免费视频| 91色久| 久久综合乱子伦国产免费| 久久华人网| 亚洲图片日本AⅤ欧美在线| 天天干,天天日| 搞中出视频在线观看| 97精品国产97久久久久久户外免费| 久久这里是精品| 熟妇操花| 久久精品中文字幕无码l| 久久亚洲av成人无码国产| 欧美日韩第一页| 98色网| 久久熟女久| 亚洲妇色| 天天躁日日躁狠狠狠躁| 中国乱伦一区二区| 亚洲自拍欧美色综合| 天天影视色香欲综合网小说| 亚 欧 美 综合| 91日产欧美| 九九九精品成人免费视频小说| 国产又猛又粗又爽又黄| 国产夜夜艹| 国产一级内射高清视频| 中文字幕在线播放2中文字幕在线观看2| 亚洲。天堂。日本在线观看| 大象AV在线| 人人色97| 人妻精品免费一二三区| 日本一区二区三区精品| 久久激情五月| 粉嫩国产精品久久粉嫩| 秋霞操逼片| 69精品久久久久中文字幕| 少妇三P| 国产高清无码一区三区二区| 天天看高清麻豆| 久久久四区| 午夜福利免费精品视频| 日韩9999| 国产成人精品日本亚洲语言| 国产精品久久久久久久久AV大片| 丁香六月婷婷综合| 人妻夜夜爽天天爽三区麻豆AV网站| 亚洲激情AV| 97色97好| 日本肉体xxxx裸交| 中文字幕蜜乳av| 综合网~91综合网| 国产91乱伦| 高潮9999外国| 日韩少妇丰满亚洲| 久久亚洲婷婷| 日本性爱视频一级| 国产剧情在线| 超踫中文字幕| 夜夜影视四色| 久久久精品网站| 伊人玖玖网| 中文字幕日本久久| 久久一二三四| 黄色工厂这里只有精品| 欧美性爱1080p| 久久水蜜臀亚洲AV无码精品| 人看人人摸人人操| 天天谢天天干| 日韩无码视频黄色| 国产精品久久久999| 日本熟妇人妻中出视频| 亚洲高清自拍| 男人下部插入女人下部| 大香蕉一区二区在线观看.| 欧美日韩日产免费网站看| 亚州欧美色图| 精品二区三四区五电影 | 黄片aaaaa一区| 午夜男人的天堂| 大香蕉黄色一区| 小说区 图片区色 综合区| 91爱做| 男人的天堂2018东京热啪啪啪| a一区二区三区乱码在线| 竹菊一区二区三区AV线| 九九国产热| 亚洲熟妇乱女区二区三区| 亚洲偷拍自拍在线视频| 国产AV无码AV| 亚洲国产一区二区入口| 一级黄色性爱裸体视频| 日韩无码视频黄色| 午夜爽爽爽| 久久久天堂| 久久噜| 欧美黑人与女人91~| 五月天婷婷影院| 超碰碰97资源站| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 啊啊啊啊啊舒服| 青青草久久一区网| 亚洲91网。| 荡小穴在线观看| 五月丁香六月| 超碰av人人人| 亚洲欧美一区二区三区在钱蜜桃| 免费一级视频特黄色大片| 国产精品麻豆视频网站| 伊人五月天激情| 一区操逼日比视频| 777超碰| 91黄射| 91n处女在线观看| 久久久久久久久女黄| 日韩久草| 熟女乱伦二区| 性爱1区| 大香蕉乱伦视频网| www五月| www欧美91| 人妻-91porn| 国产精品久久99日日| 日本免费中文字幕在线| 亚洲熟女精品| 人妻日日干| 91free福利| 人人扣人人操| 中文字幕精品一区二区精品| 国产四虎在线| WWW.加勒比人妻一区不卡.com| 中文久久96| 日本黄色天堂| 欧美日韩亚洲天堂| 99久久e免费热视| 日韩性爱播放| 18一区二区三区| 免费网站观看www在线观| 91九九九逼| 超碰97在线中文| 0755午夜福利视频| 婷婷五月天久久精品视频一区二区三区 | 色哟哟综合| 性爱免费视频成人| 啊视频在线| 91露脸熟女专区| 亚洲中文日韩欧美大香蕉视频| 在线观看免费视频国产| 亚洲免费人妻在| 亚洲欧美精品一区天堂久久 | 香蕉久久精品| 久久久久久久九九九九| 亚洲图片日本AⅤ欧美在线| 一级性爱aaaa| 97色色国产视频| 日本国产二线女色| 日本东京热久久久电影| 亚洲系列第一页| 亚洲一区二区三区久久 亚洲一区二区| 天天α片| 色噜噜狠狠色综无码久久合欧美| 色欲无码人妻日韩欧美精品| 激情久久久| 都市激情人妻一区二区青青操视频| 国产精品白丝AV| 2023天天操夜夜操| 人妻熟女字幕一区二区| 激情文学小说一区二区| 福利操逼| 三级片大波波| 亚洲熟妇无码一区二区三区| 亚洲高清色综合| 欧美精品日韩久久久九| 中文字幕乱碼在线| 人人妻人人玩人人澡人人爽| 日韩丝袜二区| 欧美熟妇精品黑人巨大91| 91麻豆天美国产| 好看的久久不射无码影视影院| 色欧美在线| 中文字幕一二区二三区人妻专区| 亚洲天堂东京热| 四虎精品一区| 中国东北熟女老太婆内谢| 蜜臀AV一区二区三区激情综合| 秘书高跟黑色丝袜国产91在线| 人人操人人摸人人看人人干| 成人A片男人的天堂| 78精品| 国产日本久久免费精品| 破处bbq| 大香焦A片| 午夜福利区| 亚洲欧美日韩免费观看| av中文字幕在线熟女| 春色综合免费| 性色av婷婷久久一区二区点复制| 国产精品久久久久久9999| 欧美特大AA级黄片| 精品亚州18| 国产精品一区二区手机看片| 欧美少妇第一页| 90后性网国产欧美| 热热色国产一二区AV| 久久超碰国产一区二区三区| 激情露脸爱| 免费精品无码一级毛片牛牛影视| 999狠狠综合| 亚91网| 蜜乳av首页| 色与欲影视天天看综合网| 破苞ⅩXXX性无码动漫无码| 91色伦综合| 亚洲天堂一区二区久久| 亚洲中亚日激情视频| 欧美日韩一区二区三区四区蜜桃| 日韩人妻丝袜美腿中文| 免费一二区| 综合性视频99| 伊人国产成人av网站| 十八禁啪啦拍视频无遮挡| 好爽免费视频,| 久久综合激情| 亚洲中文字幕熟女| 亚洲成人妻日韩在线| www.色婷婷色综合| 久久夜夜| 欧美一区二区在线资源| 久草草一二三四区久久| 国产精品无码论坛| 欧洲精品一级二级精品综合视频综合| 91九色丨国产丨爆乳| 免费日韩黄片| 91中文字幕制服丝袜免费视频| 粉嫩国产精品久久粉嫩| 操我无码| 97久久网| 久久精品99久久久久久| 看日韩美女二区三区免费操逼视频| 精品国产乱码久久| 骚逼自拍99| 婷婷五月天福利| 一级日本牲交大片好爽在线看| 欧美激情黑人| 青青伊人久久| 九九热九九热| 日本在线不卡一二区| 国产无码精品成人| 欧美淫乱视频| av麻豆啪啪| 五月花婷婷| 国产一级作爱毛片| 日韩免费簧片| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 无码精品一区二区三区潘金莲| 97人人爱人人乐| 曰本熟女视频| 欧美熟爽综合| 日韩人妻一区二区精品| 欧美日韩免费性爱| 大肥女高潮bbwbbwhd视频| 941超碰| 久久a久久| 99精品成人免费看| 欧亚乱色熟女一区二区| 国产乱伦亚洲| 91色人妻| 免费A片三p视频| 性欧美91| 懂色Av一区二区三区| 伊人aaa| 99精品热| 校园春色欧美色图| 嗯嗯嗯啊啊啊在线免费观看| 五月婷婷色色| 99综合网| 成人 日韩欧美一区| 国产激情av女片自拍| 国产一区二区三三视频| www久久国产精品| 97综合久久| 91色婷婷综合久久中文字幕二区| 91熟女丨91老女人| 啊啊啊啊好疼| 国产精品美女视频诱惑| 91九九| 欧美国产婷婷久久| 91日韩国产欧美亚洲另类精盘州至城都| 欧美大色交| 黄色十八禁| 欧美综合网1| 亚洲日韩久久精品一区| 狠狠做深爱婷婷久久二区| 欧美日韩天堂| 99精品综合久久久久五月天| 91久热| 97色操| 久久久久女教师免费一区 | 国产Av超碰| 久久亚州精品成人Av无| 国语国产操逼伊人AV网| 午夜福利免费精品视频| 涩五月婷婷| 屌逼麻豆| 青青草五月天| 丰满欧美放荡少妇在线| 91五十路| 国产成人无码a| 男女激情黄色网址| 9999久久久久| 日韩激情视频| 久久久精选| 97色97干| 超97在线精品视频| 97干日韩| 玖玖草久草99蜜月一区二区三区| 97精品视频在线播放| 91岛国动作片| 国产黄色视频久久| 超碰在线国产| 久草资源在线视频官方总站日韩丝袜美腿 | 精久久久91| 久久久精品中文字幕麻豆| 91精品国| 亚洲成人在线高清| 日日夜夜干| 性爱欧美五月| 天天干人人乐| 一本大道不卡一二三区| 国产毛片精品一区二区色欲黄A片| 天天影视网综合少妇| 操亚州| 特色a在线上| 免费公开人人操| 伊人AAA| 偷拍在线观看视频| 97免费在线观看| 性色av蜜臀av色欲aV| 熟女人妻久久中文字幕一二区| 久久深夜无码| 精品欧美乱码久| 国产性爱乱伦AV| 天堂av2019| 91激情国产| 中文字幕一区二区三区四区在线视频| 五月综合色| 日韩熟女视频二区| 人人操人人插 - 百度 - 百度| 在线观看黄色电话| 牛牛久久国产精品视频一二三| 东京热91| 国产一级做a爰大片免费久久| ss久久| 超碰久超碰久| 国产女人成人精品视频| 亚洲色图综合网| 牛牛操视频逼| 青青草吊丝| 亚洲在饯| 五月婷视频| 欧美线天码中字| 日韩在线性爱免费视频| 一区| 天天摸夜夜添无码小视频| 夜夜高潮夜夜爽高清视频一| 中文久久久| 99热免费| 97免费在线观看| 婷婷久久五月天| 91日产桃蜜| 综合一区中亚洲国产成人综合精品 | 亚洲成人av色网| 噜噜瑟| 久久性爱免费送| 精品制服美女中文一区二区三区| 最新三级网址| 操淫穴亚洲五月丁香 | 欧美日韩性爱无码| 欧美男人亚洲天堂| 无码日韩人妻av一| 久久久91福利姬| 中文自拍欧美影视| 超碰97人人乐| 曰韩精品九九无码| 中国AAAAAA黄色片| 91爱看| 激情综合二| 亚洲极品| 超碰日本97美女人妻人人玩人人爱| 大香蕉中文在线| 久久人人妻| 亚洲人体视频在线观看| 97操在线| 伊人久久婷婷| 乱伦一二三| 日韩精品怡红院| 睡产熟女乱伦| 精品视频在线观看精品| 久操在97| 婷婷色色五月| 日本一级真人黄色性爱视频| 91少妇香蕉久久精品| 国产三级电影免费观看| 久久久中文| 日韩人妻精品中文字幕| 97福利视频| 国产精品久久久啊| 青青青草伊人精品| 天天摸,夜夜摸| 国产日韩无码一区二区三区久久区| 妇女视频网站| 99精品久久| 中国AAAAAA黄色片| 超碰欧美COM| 天天日日日射| 99热欧美| 久草国产在线视频| 97碰久久| 久久久精品一区二区| 婷婷月色| 天天做日日做天天欢。| 国产9区| 校园春色家庭伦理欧美激情| 91n美女视频| 综合欧美日本三级| 一级黄色视频网| 亚洲激情综合另类| 97天天插| 色娱乐色呦呦夜夜夜夜av| 91久久久久免| 日本日皮视频逼| 日韩无码精品综合久久| 九色黄站| 亚洲天堂久久| 欧洲精品欧洲精品| 亚洲色性情三级| 深夜操逼网| 色婷婷综合网站| a天堂视频| 人妻偷拍一区二区三区| 黄色无码高清黄色无码网站| 久久久月天| av东京热男人的天堂| 97干com| 九月婷婷综合| 国产成人久久久精品免费AV| 乱伦图一区| 国内偷自视频区视频综合| 最近二区三区视频大全| 亚洲黄色电影| 99re视频在线播放青草| 亚洲熟妇AV日韩熟妇在线| 91草草草| 色老牛| 手机久操欧美综合色码| 精产国品一区二三产品| 国产性感在线观看| 骚乳在线| 欧美综合色站| 超碰碰97| 欧美乱妇狂野欧美在线视频| 97干天天| 欧美91久久久久| 丝袜美腿射精91| 欧美日韩人妻婷婷一区| 伊人在线大香蕉视频久久| 日本三级韩国三级美三级91| 欧美综合自拍亚洲综合图| 国产吹潮女在线观看| 亚洲区限制级 99| 亚洲玖玖爱| 深喉吞精| 国内毛片欧美香蕉精品| 日韩无码三级影院| 26uuu国产成人综合| 美中日韩无码| 91久久久久久| 67194无码不卡| 校园春色综合色| 中文字幕超碰CAO| 日韩av电影网站| 加勒比综合在线| 中文字幕第2页| 女性喷水高潮在线观看| 亚洲伊人a线观看视频| 成人激情无码在线视频| 国产精品久久久三级无码| 婷婷综合久久| 看黑丝美女操逼青青网站| 伊人991| 久久久免费视频18| 国产精品剧情| 无码丰满熟妇一区二区浪潮AV| 女人午夜视频777| 在线观看AV不卡| 99操| 亚洲人妻五月丁香婷婷| 国产成人 综合亚洲 天堂| 欧美系列在线一区二区| 97在线免费看| 91亚洲欧美综合高清在线| 久久久青青草| 国内毛片婷婷六月色| 五月丁香综合激情| 超碰地址97| 中文字幕在线免费观看| av绯色| 久久五月份| 很狠操| 26uuu久久| av凤凰久久久| 成人熟女区| 日本久久超碰| 国产日本久久免费精品| 91天堂视频| 精品国产乱子伦一区二区三区,精品一| 无码人妻一区二区三区色欲aⅴ| 综合久久欧美| 熟女高潮合集-永久久久-成人AV| 人妻少妇精品| 一区二区三区视频| 亚洲欧美日韩国产丝袜自拍中文| 97在线看| 激情网五月天| 性生活性生大爱77AV国产| 欧美天天干| 精品一区96| 91爱啪| 中文字幕jul-617人妻熟女| 亚洲av热热色| 老司机福利青青草| 色色色热| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 欧美一级特黄淫片在线观看| 久久精品免费| 亚洲欧美不卡线| 日韩在线观看中文字幕视频| 狠色婷婷久久一区二区三区_| 男女一进一出视频久久| 日韩欧美女优电影| 偷拍盗拍亚洲色图图片| 亚洲黄色影视| 亚洲 日本 不卡| 偷窥自拍亚洲天堂网爆| 人澡逼| 国产欧美日韩精品中文| 97久久天天综合色天天综合色电影| 午夜超爽| 精品久久久不卡一区二区| 人妻一区二区三区视频| 一区二区三区男女操逼黄色小电影| 久久久蜜桃臀无码视频| 青青网三级视频| 久操免费在线| 精品91摸| 一区二区免费电影久久| 国产高清不卡视频| 久久久久免费看少妇A片特黄| 国产又大又粗又长视频在线| 国产精品亚洲无码| 狠色婷婷久久一区二区三区_| 精品高清一区二区三区三州| 秋霞福利网| 自拍大香蕉乱插| 久久久无码精品人妻二区| 欧美日综合| 久久人妻熟女一区二区| 青青草在线成人视频| 五月天婷婷在线看| 伊人991| 欧美网站免费| 少妇高潮九九九九| 97干色天堂| 2019久久久久久久久福利| 肉丝无码中文高清| 亚洲国产精品久久久久久久久久| 曰韩中文人妻视频| 久久大陆| www.99热| 黑人精品一区二区在线播放| 国产性爱欧美性爱在线 | 日曰骚久久精品| 91久精品| 国产熟女乱论| 啊啊啊网站| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 91肉片| 97频视在线| www.色99| 国产精品亚洲无码| 五月天婷婷社区| 欧美亚洲影视| 99操碰| 日韩偷拍一区二区三区| 夜夜嗨老熟女AV一区二区三区| 一区二区激情国产熟女 | 午夜天堂网| 综合一区中亚洲国产成人综合精品| 在线观看中文字幕| 夜夜免费视频| 好爽,再快点啊哈嗯嗯嗯嗯| 日韩一区二区高清在线观看的| 欧美九九九九九| 91麻豆一二三区| 77777亚洲蜜臀精品久久综合蜜臀| 国产精品久久99日日| 亚洲另类天堂| 91中出在线| 欧美猛交黑寡妇中文字幕| 亚洲1区| 手机在线视频国内精品| 放黄片放3级黄片没穿衣服| 午夜精品久久久久久久99| 高潮内射在线| 久热9| 亚洲av影院在线观看| 无码精品久久久久久亚洲| 成人开心网在线视频| 97色论| 日韩精彩免费| 天天摸,夜夜摸| 天天干人妇| 欧美人与性动交a美精品| 日语五十路和六十路亚洲国产精品| 中出20p| 亚州欧美总和| 久久人爽| 欲射影视| 色偷偷色偷偷欧美日韩| 少妇蜜汁| 91老司机在线视频免费观看| 亚洲精品男人的天堂| 亚洲制服欧美另类内射| 岛国网址国产| 国产成人精品必看| 丰满美女一级毛片在线播放| 色牛aV| 亚洲欧美不卡线| v91av| 天天伊人| 久久精品国产亚洲AV先锋| 亚洲熟女综合一区二区| 91高潮| 欧美在线天堂| 欧美97爱| 日本孕妇一区二区视频操逼免费看 | 在线播放中文字幕| 婷婷五月天色网| 久久风骚城市人| 欧美—性—交—色| 91精品网站| 免费国产视频| 亚洲伊人久久综合97| 欧美成人一级麻豆| 中国农村熟妇毛片视频| 国产亚洲精品激情| 五月丁香拍拍激情综合三级| 极品尤物自安慰| 日本肉体xxxx裸交| 久久精品国产精品亚洲艾通辽熟妇| www.99热| 亚洲日本男人天堂网| 伊人久久大香线综合无码| 久久日本熟女精品一区| 青青草日韩免费观看高清在线| 本道在线| 亚洲欧美高清| 色操逼网| 欧美一级A片在线看视频性色| 色色五月婷| 伊人影院在线理论播放| 2019AV天堂| WWW美腿丝袜香蕉中文| 丝袜美腿操av| 亚洲无码com| 韩国一级AAA| 亚洲超碰在线| 91红杏| 国产成人啪一区二区| 加勒比中文av| 国产女人高潮嗷嗷嗷叫小说| 立川理惠无码一区二区| 美国美女AV在线| 亚洲色悠悠久久88| 人人妻人人爽| 久久国产乱子伦精品免费女人| 5月婷婷6月六月丁香| 91n美女视频| 国产热av| 91这里只有精品| 可以在线观看AV的网站| 九色 人妻 大香蕉| 超碰视97中文| 91AV入口| 久久激情综合| 好舒服视频| 夜色91| 911粉嫩人妻| 久久一区,青青青青草视频在线播放| 国产精品久久久亚洲一区| 操一操摸一摸| 久久久久亚洲| 校园春色AV天堂| 操啊国产| 欧美在线播放aaaa| 天天爽天天| 九一综合网| 日日夜夜精品视频| 亚洲乱熟女一区二区三区大香蕉| 天天日日本| 亚洲黄色| 国产一区二区啪啪视频| 国产免费久久精品99re韩国| 91欧美综合| 啊视频在线| 97丝袜亚洲在线播放| 国产又黄又粗又猛大片| 99在线免费观看| 人妻喷水| 思思性爱| 天天综合网1| 国产无码三级视频在线观看| 五月激情在线| 日本久久久久久久久久| A 天堂在线观看视频| 亚洲情色一区二区三区| 欧美中文字幕日韩在线| 久久9 9 9精品| 9久热这里只有精品| 91GD.COM| 黄色成年| 亚洲AV免费在线| 欧美97av| 五月综合激情| 国产精品不卡少妇白| 亚洲精品亚洲人成人网| 国产精品伦理| 一本道综合色图| 亚州欧美在线| 九九热超碰| 久久久夜夜夜| 夜夜肏2021| 欧美色人| 成人久久无码www| 人人操人人插 - 百度 - 百度| 欧洲Au麻豆| 久久久一级| 日韩大香蕉AV影片| 亚洲一区二区麻豆影院| 国产91 丝袜在线播放00-百度| 大香蕉免费中文| 久久超碰网| 91暧暧| AV一起草在线| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 97色97好| 欧美成人A天堂片在线观看| 人妻少妇色综合| 国产精品香蕉热久久新品| 欧美在线干| 吻戏激情性巴克| 亚洲天堂男人| 久久啊啊啊视频| 久草福利在线资源站| 亚洲高潮影院| 有码免费观看| 国产理论视频在线播放| 丰满欧美放荡少妇在线| 920日本午夜免费| 亚洲黄色视频在线观看视频| 啊啊啊啊啊啊啊啊啊啊在线观看| 深夜激情无码| 精品国产乱码久久久久久蜜臀| 丰满人妻一区二区三区在线| 脫衣舞一区二区三区| 天天综合91入口| 麻豆久久久久久久久丝袜 | 亚欧中文字幕在线视频| 亚洲AV无码黄色强奸| 一区二区三区四区理论片| 另类亚洲图色| 91|九色|国产熟女| 日本东京热久久久电影| 中文字幕二区| 久久色激情一区二区三区| 欧美αv.com| 久热这里只有精品9| 四季AV综合网址| 精品国产肉丝袜在线拍国语 | 亚洲限制级| 亚洲操操| 国产精品麻豆视频网站| 啊啊啊啊啊啊在线| 欧美一级专区免费大片| 精品一区二区啪啪啪| 日韩激情啪啪啪| 伊人操| 伊人四虎综合| 午夜天堂网| 亚洲精品色| 操操逼操操逼操操逼逼| 极品销魂美女一区二区| 色哟哟av| 伊人色综合欧美| 色爱欲亚洲| 日韩欧美视频青青| 爱媛媛久久国产福利| 成人精品久久久午夜福利| 久久伊人影院| 9九九国产| 男人精品天堂一区| 99啪啪视频| 欧美极品女人的天堂| 8050无码八戒| 在线观看AV片| 影视综合无码少妇| 在线视频免费观看午夜| JuliaAnn丝袜熟女系列| 后入日本1234| 色踪合AV| 久久日本熟妇熟色高清| 精品视频专区| 久久的网站啊啊啊啊啊| 超碰97欧美在线| 色优久久| 久久久久9| 2020国产精品| 成人免费不卡在线视频| 操操操日本的逼| 国产操逼视频在线观看| 白丝被操91| 97操| 国产拍偷精品网站| 国产主播福利| 草草草视频在线免费看| 四虎精品永久在线播放| 精品在线蜜臀| 好爽免费视频| 亚洲人天堂| 亚洲综合影院| 免费A片三p视频| 午夜男女爽爽爽影院视频| 亚洲无码偷拍| 伊人专区一区二区三区| 国产乱伦性爱区| 吖在线不卡一区二区国产剧情| 人人干黄色| 亚洲 日本 国产 综合| 精品国产91av一区二区三区| 人人操人人操人人人操| 十八禁的黄污污免费网站| 人妻乱仑一区二区三区| 新版天堂中文资源8在线| 3p国产欧美99热| 五月丁香成人网| 97色五月天完| av大香蕉网站| 亚州色阁| 91白虎| 校园春色五月天| 国产欧美日本亚洲精品| 先锋色眉乱伦资源| 乱伦熟女区| 亚洲人成网www| 日本999精品视频| 精品视频久久区| 老熟女综合网| 日本人妻丰满熟妇久久久久久| 婷婷av在线中文字幕| 精品国产人成在线| 九九精品热| 啊啊啊啊啊操我视频| 欧美 熟女 日韩| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 天堂资源欧美| 亚洲熟女乱色一区二区三区久久久 | 蜜臀AV秘一区翔田千里| 国产高清MV操逼视频| 丁香六月综合激情| 亚洲色图20p| 蜜臀在线看片| 久久久久亚洲Av无码专区老牛影视 | 久久久久久大| 欧美91久久久久| 伊人久久AV诱惑悠悠| 亚洲日本激情| 亚洲操操操| 天操老女人| 夜夜躁狠狠躁日日躁av| 国产性久久久| 少妇 综合| 亚州国产成人精品女人久久| 香蕉视频欧美一卡二卡| 国产 无码 一区二区| 精品免费一区二区三区在线亚洲人成| 啊啊啊啊啊啊啊啊啊啊在线观看| 97se亚洲综合自| 中文字幕一区二区三区高清| 25国产精品免费观看| 伊人伊人LD| 国产白丝av| 高清国产av无码| 久久欧洲| 91网站18| 日韩av不卡在线观看| 综合久欧洲| 久艹日日日| 国产日韩欧美三级片| 又摸又舔在线观看网站| 97免费视频在线| 亚洲欧美一区二区三区一猛片| 91亚州欧美| 好色综合| 大香交伊人网| 精品人妻一区二区蜜桃视频| 亚洲精品性爱片| 亚洲国产综合久久久性感熟妇| 欧美另类天堂| 日韩午夜精品一区二区三区电影| 麻豆国产原创AV色哟哟 | 97干com| 中文字幕视频在线观看| 曰韩av中文字幕专区| 中文字幕诱惑制服人妻丝袜美丝袜美 | 爱媛媛久久国产福利| 青青欧洲黑| 亚洲春色欧美激情自拍| 9久久9综合| 91美女网站| 久久久999日本大片| 天天天肏屄肏屄肏屄欧美欧美| 国产综合永久精品日韩鬼片| 小骚逼被操的爽不爽| 超清福利精品视频在线| 色女综合| 亚洲啪啪视频免费| 亚洲s在线观看| 日本精品五区| 性站| 欧洲Au麻豆| 2019天天干| 旡码电影特区| 欧差乱伦二三| 国产老熟女| 无码人妻精品一区二区三区99不卡| 玖玖综合.com| 亚州欧美色图| 男人的天堂2018.| 亚洲国产成人精品久久久国产成人一区二区 | 国产小视频91| 1204人成网站色www| 夜夜影视四色| 草B在线| 久久婷婷精品| 大香蕉久久| 在线天堂999| 欧美爆乳精品一区二区| 大香蕉在线86| 一级黄色性爱A级片| 成熟熟女国产精品一区二区| 亚洲中文日韩欧美大香蕉视频| 日本高清熟女久久一区| 激情五月天丁香社区| 78m成人视线| 东京热男人的天堂网| 蜜臀无码视频在线观看| 狠狠夜色午夜久久综合在线| 欧美性爱中文字幕无线码| 欧美综合自拍亚洲综合图| 五月婷婷啪啪| 偷拍 欧美 日韩| 清清草影| 97久久超碰| 久久中文字幕不卡人妻| 中文字幕女同在线| 日韩一级片在线看| 97久久超碰| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 国产精品噜噜噜日日日| 91人妻视频在线| 欧美性爱1080p| 伊人麻豆传媒| 精品亚州18| 久久婷婷精品| 岛国在线免费视频| 久操免费视频| 亚洲综合影片| 天堂种子在线www网资源| 一级一性爱免费视频| 久草精品视频| 久久久久精| 亚洲 国产 精品一区| 亚洲牲交| 碰人碰碰人人开房人肉| 狼人综合婷婷激情四射 | 欧美手机在线综合| 精品一区二区三区最新| 美中日韩无码| 精品一区二区三区国产 | 九九无码| 国产女人和拘做爰视频| 97超碰欧美中文字幕| 亚洲天天影视色综合| 屌逼麻豆| 亚洲精品一区二区三区在线播放| 男人久久天堂| 日本高清一本二本免费不卡| 中文字幕视频2区| 六十路日本| 欧美亚洲| 欧美 精品国产制服第一页| 久热精品在线| 色网综合网| 欧美天天综| 综合网欧美在线| 你懂得91| 国产高清在线观看欧美| 欧美性爱精品七区| 亚洲久9| 少妇大屁屁| 骚逼自拍99| 国产精品密臀网在线观看| 日本天堂网| 情色AV电影| 天天做天天爱| 色婷久久| 日本性爱少妇| 国产精品久久99日日| 欧美一区二区福利在线| 国产免费一区2区3区| 天天日天天看| 嗯嗯不要 视频| 大香蕉日亚洲日本亚大 | 亚洲一区中文字幕一区| 色哟哟511老熟女| 人人操人人操人人操人人操人人操人人人11.CM | 秋霞一级视频在线观看免费| 亚欧性爱无码| 一个国产在线综合网站| 国产精品直播在线观看直播| 欧美综合网在线| 久久精品熟妇丰满人妻99| 一本色道久久综合精品婷婷| 色97欧美| 东京太热男人的天堂久久久| 欧美色亚洲色| 超碰人人干天天射| 久久精品超碰| 国产精品一二三区18| 自拍视频一区在线观看| 91美女视频在线观看| 久久99九九九九6666免费观看软件| 久久华人网| 亚洲综合在线第一页| 国产成年女人免费视频播放a| 亚洲伊人成综合成人网| 91精品人| 午夜舔阴达高潮视频免费看| 国产自制av蜜乳| 精品日韩人妻视频| 一区二区三区在线美女| 国产专区第一页| 3p国产色噜噜一区| 在线只有精品| 内射日韩大臀美女|