免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

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

SQL數(shù)據(jù)過濾核心技巧:從WHERE條件到索引優(yōu)化與安全實踐

SQL數(shù)據(jù)過濾核心技巧:從WHERE條件到索引優(yōu)化與安全實踐 用戶數(shù)據(jù)中出現(xiàn)了學(xué)生成績相關(guān)的數(shù)據(jù)庫設(shè)計正好可以結(jié)合 SQL 數(shù)據(jù)過濾的實操場景來講解。這里我先從最常用的成績單查詢場景出發(fā)講清楚過濾條件的組合與去重邏輯再看復(fù)雜查詢的優(yōu)化技巧。希望這篇的思路和示例代碼能直接幫到你。1. 數(shù)據(jù)過濾的底層邏輯先定位再輸出1.1 過濾的本質(zhì)是行級篩選數(shù)據(jù)過濾說白了就是在一張“滿是數(shù)據(jù)的大表格”里按照你給出的條件一行一行地把不需要的記錄擋在外面只保留符合條件的行。我習(xí)慣把它想象成一個漏斗漏斗口寬進(jìn)來的數(shù)據(jù)多漏斗頸細(xì)篩掉的數(shù)據(jù)多。WHERE 子句就是那個漏斗頸。這個“逐行篩選”的過程是理解 SQL 過濾的第一步。很多新手會把 WHERE 和 SELECT 的順序搞混認(rèn)為先寫 SELECT 就先生效其實數(shù)據(jù)庫執(zhí)行的時候是先從磁盤或內(nèi)存里把整張表的記錄拿出來然后用 FROM 后面的表按 WHERE 條件做逐行判斷符合條件的才進(jìn)入下一步。等到 SELECT 真正輸出的時候數(shù)據(jù)已經(jīng)是“篩選后剩下的部分”了。我剛?cè)胄械臅r候做過一張學(xué)生成績表表里有 3000 多條記錄每天要按班級、科目、分?jǐn)?shù)段導(dǎo)出一份成績單。當(dāng)時我圖的簡單直接用 SELECT 把所有列都輸出再放到 Excel 里手工篩選。后來有一次數(shù)據(jù)量突然翻到 3 萬條Excel 直接卡死逼著我老老實實學(xué) WHERE?,F(xiàn)在回頭看數(shù)據(jù)過濾這個技能越早主動掌握越好因為它是所有 SQL 查詢的骨架。1.2 SQL 執(zhí)行順序決定了你能在 WHERE 里干什么SQL 語句表面上是從 SELECT 開始寫的但數(shù)據(jù)庫的引擎執(zhí)行順序并不是按你書寫的順序來跑的。對于一條最常見的查詢來說實際的邏輯順序大致是FROM確定要從哪張表取數(shù)WHERE對 FROM 取到的每一行記錄做條件判斷GROUP BY按字段分組HAVING對分組后的結(jié)果做二次過濾SELECT挑選輸出哪些列ORDER BY排序LIMIT / TOP控制返回行數(shù)這個順序看起來枯燥但我建議你把它當(dāng)成一個“心法”來背。因為它直接決定了一個新手最容易踩的坑WHERE 子句里不能用 SELECT 里定義的列別名。比如SELECT stu_name, score AS s FROM score WHERE s 60;在 MySQL、PostgreSQL、SQL Server 里這條語句通常都會報錯“找不到列 s”因為執(zhí)行 WHERE 的時候SELECT 還沒開始處理輸出列AS s 還沒有誕生。遇到這種情況要么在 WHERE 里直接寫原始列名SELECT stu_name, score AS s FROM score WHERE score 60;要么套一層子查詢SELECT t.stu_name, t.s FROM ( SELECT stu_name, score AS s FROM score ) t WHERE t.s 60;很多人會覺得套子查詢非常啰嗦但當(dāng)你遇到復(fù)雜報表的時候這反而是最干凈的寫法因為內(nèi)層查出來的臨時結(jié)果集本身就是一張“新的表”外層可以隨意過濾它。同樣的邏輯在 JOIN 里也成立。如果在 LEFT JOIN 之后用 WHERE 去過濾右表的字段會發(fā)現(xiàn) LEFT JOIN 被“改成”了 INNER JOIN。因為 LEFT JOIN 會把右表沒有匹配的行保留下來這些行的右表字段全是 NULL而你用 WHERE 一過濾NULL 不滿足條件就又被刪掉了。這里我后續(xù)在講 NULL 時還會展開但先把這個“執(zhí)行順序決定行為”的意識建立起來。2. 條件表達(dá)式的編排從單條件到多條件組合2.1 比較運算符與“不等于”的寫法差異過濾條件最基礎(chǔ)的就是比較運算。、、、、 這五個符號幾乎沒有歧義誰都能看懂。真正容易出問題的是“不等于”SQL 里有兩個寫法 和 !。 是 SQL 標(biāo)準(zhǔn)的寫法幾乎在所有數(shù)據(jù)庫里都能用! 是編程語言風(fēng)格的寫法MySQL 里能用SQL Server 里也能用PostgreSQL 里也能用但有些老牌的數(shù)據(jù)庫或某些兼容模式下就不支持。我自己寫的時候一律用 不是因為它多高級純粹是為了減少換數(shù)據(jù)庫時的意外報錯。還得提醒一個容易忽略的值類型問題比較運算符要求兩邊的類型能互相換算。如果拿字符串類型跟數(shù)值比較數(shù)據(jù)庫通常會做隱式轉(zhuǎn)換。比如SELECT * FROM score WHERE score 60;score 是數(shù)值列60 是字符串MySQL 會先把 60 轉(zhuǎn)成數(shù)值 60再把 score 列轉(zhuǎn)成數(shù)值比較??雌饋聿挥绊懡Y(jié)果但是一旦 score 列里面的值比較復(fù)雜或者字段類型本身是 VARCHAR隱式轉(zhuǎn)換就可能造成無法命中索引這個我們在后面性能部分會重點說。2.2 NULL 的坑三值邏輯NULL 是 SQL 里一個非常特殊的存在它不表示 0也不表示空字符串它表示“不知道”或“不存在”。這就引出了一個叫“三值邏輯”的概念在 SQL 里比較運算的結(jié)果除了 TRUE 和 FALSE還有 UNKNOWN。所有對 NULL 做普通比較的表達(dá)式返回的都是 UNKNOWN被 WHERE 過濾掉。所以SELECT * FROM score WHERE score NULL;這條語句永遠(yuǎn)一條記錄都查不出來。哪怕 score 列里真的有 NULL 值也不會被匹配。正確寫法是SELECT * FROM score WHERE score IS NULL;同理如果要篩選“分?jǐn)?shù)不為空”的記錄SELECT * FROM score WHERE score IS NOT NULL;我見過很多新手在這里反復(fù)踩坑最典型的就是把 IS NULL 直接改成 NULL然后排查半天也找不到原因。這里有一個日常類比NULL 就像你并不知道一個人的聯(lián)系方式你在通訊錄里找“聯(lián)系方式等于空的人”系統(tǒng)并不知道該怎么匹配“空”不是一個具體的聯(lián)系人它只能靠“查一下聯(lián)系人這一欄是否為空”這個特殊動作來確定。除此之外NULL 還有一個算術(shù)行為任何數(shù)值和 NULL 做加減乘除結(jié)果都是 NULL不是原值。比如想要算總分時SELECT score_1 score_2 score_3 AS total_score FROM score;只要 score_2 是 NULL整個 total_score 就是 NULL。遇到這種情況要么用 COALESCE 函數(shù)把 NULL 轉(zhuǎn)成 0要么用 IS NULL 先做條件判斷把缺失的字段單獨挑出來處理。這個細(xì)節(jié)在做成績匯總時特別重要否則你會莫名其妙地發(fā)現(xiàn)“明明成績都不低總分卻不出數(shù)”。2.3 AND / OR 優(yōu)先級與括號多條件組合時AND 和 OR 的優(yōu)先級是個老掉牙但永遠(yuǎn)有人踩的坑。AND 的優(yōu)先級高于 OR也就是數(shù)據(jù)庫先處理 AND再處理 OR。這跟數(shù)學(xué)里的“先乘除后加減”邏輯很像。舉個例子。我們要篩選“三班且成績大于 60或者五班且成績大于 80”的學(xué)生SELECT * FROM score WHERE class_id 3 AND score 60 OR class_id 5 AND score 80;這樣的寫法因為 AND 優(yōu)先結(jié)果是對的。但如果漏掉了想表達(dá)的意思比如把“班級為 3 班的成績大于 60 分或者成績大于 80 分”寫成SELECT * FROM score WHERE class_id 3 AND score 60 OR score 80;它的意思是class_id 3 且 score 60 的所有記錄再加上 score 80 的全部記錄。后者已經(jīng)包含了所有班級完全不是“三班 80 分”這種窄范圍。要避免這種歧義最穩(wěn)妥的辦法就是加括號SELECT * FROM score WHERE class_id 3 AND (score 60 OR score 80);我自己的習(xí)慣是只要條件里同時出現(xiàn) AND 和 OR一律加括號哪怕有時括號是多余的。寫代碼是給人看的清晰比聰明重要。數(shù)據(jù)庫不會因為少一個括號就報錯但業(yè)務(wù)同事會因為多了一個錯誤條件而出錯誤報表兩相比較括號的成本太低了。2.4 BETWEEN、IN、LIKE 的邊界行為這三個運算符在實際過濾中非常常用但邊界行為很容易被忽略。BETWEEN 是包含邊界值的。BETWEEN 60 AND 80 實際上等價于 score 60 AND score 80。注意它不是等價于 score 60 AND score 80。我之前做成績區(qū)間統(tǒng)計用 BETWEEN 60 AND 79 表示“及格”結(jié)果 79 分的被算了進(jìn)去80 分的沒被算進(jìn)去導(dǎo)致統(tǒng)計口徑跟領(lǐng)導(dǎo)預(yù)期的“80 分以上才算優(yōu)秀”對不上來回對了好幾遍才發(fā)現(xiàn)是邊界包含的問題。IN 的作用是匹配一組固定值。比如篩選一班、三班、五班SELECT * FROM score WHERE class_id IN (1, 3, 5);這個大家都會用但它有一個非常隱蔽的坑如果 IN 后面的列表里有 NULL倒不會出錯但如果子查詢返回的值包含 NULL那么配合 NOT IN 就會出大問題。SELECT * FROM score WHERE class_id NOT IN (1, 3, 5);這條看起來是“查不屬于 1、3、5 班的數(shù)據(jù)”但如果把 1、3、5 換成從另一個子查詢得來的集合而子查詢結(jié)果里存在 NULL那么整個 NOT IN 會返回空集——不會報錯但一條數(shù)據(jù)都沒有。原因是當(dāng) class_id 4而集合里有一個 NULL 時4 不等于 NULL這個判斷結(jié)果是 UNKNOWNUNKNOWN 會被過濾掉所以一行都留不下來。如果你真的想表達(dá)“排除某些班級”而且要安全處理 NULL最好用 NOT EXISTS 替代 NOT IN這個我們在后續(xù)章節(jié)講子查詢時再提。LIKE 是模糊匹配的關(guān)鍵工具。% 表示任意長度的任意字符_ 表示一個任意字符。比如SELECT * FROM student WHERE stu_name LIKE 張%;會查出所有姓張的學(xué)生。如果想查第二個字是“三”的姓名SELECT * FROM student WHERE stu_name LIKE _三%;LIKE 還有一個轉(zhuǎn)義問題如果數(shù)據(jù)本身包含 % 或 _ 字符比如課程名稱叫“C語言_基礎(chǔ)”直接寫 LIKE %C語言_基礎(chǔ)%下劃線會被當(dāng)成通配符匹配出一個奇怪的集合。解決方法是顯式指定轉(zhuǎn)義字符SELECT * FROM course WHERE course_name LIKE %C語言\_基礎(chǔ)% ESCAPE \;ESCAPE 后面的字符表示緊跟其后的通配符按普通字符處理。這個用法用得不多但真遇到了卡住你半天的情況。因為沒人會告訴你數(shù)據(jù)里還有這些特殊字符你只會奇怪“明明有這條記錄為什么查不出來”。3. 去重過濾DISTINCT 與窗口函數(shù)的實戰(zhàn)選擇3.1 DISTINCT 只能做顯式去重數(shù)據(jù)過濾有時候不只是“去掉不滿足條件的行”還需要“去掉重復(fù)的行”。最直接的就是 DISTINCTSELECT DISTINCT class_id FROM score;這樣能查出所有出現(xiàn)的班級不會重復(fù)。但 DISTINCT 有一個關(guān)鍵限制它對 SELECT 后面出現(xiàn)的整組列做去重。什么意思呢比如SELECT DISTINCT class_id, subject FROM score;它會把 class_id 和 subject 的組合認(rèn)為是“一行”來去重。一班語文、一班數(shù)學(xué)算是兩條不同記錄因為 subject 不同所以不會被合并。如果你只是想看“有哪些班級”卻誤寫成查兩個字段結(jié)果會比你預(yù)想的多。DISTINCT 還有一個我認(rèn)為更值得注意的局限它只能去掉整行完全一樣的重復(fù)項并不能按某列去重并保留一行的完整信息。比如學(xué)生選修課表里每個學(xué)生有多條選課記錄現(xiàn)在想取每個學(xué)生最新選課的那條DISTINCT 就完全做不到。這時候就需要窗口函數(shù)。3.2 排名窗口函數(shù)的“最新記錄”過濾窗口函數(shù) ROW_NUMBER() 是處理“分組取最新”場景的利器。它可以在不合并行的情況下給每一行按分組編號。比如學(xué)生選課表 enrollstudent_idcourse_nameenroll_date101數(shù)學(xué)2024-09-01101英語2024-09-10102數(shù)學(xué)2024-09-02要取每個學(xué)生最新的一條選課記錄寫法如下SELECT student_id, course_name, enroll_date FROM ( SELECT student_id, course_name, enroll_date, ROW_NUMBER() OVER (PARTITION BY student_id ORDER BY enroll_date DESC) AS rn FROM enroll ) t WHERE rn 1;內(nèi)層查詢給每個學(xué)生按 enroll_date 倒序編號日期最新的編號為 1外層用 WHERE rn 1 過濾就拿到了每個學(xué)生最新的一條記錄。這個寫法比 DISTINCT 靈活得多因為它保留了所有原始列信息而且篩選條件可以隨意改。比如要取每個學(xué)生“第二個最早”的記錄就把 rn 2 即可。這種技巧在處理數(shù)據(jù)遷移、對賬、埋點日志去重時非常常見。同樣用“去重”這個熱詞時我還推薦另一種思路如果確認(rèn)數(shù)據(jù)里存在完全重復(fù)的行可以用 GROUP BY 把所有判斷重復(fù)的列分組再聚合其他列。比如統(tǒng)計班級數(shù)SELECT class_id, COUNT(*) AS cnt FROM score GROUP BY class_id;這既能去重又能計數(shù)一步到位。難點在于你要搞清楚“去重的鍵”是什么是單個字段還是多個字段的組合。這個決定了用 DISTINCT、GROUP BY 還是 ROW_NUMBER()。3.3 去重場景的選型建議我在實際業(yè)務(wù)里總結(jié)的選型邏輯很簡單只要整行完全重復(fù)想直接去掉優(yōu)先用 DISTINCT要看某個字段值的分布比如有哪些班級、哪些科目用 DISTINCT 或 GROUP BY 均可要按組保留一條明細(xì)記錄比如每位用戶最新登錄、每張訂單最后狀態(tài)用 ROW_NUMBER() 外層過濾要去重后還要做聚合統(tǒng)計比如按班級算平均分用 GROUP BY。這套選型邏輯聽上去很基礎(chǔ)但很多工作了三五年的開發(fā)都可能搞混。我見過一個線上報表原意是統(tǒng)計每個商品的最近一次售價有人用 DISTINCT 做出來數(shù)據(jù)錯亂又有人用子查詢做出來性能極差最后改成窗口函數(shù)一次解決。窗口函數(shù)不復(fù)雜只是平時沒有機(jī)會練手建議你在本地數(shù)據(jù)庫里建一張 1 萬行的表多試幾組 PARTITION BY 和 ORDER BY 組合很快就熟了。4. 過濾語句的性能索引、通配符與執(zhí)行計劃4.1 索引命中三件事等值、范圍、前綴過濾條件寫得對結(jié)果對但跑得很慢同樣是個大問題。我在處理慢 SQL 優(yōu)化時第一件事永遠(yuǎn)都是看 WHERE 條件能不能命中索引。只要過濾字段上有合適的索引數(shù)據(jù)庫就不用從頭到尾掃全表性能能提升一個量級以上。讓索引生效的前提主要有三個第一過濾列盡量用等值條件比如 WHERE student_id 101這里 student_id 只要建了索引直接按索引樹查找。范圍條件也能用索引但效率比等值稍低比如 WHERE score 60 會走索引范圍掃描。第二不要在索引列上做函數(shù)或運算。比如SELECT * FROM score WHERE YEAR(create_time) 2024;這條語句在 create_time 有索引的前提下依然會慢。因為數(shù)據(jù)庫要對每一行的 create_time 先執(zhí)行 YEAR() 函數(shù)計算再拿結(jié)果跟 2024 比原來的索引就用不上了。正確寫法是SELECT * FROM score WHERE create_time 2024-01-01 AND create_time 2025-01-01;這樣一來create_time 就變成了一個范圍條件索引就能正常走。第三避免隱式類型轉(zhuǎn)換。比如字段 score 是 VARCHAR卻用 WHERE score 60 去查數(shù)據(jù)庫會嘗試把 score 列的值全部轉(zhuǎn)成數(shù)值再跟 60 比這就相當(dāng)于在索引列上做了函數(shù)運算。正確做法是讓參數(shù)的類型和字段類型保持一致如果字段是 VARCHAR就寫 WHERE score 60。這三個原則不算高深但做起來需要養(yǎng)成習(xí)慣。尤其是你會發(fā)現(xiàn)很多 ORM 框架會自動幫程序員把字段包一層函數(shù)導(dǎo)致線上 SQL 慢得離譜最后排查發(fā)現(xiàn)就是這層函數(shù)把索引毀掉的。4.2 LIKE 模糊匹配的前綴優(yōu)先原則LIKE 是過濾中性能差距最大的一個點。規(guī)則很簡單WHERE name LIKE 張% -- 前綴匹配能走索引 WHERE name LIKE %三% -- 包含匹配無法走索引 WHERE name LIKE %三 -- 后綴匹配無法走索引數(shù)據(jù)庫的索引本質(zhì)上是一棵排好序的樹前綴是確定的樹可以按順序查找前綴不確定樹就沒法定位起點只能全表掃描。所以寫模糊條件時要盡量把常量放在前面把通配符放在后面優(yōu)先命中前綴匹配。如果業(yè)務(wù)需求真的需要包含匹配比如搜索姓名里含某個關(guān)鍵詞前綴匹配解決不了有兩個思路一是用全文索引MySQL 的 FULLTEXT適合大量文本場景二是盡量縮小其他先決條件的范圍比如先按班級、按狀態(tài)過濾把數(shù)據(jù)量先減下來再做 LIKE避免在小范圍里全表掃。我實際調(diào)優(yōu)過一張 1000 萬行的商品表原本搜索詞是 %手機(jī)%查詢耗時 8 秒后來業(yè)務(wù)方改了需求允許只按前綴搜索查詢耗時直接降到 0.05 秒。性能差別就是這么大。在跟業(yè)務(wù)方提方案時可以優(yōu)先把精度要求擺在前面想辦法讓他們接受前綴搜索實在不行再考慮索引方案。4.3 慢查詢定位看執(zhí)行計劃寫 SQL 的時候誰都說不準(zhǔn)優(yōu)化器到底會怎么跑最好的辦法就是直接看執(zhí)行計劃。MySQL 里在查詢前面加 EXPLAINSQL Server 里用 SET SHOWPLAN_ALLPostgreSQL 里用 EXPLAIN ANALYZE。例如EXPLAIN SELECT * FROM score WHERE class_id 1 AND score 80;執(zhí)行計劃里最重要的字段是 type從好到差大致是 const、eq_ref、ref、range、index、ALL。ALL 代表全表掃描是性能最差的情況。還有 rows它顯示優(yōu)化器預(yù)估掃描的行數(shù)這個數(shù)字越接近表的總行數(shù)越說明過濾沒生效。我第一次用 EXPLAIN 是被一個線上報表逼的。一張訂單表 800 萬行按商戶編號和創(chuàng)建時間過濾查詢要 20 多秒。EXPLAIN 一看type 是 ALLrows 顯示 800 萬說明索引完全沒走到。后來檢查發(fā)現(xiàn)過濾字段上根本沒有建索引。建了組合索引之后type 變成了 rangerows 降到 5 萬查詢時間降到 0.3 秒以內(nèi)。從此以后凡是慢查詢我第一時間先看執(zhí)行計劃不看執(zhí)行計劃瞎優(yōu)化就是盲人摸象。5. 動態(tài)過濾條件的安全底線SQL 注入的攻與防5.1 注入是怎么發(fā)生的字符串拼接數(shù)據(jù)過濾既然經(jīng)常要處理動態(tài)條件比如用戶在前端輸入一個班級名稱后端拼接成 SQL 去查那就必須正視 SQL 注入這個問題。雖然聽起來像網(wǎng)絡(luò)安全專題但做數(shù)據(jù)查詢的人如果不懂早晚會把線上數(shù)據(jù)搞到不可收拾。危險代碼長這樣以 Python 為例sql SELECT * FROM student WHERE class_name class_name cursor.execute(sql)如果 class_name 是用戶傳進(jìn)來的攻擊者在表單里填這一段 OR 11拼出來的 SQL 就是SELECT * FROM student WHERE class_name OR 11這個條件永遠(yuǎn)為真整張表的學(xué)生信息都會被查出來。如果攻擊者再結(jié)合 UNION 查詢其他表甚至可以直接讀取用戶表、訂單表后果不堪設(shè)想。這個攻擊之所以能成功根源在于 “用戶輸入被當(dāng)成了 SQL 代碼的一部分”執(zhí)行。過濾條件的本意是只讓數(shù)據(jù)按預(yù)期輸出但因為拼接輸入里的單引號改變了 SQL 的結(jié)構(gòu)。我早期練手寫管理系統(tǒng)時曾經(jīng)在登錄功能里直接用字符串拼接驗證某個賬號密碼sql SELECT * FROM user WHERE username username AND password password 當(dāng)時根本沒有安全意識直到后來讀到“萬能密碼”示例才冒冷汗。攻擊者在用戶名框輸入 admin --密碼框隨便填拼出來的 SQL 變成SELECT * FROM user WHERE username admin -- AND password xxx在 SQL 注釋符 -- 之后的所有內(nèi)容都會被忽略于是這條 SQL 退化成只校驗用戶名不校驗密碼。只要知道一個用戶名是 admin就能直接登錄系統(tǒng)。這就是熱詞里“萬能密碼繞過”的原理。它讓 SQL 的過濾邏輯徹底失效從一個“按條件篩選”變成了“無條件通過”。5.2 參數(shù)化查詢才是正解針對 SQL 注入最有效的防御不是寫各種過濾函數(shù)而是使用參數(shù)化查詢。它的核心思想是把 SQL 的結(jié)構(gòu)和用戶輸入的數(shù)據(jù)分開傳遞數(shù)據(jù)庫先解析 SQL 結(jié)構(gòu)再把參數(shù)當(dāng)成純數(shù)據(jù)注入而不是當(dāng)成 SQL 代碼來解釋。Python 的寫法是用占位符sql SELECT * FROM student WHERE class_name %s cursor.execute(sql, (class_name,))Java 用 PreparedStatementPreparedStatement ps conn.prepareStatement(SELECT * FROM student WHERE class_name ?); ps.setString(1, className);PHP 用 PDO$stmt $pdo-prepare(SELECT * FROM student WHERE class_name ?); $stmt-execute([$className]);我在給團(tuán)隊做代碼評審時有一條硬性規(guī)定動態(tài) SQL 一律禁止直接拼接字符串必須用參數(shù)化。因為再完善的過濾函數(shù)都有可能被繞過單引號、雙引號、注釋符、十六進(jìn)制編碼等花式變體能玩出各種花樣而參數(shù)化查詢是從語法層面杜絕了注入的可能性。這里有個小技巧如果一個查詢語句里既有固定條件又有用戶可控的排序字段、表名這種無法參數(shù)化的部分那就要單獨做一個白名單校驗而不是盲目拼接。比如排序字段只能從 name、score、create_time 里選就在代碼里先校驗后再拼進(jìn) SQL。5.3 過濾條件的權(quán)限邊界最后補(bǔ)充一點數(shù)據(jù)過濾不只是技術(shù)層面的 WHERE 條件還隱含了權(quán)限控制。一個普通的業(yè)務(wù)查詢?nèi)绻脩魝髁?class_id 1后端應(yīng)該同時帶上當(dāng)前登錄用戶的查看權(quán)限范圍。比如只允許查看自己所屬班級的數(shù)據(jù)那 SQL 就應(yīng)該是WHERE class_id %s AND region %sdata_filter 的粒度越細(xì)越能防止“越權(quán)查詢”。我見過不少系統(tǒng)功能看著都有但接口沒有做行級權(quán)限過濾導(dǎo)致一個普通用戶傳入大范圍的條件就能把全公司的數(shù)據(jù)拉出來。這類問題在數(shù)據(jù)層面比 SQL 注入更難發(fā)現(xiàn)因為 SQL 本身沒有語法錯誤只是少了一個條件。6. 常見問題速查與排坑實錄6.1 過濾條件常見錯誤速查表錯誤寫法問題表現(xiàn)正確寫法WHERE score NULL查不到記錄WHERE score IS NULLWHERE class_id NOT IN (子查詢有 NULL)返回空集WHERE NOT EXISTSWHERE YEAR(create_time) 2024索引失效慢查詢WHERE create_time 2024-01-01 AND create_time 2025-01-01WHERE name LIKE %關(guān)鍵詞%全表掃描數(shù)據(jù)量大時極慢盡可能改為前綴匹配或配合其他等值條件縮小范圍WHERE class_id 1 OR class_id 2 AND score 80結(jié)果集不符合預(yù)期WHERE (class_id 1 OR class_id 2) AND score 80WHERE s 60s 是 SELECT 別名報錯找不到列WHERE score 60 或嵌套子查詢SELECT DISTINCT col1, col2組合去重單列不重復(fù)明確需求按需選擇列這張表是我做內(nèi)部分享時一直保留的每次講數(shù)據(jù)過濾總有人能從里面找到自己剛踩過的坑。6.2 我踩過的三個真實案例第一個案例是成績匯總時大量 NULL 導(dǎo)致總分為空。當(dāng)時導(dǎo)出的成績表里缺考學(xué)生的成績是 NULL不是 0。我用最簡單的方式去算總分結(jié)果缺考學(xué)生的總分為空整個排名表錯亂。后來我在匯總前先做了 COALESCE(score, 0)才算對。第二個案例是 NOT IN 的 NULL 陷阱。查詢某個班級的補(bǔ)考名單排除掉一些特殊狀態(tài)的數(shù)據(jù)子查詢返回值里有一個 NULL整個查詢結(jié)果為空我一度以為是數(shù)據(jù)被誤刪了排查了兩個小時才發(fā)現(xiàn)是 NULL 的問題。從那以后我寫 NOT IN 之前都會下意識檢查子查詢結(jié)果是否存在 NULL。第三個案例是 LIKE 模糊搜索導(dǎo)致報表超時。當(dāng)時數(shù)據(jù)量 500 萬搜索姓名的 %XX% 寫法約 6 秒才能出結(jié)果前端一直轉(zhuǎn)圈。后來把搜索需求改成了前綴匹配響應(yīng)時間降到百毫秒級別同時把搜索詞做了長度和白名單限制。有時候不是你 SQL 寫得不好而是業(yè)務(wù)方的需求本來就可以調(diào)整優(yōu)化。6.3 數(shù)據(jù)過濾的調(diào)試方法調(diào)試過濾條件時我有幾個固定的操作習(xí)慣先把 WHERE 條件摘出來單獨跑一遍看返回行數(shù)是否符合預(yù)期。比如疑似多查了數(shù)據(jù)先確認(rèn)條件數(shù)量再分析哪個條件放得太寬。用 EXPLAIN 看執(zhí)行計劃和預(yù)估行數(shù)確認(rèn)過濾條件有沒有命中索引。這是排查“慢”的唯一可靠手段不要憑感覺猜。對復(fù)雜條件從內(nèi)到外拆分驗證。比如多層子查詢先查最內(nèi)層的結(jié)果集再逐層往外查每查一層都停下來看數(shù)據(jù)是否符合預(yù)期。這個習(xí)慣能幫你快速定位是子查詢寫錯了、還是內(nèi)外層關(guān)聯(lián)條件沒帶全。我自己在處理數(shù)據(jù)任務(wù)時還會用臨時表分步處理先 SELECT 到臨時表再對臨時表做過濾和二次加工。這種方式雖然多寫幾步但每一步的結(jié)果都看得見出了錯容易追蹤。等邏輯完全驗證正確后再考慮合并成一條復(fù)雜 SQL 去做性能優(yōu)化。收尾一個小技巧最后分享一個我常用的實用習(xí)慣復(fù)雜的過濾條件建議盡量寫成“范圍條件”的形式不要把邏輯全部堆在 OR 里面。例如篩選指定班級、指定科目、指定分?jǐn)?shù)段優(yōu)先寫成多個 AND 條件拼接而不是每個值都用 OR 窮舉。這樣優(yōu)化器更容易命中組合索引SQL 可讀性也更強(qiáng)。數(shù)據(jù)過濾這個主題看起來是最基礎(chǔ)的 SQL 功能但真正寫好的關(guān)鍵在于對數(shù)據(jù)本身的敏感度——你知道哪些列可能為 NULL哪些字段存在特殊字符哪些條件能走索引。多練多想多記錄排坑經(jīng)驗這些積累會慢慢變成你的肌肉記憶。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
爱iii做iiii日日| 九九热视频在线观看| 五月丁香婷婷激情四射迷人| 丁香五月激情婷婷婷婷在线观看| 99久热在线精品| 三级三久久线久久99久目本WW| 播五月婷婷开心| 欧州色色| 99热大片| 婷婷五月综合色中文字幕| 九九亚洲综合| 久久色这里只有精品| 色99色| 欧美在线97| 五月天激情偷拍| 激情婷婷| 激情久久久| www,婷婷五月天,com| 婷婷五月丁香香蕉| 狠狠色丁香乆乆| 99久久五月婷婷| 成人做爰A片免费看网站找不到了| www久久久久久久久久久| 久久婷婷五月综合色播| 六月婷婷啪啪| 久久婷婷综合五月| 99自拍视频在线观看| 玖玖综合网| 99久久66综合| 五月丁香六月婷| 这里只有久久精99| 五月婷婷很很色| 99成人小视频| 久久成人人妻| 五月激情基地| 激情五月丁香六月婷婷| 五月天综合色| 激情五月天色色色| 欧美碰碰碰| 欧洲一区二区| 亚洲欧洲国产精品| 九九性爱网| 深爱激情四射| 激情五月天啪啪| 在线网黄| 伊人久久艹| 激情骚五月| 婷婷情色开心五月天99| 182tv992tv人之初午夜免费观看| 91a片爽| 久久98| 九九这里是免费的视频5| 五月婷婷在线综合| 可以看的av网站| 丁香五月在线观看完整版| 77799热| 色五月天堂| 婷婷激情啪啪| 草久私拍| 一本久久婷婷| 久久激情婷婷| 亚洲精品另类| 4399欧美另类视频| 久热综合| 99久久久久| 久久色五月天| 久久精彩综合视频| 狠狠操.com| 五月丁香网视频| 9|无码久久久久久| 天天综合精品| 色色欧美色色| cao久久| 激情文学 综合 九月| 操人无码| 久久综合九九| 欧美成综合在线观看| 国产精品扒开腿做爽爽爽A片唱戏 青青草国产亚洲精品久久 | 99热热这里只精品996小说| 欧美五月婷婷综合| 1024婷婷综合久久五月天| 欧美激情 日韩无码 婷婷 五月天| 婷婷激情五月呦呦| 成人永久免费视频在线观看| 日韩ac不卡无码| 丁香五月久久社区| 亚洲人成播放网站| 五月丁香 啪啪| 97干97色| 婷婷久久五月丁香| 婷婷五月,偷窥偷拍网| 99九九热视频| 色情综合网| 色爆五月| 狠狠人妻色综合| 色愛综合网| www.99热国产| 婷婷六月综合基地| 9久久狠狠的| 五月天丁香久久综合 | 99ri精品在线| 无码人妻少妇色欲AV一区二区 | 久久五月天丁香| 超碰爱爱爱| 亚洲AV免费在线| 玖玖精品视频99| 五月天激情视频五月天| 日日噜噜夜夜狠狠久久丁香六月| 99热97美女| 99热国内精品| 激情婷婷综合五月少妇| 婷婷成人五月天成人文学| 少妇熟女视频一区二区三区 | 成人五月天色天堂| 黄色一级影片| 超碰成人在线免费观看| 五月天另类综合网| 激情五月天色色网| 婷婷自拍| 伊人五月成人| 国精产品一区一区三区免费视频| 色婷婷丁香| 色婷五月| 99久久婷婷国产综合精品草原| 综合 激情 婷婷| 亚洲天99| 色亭亭五月天丁香综合AV - 百度 - 百度| 五月婷婷六月爱| 狠狠干五月天| 男人的天堂99| 天天日人人爽| 极品人妻XXXXOOOO| 日本激情ⅩXX免费视频| 中文字幕婷婷| 九九www| xx综合网| 成人免费120分钟啪啪| 天天综合色丁香| 综合网五月天123| 欧美操人| 91狠狠综合久久久久久| 激情四射网| 日本成人内射| 99re思思热这里| 激情综合无码| 久久草中文日韩欧美| 九色色| 婷婷99狠狠躁天天躁| 久久婷婷五月天激情四射| 五月天婷婷成人资源站| 丁香婷婷五月香蕉91| 久久综合婷婷| 性爱综合网| 色综合久久888| 日本色婷婷| www.丁香黄色五月天人与| 婷婷欧美激情| 色色综合视频| 九热网站| 六月丁香婷婷五月| 五月亭久久无码视频| 丁香六月高清视频| 日日夜夜九九| 天天综合中文| 四月婷婷五月丁香| 99久久婷婷| 色色色色色色色色五月先| 深爱激情丁香| 久久草中文日韩欧美| 丁香五月天中文字幕| 男人的天堂婷婷色五月| 亚洲亚洲永久无码777777| 五月丁香婷婷伊人| 17.c黄色| 婷婷五月天毛片| 五月婷婷六月丁香激情| 99久久视频| 丁香五月婷婷五月| 亚洲AV综合网| 九九黄色网| 99热这里只有精品268| 天天激情站| 337p大胆噜噜噜噜噜91Av| 久色激情| 男人天堂伊人五月丁香| 婷婷影院A成人| 色丁香六月| 九热视频免费观看| 激情五月天综合| 国产精品久久99| 亚洲情色一区| 国产视频久色| 久久 中文 日本| 色色a| 久久婷婷内射| 免费视频WWW在线观看网站| 欧美色播综合在线观看| 欧美婷婷丁香五月| 久久这里只有精品热在99| 伊人激情| 日韩熟女啪啪视频| 情色五月天网站| 天天爽夜夜爽夜夜爽精品| 久久综合五月天| 婷婷六月色情| 婷婷丁香五月天激情| 狠狠狠狠狠| 婷婷五月天com| 91色五月在线观看| 色啪网| 五月花婷婷最新| 婷婷五月欧美AA片免费| 精品成人久久久久久久_一二三四视| 婷婷五月天色色| 婷婷激情五月| 综合噜噜| 天天综合天天玩夜夜玩天天玩夜夜玩| 亚洲无码播放| 婷婷色色欧美| 婷婷综合九色伊人| 久久五月天综合| 色婷婷欧美在线| 日韩伊人大香蕉| 99视频只有精品| 色99热| 婷婷性爱五月天丁香网| 色五月综合网| 欧美97色| 婷婷九月丁香| 免费视频这里只有精品| 五月丁香婷婷在线综合蜜桃| 激情久久久久久久久久久| 99精品在线| 婷婷五月天激情网站| 婷婷伊人网| 日韩十国产极品久久| 免费啪啪亚州视频| 亲子乱av一区二区三区的| 日日爽日日| 五月色色激情网| 第二色AⅤ| 激情99热| 2015WWW永久免费观看播放| 婷婷五月花| 久久99视频| 婷婷五月天免费视频| site:wpjngj.com| 91在线日本| 99九九这里有免费视频| 国产精品国产成人国产三级| 激情综合五月| 五月天婷婷色色| 五月天婷婷激情综合| 五月婷婷综合网在线播放| 99久久99久久| 在线播放成人网站| 丁香5月激情网| 亚洲a片免费观看| 97自拍视频在线| 91欧美| 99热这里只| 婷婷啪啪| 五月婷婷大香蕉| 中文字幕黄色片| 91日本在线观看| 精品久热| 噜噜干日本| 久久超视频| 99 福利 导航| 影音先锋一区| 亚洲性受XXXX五月丁香| 婷婷偷拍网| 色婷婷天堂| www久久久久久久| 欧美韩国日本| 丁香婷婷影院| 激情熟女网| 色婷大香蕉| 人人操婷婷| 亚洲中文字幕AV在线| 内射爽无广熟女亚洲| 婷婷五月天激情文学| 五月丁香激情综合啪啪| 国产精品久久..4399| 99爽视频| 噜噜在线| 色约约视频一区二区三区四区五区| 激情5月婷婷| 九月激情婷婷丁香| 无码yw| 色噜噜狠狠色综合无码久久欧美| 五月婷婷亚洲综合网| 密乳视频| 亚洲精品影视| 激情婷婷狠狠干综合| 亚洲图片 丁香婷婷| 久久婷婷丁香视频网| 99re在线精品视频| 色丁香久综合在线久综合在线观看| 亚洲色a| 久久六月天| 丁香五月综合| 久久婷婷人人| 婷婷丁香五月天在线| 五月婷婷综合在线| 欧美成人一区二区三区在线视频| 五月天丁香成人社| 色色cOm| 婷婷丁香宗合888| 中文字幕无码人妻少妇免费视频| 百度4399有码精品V在线观看| 久久五月丁香| 色婷婷啪啪| 六月丁香大香蕉| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 女人被躁到高潮嗷嗷叫小| 艹色18p| 久/久精品99看9| 热成人网| 免费观看全黄做爰的视频| 97碰在线免费观看| www、色色色| 99热国产这里只有精品| 9久久网| 天天色天天爱天天舔| 人人草人人舔| 夫妻超碰在线| 吉澤明步Av一區二區| 久久人人妻| 男人天堂 久久| 欧美猛片| 欧美私人家庭影院| 国产精品五月丁香| 五月丁香在线| 激情深爱婷婷网| 久re热视频| 五月婷婷很很色| 丁香五月网站| 天天色视频| 五月激情婷婷国产精品久久久久久| 婷婷成人在线| 天天爽人人综合免费7799| 91九色中文| 永久地址 色| 国产精自产拍久久久久久蜜| 天天日天天狠狠操| 亚洲婷婷免费| 性色欲情 网站| 久久久久网站| 五月天婷婷香蕉狠狠超碰综合| 7777久久亚洲中文字幕| 丁香欧美| 香蕉久久五月| 开心婷婷五月天激情网| 香蕉99网| 亚洲操操操| 99久热在线精品99re6热| 熟女五月天久久综合| 天天爽天天| 99在线观看| 91婷婷在线| 久草九九| 亚洲成人网在线观看| 性热视频99精品| 狠狠草在线观看| 青青草大香| 久久久人人人妻丝丝丝| 色吧网综合| 国精产品一区二区三区| 久久综合五月情| 天天天添天天操| 风流少妇A片一区二区蜜桃| 天天射夜夜爽| 国产乱妇无乱码大黄AA片| 99色精品视频| 丁香五月花影院| 伊人色欲五月天| 亚洲AV成人一区二区在线观看| 99性感视频| 黄色av网站在线免费播放| 五月综合影院| 色私五月婷婷| 91久久婷婷| 婷婷丁香五月天色区| 人人艹艹艹| 26uuu亚洲欧美| 精品无码片| 色播五月天激情| 1024操逼视频| 99精品偷自拍| 激情五月天小说| 久99热在线观看| 99这里只有精品|v| 婷婷丁香在线播放| 人妻性操逼中文字幕 国产| 99亚洲天堂| 婷婷五日b| 欧美五月婷婷综合| 婷婷五月天社区| 九九热这里只有精品一| 99久久婷婷五月综合| 五月婷婷色| 婷婷伊人久久综合| 亚洲不卡| 五月丁香在线观看国产| 色噜噜狠狠色综合成人网| 久久这有这里精品| 99热免费精品| 久久成人亚洲欧美电影| 五月丁香香蕉| 天天做天天爱天天爽综合网| 妇激情基地| 久久久天堂国产精品女人| 色婷婷五月在线| 97天堂| 美女爆乳18禁www久久久久久| 9精品在线| 婷婷激情鹿城五月天| 蜜桃婷婷狠狠久久综合| 天天婷婷操| 九九美女视频| 五月婷婷六月激情| 中文av网站| 91精品综合久久久久久五月丁香| 激情小说婷婷小说| 欧美久久网| 五月综合激情啪啪啪啪啪| 欧美六月| 久久精品系列| 日韩爱操视频| 三级大香蕉网| 五月色婷婷AV| 立川无码av| 久久五月天视频| 五月久久丁香| 久久综合九色综合97婷婷| 变态另类9| 五月丁香六月综合基地| 天天精品视频在线观看视频| 99色最新在线视频| 99热99在线| www.综合久久| 色444综合网| 疯狂做受XXXX高潮A片动画| 国产色网站| 99精品在这里| 久热视频这里只有精品| 操嫩逼电影| 精品久色| 色婷婷网| 婷婷五月综合在线| 伊人激情啪啪| 丁香五月婷婷激情网| 色欲色香综合网站| 丁香五月WWW| 婷婷在线中文字幕| 久久婷婷七月丁香| 亚洲六月综合激情久久下卡| 国产熟妇的荡欲午夜视频| 99热婷婷| 亚洲欧美婷婷五月色综合| 久久婷婷综合基地| www九九| 天天操无码| 亚洲综合五月天| 天天爽夜爽| 色色哒五月婷婷六月丁香| 日日操日日射| 五月丁香六月婷婷无码| 人妻精品一区二区三区| 9精品视频在线| 黄色91在线观看| 一本九九色| 色五月婷婷伊人| 久久机热探花| 色五月婷婷操逼| 婷婷四色五月| 国产99精品免费视频| 六月婷婷无码| 色五月亚洲开心网| 丁香五月av| 国产精品成人AV在线| 日本系列_4页_777FP| 97人人做| 天天日天天操心| 香蕉人妻AV久久久久天天| 五月丁香六月片| 奇米色大香蕉| 五月色婷| 五月综合婷婷久久在线| 五月婷婷色播| 丁香六月综合激情| 九九久久偷拍| 丁香啪啪| site:feetmall.com| 天天爱夜夜爽| 色播五月丁香| 31色区视频免费看| 99热九九这里只有精品| 五月丁香啪啪综合网| 婷婷五月激情视频在线| 成人日韩欧美| 大大香蕉综合在线| 久久九九99| 九九九九九九九热| 亚洲av网站在线观看| 婷婷久草| 东京热免费视频网站| 久久香蕉网| 婷婷五月丁香色情| 五月婷婷狠狠干| 久久久天堂国产精品女人| 欧美69色| 亚洲综合网激情小说| 天天色,天天日,天天做| 欧美精品999| 我想看国产大学生口爆吞精的视频| 久婷| 五月天精品视频| 久久综合婷婷| 成人在线观看一区| 五月丁香色婷| 婷婷激情五月天网站| 天天高潮夜夜爽| 99无码精品| 夜色爱爱亚洲| 五月青青草综合| www.久热| 国产精品99久久久久久久女警| 亚洲AV影片在线观看| 人妻九九九九| 日夜夜久久| 五月天激情网站| 丁香青青五月天| 五月天激情国产综合婷婷婷就去爱| 五月激情网络| 丁香五月婷婷在线| 日本97久久久精品| 天天摸色吧天天摸色吧| 中文字幕在线免费观看视频| 色婷精品91| 丁香五月天激情小说| 五月天成人综合| 97亚洲精品| 夜夜躁狠狠| 九九热精品在线| 99精品综合| 婷婷丁香五月天综合AV| 丁香五月天综合| αv中文字幕在线观| 4438激情网| 精品成人a v无码内射| www.久久| 亚州精品色情无码A片| 亚洲色五月| 综合欧美五月婷婷| 婷婷五月天激情四射五月天激情| 成片免费播放| 伊人大综合| 风流少妇A片一区二区蜜桃| 丁香五月性| 五月丁香婷婷AV| 中文字幕 中文字幕明步 | 久久激情五月婷婷| 9999三级片| 亚洲情a| 51精品国自产在线| 国产综合色婷婷精品久久| 五月天黄色激情小说| 国产激情AV| 69综合在线| 色婷婷五月综合网| 日本一级黄色片。| 五月丁香亚洲综合网| 国产精品久久久久9999小说 | 色综合综合网| 婷婷狠狠综合网入口| 人人色性网| 亚洲亚洲人成综合网络| 开心五月婷婷六月丁香| 丁香六月激情综合| 五月天第四色开心色播| 9久久精品| 天天草天天舔| 大伊香蕉精品视频在线| 欧洲日韩一区二区三区| 久久33视频| 五月丁香婷婷激情视频| 色九月丁香婷婷蜜桃在线观看| 日日操日日射| 色婷婷色丁香色欲av| AV性爱在线| 亚洲成人av在线播放| 亚洲精品大片| 丁香五月影院| 丁香婷婷综合激情五月色| 色色色色色色97| 色播jjjj| 婷婷五月色惰| 婷婷五月天777| 中文中文在线| 婷婷五月天在线综合导航| 538在线精品| 五月天婷婷伊人| 天天爽天天爽| 免费不卡狠操美女视频网| 色射7856五月天激情四射| AV在线大香蕉| 26uuu国产色| 久久成人天| 色婷av| 免费黄色片子| 六月婷婷成人| 久久婷婷六月综合综合| 丁香五月色情| 色欲AV导航| 天堂综合久| 五月婷婷中文字幕| 五月丁香中文字幕| 婷婷丁香五月综合| 亚洲成人综合网在线免费观看| 亚洲五月婷婷| 可以免费看av网站| 欧美人人女女精品综合五月天| 久久精品婷婷| 婷婷五月天成人网站| 激情久久丁香| 亚洲高清在线| 大香蕉久久婷婷精品综合| 开心五月婷婷五月| 97欧美在线| 六月激情网| 人妻久久久久久久| 国际国外精品欧洲南美洲专区无码不卡| 亚洲在线成人| 久久综合久色欧美综合狠狠| 五月天婷婷伊人| 97色五月天| 91九九| 久久这里只有精品视频15 | 99成人网一区| 2021日韩无码| 91无码色色| 久久久久亚洲AV成人无码电影| 婷婷开心综合人妻小说网址| 色九网| 久操乱| 少妇性按摩无码中文A片| 99色视频| 婷婷五月综合视频免费播放| 丁香婷婷免费| 精品成人在线观看| 激情五月综合久久| 色啪久 | 亚洲乱码日产精品BD| 亚洲av综合网| 欧美成人色婷婷| 色五月婷婷婷婷| 性爱先锋AV| 婷婷伊人75| 激情婷婷。| www.五月婷婷久久.com| 激情丁香婷婷五月天| 91要啪| av一区二区电影免费在线观看| 97在线观视频免费观看| 久久九九免费视频| 六月丁香五月婷婷| 色偷偷五月天| 丁香五月久久| 丁香婷婷网| 五月天婷婷AV| 久超超碰| 激情綜合網址| 亚洲综合视频在线| 男人的天堂五月丁香| 亚洲成人在线五月天| 中文字幕日韩无码制服诱或| 另类的婷婷| 激情五月天激情网| 再綫Av免费視品| 久久99久久99精品免视看婷婷| 精品成人久久久久久久_一二三四视| 亚洲精品成人片在线播| 欧美人久久| 午夜成人综合| 嫩草视频观看| 99久超碰| 五月激情视频| 爱草视频在线观看| 99re这里只有精品首页| 色狠狠色噜噜AV天堂五区消防| 人妻自慰高清合集| 五月天综合在线观看| 亚洲精品色| 五月婷婷激情网| 亚洲精品亚洲人成人网| 97碰在线视频| 9有码中文| 这里只有精品1| 色婷婷丁香五月| 牛牛热这里只有jingpin| 久久se 综合网| 久久大香免费| 婷婷性爱影院| 五月丁香婷婷综合网色欲| 色九九九综合| se.久久视频在线观看| 天天操B| 26UUU一区二区| 天天射夜夜骑| 免费看成人747474九号视频在线观看| 五月天色区| 少妇性按摩无码中文A片| 天天日中文| 亚洲免费av在线| 玖玖婷婷五月天| 人妻尝试久久久久久久久久久久| 婷婷五月天伊人网| 色色99| 丁香五月婷婷欧美性爱| 婷婷性爱视频在线| 丁香五月天天| 亚洲精品国产精品乱码不99| 日本超碰在线| 91久久日日| 九色七七| 99在线看片| 九九色综合网| 激情操逼婷婷| 五月丁香婷色| 五月 丁香 欧美| 久久精品只有这| 久久久久久久人妻| 色色五月丁香婷婷综合| 婷婷五月欧美综合| 久久久久久人妻| 国产精产国品一二三在观看| 亚洲在线成人| 欧洲亚洲欧洲99久久| 涩五月婷婷| 99久久国产宗和精品1上映| 色五月自偷自拍婷婷婷婷| 日日爱678| 五月婷婷日| 亚洲亚洲人成综合网络| 欧美精品999| 婷婷在线免费| 免费看欧美成人A片无码| 成人午夜免费电影| 久久综合天天综合| 国产乱妇无乱码大黄AA片| 久久五月情| 天天干肏夜夜| 五月婷婷激情五月| 性欧美日本| 丁香五月婷婷激情中文| 成人午夜天| 99久久极情精品一区| 夜夜撸日日操| 丁香婷婷网| 欧美va在线| 91黄色五月天视频| 噜噜色五月| 色999五月色| 99九九热视频免费| 五月丁香淫淫婷婷婷| 婷婷色五月激情| 色婷婷a| 丁香六月无码播放| 丁香婷婷久| 婷婷激情六月中文| 超碰成人免费| 久热这里只有精品在线观看| 影音先锋噜一噜| 狠狠色丁香婷婷久久综合| 国产精品五月天婷婷| 人五月天婷婷喷水| 无码激情精品色婷婷久久久久| 婷婷五月成人| 久久综合九九| 久久9视频| 九九综合色| 日日操天天操| 久久机热这里只有精品免费视频| 色色五月天婷婷| 99久久精品亚洲综合| 激情综合五月.....| 日韩精品AV一区二区三区| 激情q青青草在线婷婷| 色五月激情综合网| 538在线| 日韩精品AV一区二区三区| 思思久久99热| 蜜臀AV在线观看| 五月婷婷狠天天色综合| 五月丁香六月片| 五月婷婷中文网| 另类小说五月天| WWW、日本色丁香co m| 天天射影院| 激情五月亚洲综合网| 人妻丰满精品一区二区A片| 色五月aV| 久99婷婷色综合| 日日综合网| www.com色播五月天| 99久在线视频| av婷婷丁香 六月| 国产一二区爆乳_1国产日韩一区二区三-成人AV | 五月婷婷色色色| 色情·com| CHINESE熟女老女人HD视频| 亚洲综合婷婷五月| 嘿嘿视频免费看9| 在线另类视频| 久久久久久久综合狠狠综合| 日韩av手机在线观看| 丁香婷婷色五月天| 婷婷五月丁香亚洲| 丁香 亚洲 久久| 九色自拍| AV大片在线播放| 青青草激情网| 99热这里只有精品26| 国产成人精品亚洲线观看| 色99热| 综合久久高清| 国产精品91抖高| 色五月中文网| 婷婷五月天另类视频| 99欧美精品99日本精品| 久久久ww| 五月婷婷,六月激情| 人人爽欧美婷婷久久久五月丁香 | 天天曰夜夜爽| 91麻豆国产三级精品福利在线观看 | 91婷婷| 久草热在线视频| 五月婷婷网站| 中文字幕av在线| 午夜微拍福利| 超碰精品在线| 99这里只有精品|v| 婷婷激情在线| 超碰色碰碰| 中文字幕在线不卡| 79色色色色| 五月天久久久| 97精品自拍视频| 日日夜夜婷婷| 九九热在线精品视频| 丁香五月在线自慰| 婷婷五月综合中文字幕| 五月天婷久精视频| 色情五月天首页| 九九九九无码| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 黄色笑话深爱激情网丁香五月婷婷啪啪啪啪啪 | 激情综合4月| 伊人九九热| 亚洲精品久久久久久久久久飞鱼 | 可以免费看的av网站| 大香蕉婷婷五月天| 密臀av无码人妻精品| 四LLL少妇BBBB槡BBBB| 久久综合九九| 这里只有精彩视频| 丁香五月婷婷激情蜜桃| 丁香婷婷激情综合五月激情| 性爱五月丁香| 国产精品人人做人人爽人人添| 久久9精品| 激情网五夜婷婷| 色五月琪琪| 久久五月情| 婷婷五月丁香四射| 色欲av伊人久久大香线蕉影院| 日本色视| 婷婷狠狠五月综合| 欧美婷婷五月无砖| 国产肏屄大片| 91xxxx九色| 日日操夜夜操中国无码| 99视频| 99热在线观看| 国产成人+综合亚洲+天堂| 五月天综合网| 国産精品| 亚洲综合1024| 91九色欧美| 婷婷色片| 久久丁香五月天| 日韩aaaaa| 天天日本夜夜谢| 欧洲色| 久久婷婷五月| 九九热在线精品视频| 国语精品探花| www激情com| 丁香五月天天高清在线| 亚洲va欧洲va国产va不卡| 丁香婷婷六月激情综合| 五月婷婷激情四月| 天天色官网| 天天天久久人人人合| 日本狠狠爽| 天天干天天操天天爱| 婷婷5月天av| 五月六月丁香婷婷在线观看| 五月婷成人网| 婷婷五月开心中文字幕色| 六月天无码网址| 亚洲欧洲自拍图片专区五月天| 九九无码AV| 欧美性生交A片免费看| 狠狠久久婷五月综合色| 久操香蕉| 色伊人啪| 色婷婷丁香| 五月丁香综合伦理片| 袁子仪视频观看| 五月天婷婷久色| 夜夜夜夜夜操| 色婷婷日本| 六月综合婷婷开心伊人| 激情综合婷婷| ZpRSw| 4438国产免费看| 欧美色图天堂网| 天天拍夜夜撸| 天天日,天天插| 色婷婷丁香五月| 人妻综合网| 丰满少妇猛烈A片免费看观看| 亚洲色无码A片一区二区麻豆| 天天久久婷婷| 五月天婷婷基地综合网| 九九免费精品在线视频| 婷婷五月综合啪| 丁香九月婷婷综合| 五月丁香成人| 亚洲综合网在线| 亚洲婷婷91丁香| 久草久青福利| 五月婷婷色播| 色婷婷激情| av一区免费看| 成人在线不卡| 亚洲、热| 思思久热6| 久草五月| 九九热青青草| 久久综合婷婷| 九九精品热| 六月丁香五月天| 久久男人网婷婷| 中美日韩成人在线| 男人的天堂五月丁香| 99久在线精品99re8热| 色婷婷丁香女女| 人妻综合网| 婷婷五月天第四色| 99热99色| 热久91| 婷婷五月激情网站| 99热这里| 79精品视频在线观看,| 久久综合综合综合| 俺五月| 日韩久热| 人人草碰| 国产精品噜噜在线视频| 91精品久久久久久| 婷婷六月偷拍| 狠狠色丁香99| 久月婷婷| 亚洲午夜一区二区| 狠狠爱丁香婷| 再綫Av免费視品| 久激情网| 人妻中文av| 激情久久综合网| 深爱综合网| 99热在线观看精品| 人人视频人人干人人做| 国产午夜精品AV一区二区麻豆| 99自拍视频在线| 99久在线精品99re8热| 五月婷婷 激情按摩| 丁香色色网| 日本九九视频| 色青五月天| 婷婷亚洲五月色综合| 亚洲精品一区无码A片| 色色免费网站| 日本啪啪天堂| 亚洲在线综合| 99热这里只有精品55| 欧在线一区| 亭亭五月天黑人2014| 日韩无码专区| 第二色AⅤ| 丁香六月婷婷久久综合| 狠狠色噜噜狠狠色噜噜噜999| 天天干天天干天天| 亭亭五月基地在线| 激情五月天小说|五月天开心激情网|亚洲精品国产自在现线|黄色五月天 | 噜噜干日本| 丁香色色网| 五月丁香六月激情综合| 9999三级片| 九色视频91| www.久久爱.com| 色5月婷婷色| 欧美狠狠色| 婷婷欧美激情综合| 这里只有精品在线免费视频| 久久婷婷综合五月| 午夜丁香五月天综合| 亚洲精品a成人在线播放| 激情 婷婷 丁香五月天| 激情色色| 激情四射五月天偷偷看婷婷| 99热在线播放| 六月色日韩| 少妇大叫太大太粗太爽了A片| www.av视频xx999.com| 青青久在线视频免费观看| 婷婷免费无视频| 五月综合激情啪啪啪啪啪| 狠狠操狠狠干综合| 91美女艹逼网站| 九九热精品视频在线观看| 小色小蛇伊人婷婷色香五月| 九九碰九九爱97超| 六月亚洲婷婷6月中文字幕| 国产色色网站网址| 国产肥白大熟妇BBBB视频| 97人妻碰碰碰久| 婷婷五月天伊人| 天天干天天爽天天爽| 黄色AAAA韩国guochansanji| 亚洲天天操| 午夜成人综合| 99久在线精品99re8| 色五月成人在线| 99啪视频在线观看| 91九九| 激情综合色五月六月婷婷| 九九Y精品热播| 超碰人人干| 丁香婷婷免费| 人人97操| 色99网站| 国产欧美婷婷| 超碰99成人在线| 丁香婷婷91在线观看视频| 丁香六月色婷婷欧美| 色九月综合| 国产激情在线| 色婷五月天亚洲| 丁香花狠狠婷婷亚洲中文字幕| 五月婷婷丁香大陆免费| 在线综合婷婷| 久久人操-久草婷婷-成人AV| 九九香蕉网| 免费观看的AV| 婷婷五月综合啪| 成人综合网站| 美女五月狠狠| 五月丁香五月激情综合色综合| 4399欧美另类视频| 婷婷深爱五月天| 婷婷金品综合视频| 五月激情综合网| 影音先锋AV资源男人站| 色婷婷综合网站| 国产片色| 97色色色色| 久久九精品| 九九热在线视频| 激情性爱五月| 天天操天天爽天天爱| 五月丁香激情四射综合| 99@久久@99精品视频| 激情www| 亚洲第一黄网| 日韩婷婷五月天| 超碰在线视屏| 曰韩五月丁香色婷婷无码| 婷婷五月天久久| 国产午夜一区二区三区| 99欧美| www.99日本| 久久在线视频免费观看| 五月天婷婷影院| 天天舔天天摸天天透| 美女网黄| 天天操屄网| 我要射综合| 久热这里只精品| 色播播婷婷| 婷婷色五月综合| 亚洲1区| 1024人妻| 欧美丁香五月夫妻天| 国产色五月婷婷| 情欲综合网| 婷婷色在线观看| 五月色婷婷影院| 黄色五月婷| 人妻第九页| 国产FREESEXVIDEOS性中国| 快色t v在线入口| 婷婷色色播五月天| 国产成人VA| 欧美丁香五月97色| 六月婷欧美| 99re热在线视频观看| 婷婷五月丁香图片人人操| 精品一二三区久久AAA片| 五月丁香亭亭| 91九色国产| 色综合九九| 日韩九九| 婷婷六月伊人| 婷婷综合网站| 26uuu亚洲欧美另类| 婷婷五月天伦理| 狠狠狠狠狠狠狠狠狠狠狠色宗合图片| 婷婷天堂综合| 中文字幕在线日亚州9| 日本久热| 五月天婷婷綜合院| 亚洲综合无码| 婷婷丁香久久| 在线成人网站| 26uuu欧美日韩| 色之综合网| 丁香色情五月综合激情| 色色综合成人网| 这里只有精品热| 思思久久99热| 色五月丁香一区在线| 久久久久久草黄色片AV在线观看| 五月婷婷六月丁香| 五月天色婷婷激情综合| 欧美综合五月丁香六月婷| 亚洲精品99| 久久99热这里| 天天噜天天爱| 亚洲国产色色| 婷婷成人视频| www,com,五月色色| 爱久综合| 久久曰曰| 亚洲乱码日产精品BD| 五月婷婷亚洲天堂97色婷婷| 一级韩国产精品毛| 五月丁香婷婷综合网色欲| 97碰碰在线观看视频| 激情五月天视频| 99re熱| 五月丁香六月激情狠狠| 99热6这里只有精品| 开心网五月色婷婷| 日本色色色| 高潮毛片又色又爽免费| 影音先锋91网站在线观看| 9 1大香蕉| 色伊人婷婷| 丁香五月情色| WWW.色婷婷.COM| 激情视频综合| 高清一区二区三区日本久| 苗黎美女四级成人版一级二级毛片| 大香蕉在线观看9| 91色久| 色吧五月婷婷六月丁香| 婷婷狠狠色| 欧美性爱五月天| 一本色道久久88加勒比| 五月狠狠| 五月婷婷亚洲综合网| 欧美综合激情五月天| www.婷婷六月天| 五月天久久成人| 天天视频亚洲| 婷婷在线视频| 91 久热| 91人操| 亚洲精品五月| 伊人久久婷婷| 色五月激情| 久久五月天丁香花| 、激情六月天| 婷婷五月天久久| 亚州色色色| 一区二区传媒视频| 天天激情综合| 99精吕视频在线观看了| 色婷婷六月天| 九九99热| 色婷婷视频| 久久 婷婷 五月天| 色色999三级片| 五月网激情| 丁香六月情| 三十熟女| 国产亚洲在线观看| 婷婷丁香五月亚洲综合网在线视频观看| 99九九久久| 丁香五月大香蕉AV| 婷婷丁香五月天综合网| 婷婷五月天综合网| 免费操超碰| 欧美色小说婷婷| 婷婷色在线观看| 狠狠色婷婷7777久综合| 人人爽人人爽人人爽人人爽| 碰97久久| 色色色色色日韩午夜激情 | 成人精品在线| 五月婷婷碰碰| 激情com| 九九操操| 九九 激情 网| 99精品7| 最近中文字幕大全免费版在线| 伊人久久大香网| 啄木鸟丝袜美女福利视频| 99ER热精品视频| 狠狠狠婷婷五月综合| 久久停停超碰| 国产综合丁香五月天| 五月婷婷九| 国产偷人爽久久久久久老妇APP| 亚洲av成人在线| 久久大香蕉同僚| 色五月婷婷影院| 日日爽夜夜爽| 五月天色软件| 天天成人综合视频| 精品久久久91久久影视网| 五月丁香婷婷无码中文| 久久92| 五月婷婷婷综合网| 五月天综合网| 热99色| 六月狠狠综合| 丝袜熟女一区二区三区| 九九机热| 成人做爰A片免费看视频| 激情五月天之六月婷婷| 天堂无码人妻精品AV一区| 五月天激情站| 另类视频五月天| 婷婷97狠狠干| 亚洲亚洲人成综合网络| 久99视频在线观看| 亚洲激情网| 五月丁香网av| 亚洲视频在线观看| 嫩草综合网| 婷婷97色|