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

ARTICLE DETAIL

資訊詳情

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

SQL語(yǔ)法實(shí)戰(zhàn)手冊(cè):從高頻查詢到注入防御與性能優(yōu)化

SQL語(yǔ)法實(shí)戰(zhàn)手冊(cè):從高頻查詢到注入防御與性能優(yōu)化 相信不少人跟我一樣SQL語(yǔ)法這門課上學(xué)時(shí)候背了工作之后忘了真到寫查詢的時(shí)候全靠搜索引擎和過(guò)往代碼片段拼湊。尤其是你手里的數(shù)據(jù)庫(kù)還不止一種今天對(duì)付MySQL明天切換SQL Server后天領(lǐng)導(dǎo)又扔過(guò)來(lái)一份PG的慢查詢?nèi)罩尽@時(shí)候最需要的不是一本完整的SQL教程而是一篇能直接對(duì)照著干活的語(yǔ)法實(shí)戰(zhàn)筆記。這篇文章就是干這個(gè)用的。我會(huì)從最常用的SELECT語(yǔ)法全景講起把去重、分頁(yè)、日期處理這些高頻場(chǎng)景的寫法逐個(gè)拆開(kāi)再往前走一步聊SQL注入的防護(hù)姿勢(shì)和慢查詢優(yōu)化的排查思路順手把SQL Server、MySQL、PostgreSQL這幾種主流數(shù)據(jù)庫(kù)的方言差異做個(gè)對(duì)照。適用對(duì)象是剛?cè)腴T想系統(tǒng)梳理語(yǔ)法的新手以及寫過(guò)一陣子SQL但總在細(xì)節(jié)上卡殼的開(kāi)發(fā)者運(yùn)維同事看了也能當(dāng)速查手冊(cè)。1. 先搞懂SQL的定位它不是拿來(lái)背的是拿來(lái)用的很多人學(xué)SQL語(yǔ)法有個(gè)誤區(qū)覺(jué)得把SELECT、INSERT、UPDATE、DELETE這四類語(yǔ)句背得滾瓜爛熟就算學(xué)會(huì)了。實(shí)際工作中你會(huì)發(fā)現(xiàn)這四類是骨架真正讓SQL發(fā)揮價(jià)值的是你組合使用它們的方式以及你對(duì)數(shù)據(jù)結(jié)構(gòu)的理解深度。1.1 SQL在技術(shù)棧里到底站在哪一層SQLStructured Query Language是操作關(guān)系型數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言不管是MySQL、SQL Server、PostgreSQL還是Oracle核心語(yǔ)法都遵循同一套標(biāo)準(zhǔn)。你在A數(shù)據(jù)庫(kù)上寫的SELECT搬到B數(shù)據(jù)庫(kù)上大概率能跑只是某些函數(shù)名和專用語(yǔ)法會(huì)有差異——這個(gè)后面專門講。它在整個(gè)技術(shù)棧里的位置在應(yīng)用層和存儲(chǔ)層之間。應(yīng)用發(fā)來(lái)請(qǐng)求你寫一段SQL去數(shù)據(jù)庫(kù)里取數(shù)、改數(shù)或者刪數(shù)。這也就意味著SQL的好壞直接決定了接口快不快、報(bào)表出不出數(shù)、任務(wù)會(huì)不會(huì)超時(shí)。你可能Java寫得很好Python也很溜但SQL寫成一坨性能照樣拉胯。1.2 為什么語(yǔ)法看似簡(jiǎn)單寫出來(lái)的東西卻總不對(duì)我見(jiàn)過(guò)太多人卡在同一個(gè)地方邏輯對(duì)順序錯(cuò)。比如在WHERE里用SELECT子句中才定義的別名或者在GROUP BY之后試圖用原始列做條件過(guò)濾。這些問(wèn)題的根子都在于沒(méi)有真正理解SQL各子句的執(zhí)行順序而不僅僅是語(yǔ)法本身。舉一個(gè)典型例子SELECT department_id, COUNT(*) AS emp_count FROM employees WHERE salary 5000 GROUP BY department_id HAVING COUNT(*) 10 ORDER BY emp_count DESC;看起來(lái)沒(méi)什么問(wèn)題但如果你在WHERE里寫成WHERE emp_count 10那必報(bào)錯(cuò)。原因很簡(jiǎn)單WHERE是在SELECT之前執(zhí)行的此時(shí)別名emp_count還不存在。學(xué)SQL語(yǔ)法核心不是背關(guān)鍵字而是掌握它的執(zhí)行順序和邏輯層次。順序搞明白了寫復(fù)雜嵌套查詢才能穩(wěn)。2. 一張覆蓋日常90%工作量的SELECT語(yǔ)法全景圖說(shuō)來(lái)說(shuō)去日常開(kāi)發(fā)里我們最常用的還是查詢語(yǔ)句。SELECT的語(yǔ)法結(jié)構(gòu)說(shuō)復(fù)雜也復(fù)雜說(shuō)簡(jiǎn)單也簡(jiǎn)單但很多人對(duì)它的理解是碎片化的。2.1 完整SELECT語(yǔ)法結(jié)構(gòu)與執(zhí)行順序一條完整的查詢語(yǔ)句長(zhǎng)這樣SELECT [DISTINCT] 列1, 列2, ... FROM 表1 [INNER | LEFT | RIGHT] JOIN 表2 ON 連接條件 WHERE 過(guò)濾條件 GROUP BY 分組列 HAVING 分組后的過(guò)濾條件 ORDER BY 排序列 [ASC | DESC] LIMIT 偏移量, 返回行數(shù)這里面最容易被忽略的是執(zhí)行順序。我畫過(guò)無(wú)數(shù)次給新人看這里直接寫給你FROM / JOIN先確定數(shù)據(jù)源把多張表連接起來(lái)生成中間結(jié)果集WHERE對(duì)中間結(jié)果集做逐行過(guò)濾GROUP BY把過(guò)濾后的行按指定列分組HAVING對(duì)分組結(jié)果做過(guò)濾SELECT投影需要的列計(jì)算表達(dá)式生成最終的目標(biāo)列ORDER BY對(duì)最終結(jié)果排序LIMIT截取指定范圍的行記住這個(gè)順序你就明白兩個(gè)高頻報(bào)錯(cuò)的根源為什么WHERE不能用SELECT里的別名因?yàn)镾ELECT還沒(méi)執(zhí)行別名不存在。為什么HAVING能用聚合函數(shù)WHERE不能因?yàn)閃HERE是在GROUP BY之前執(zhí)行的此時(shí)還沒(méi)分組聚合無(wú)從談起。2.2 WHERE過(guò)濾的藝術(shù)不只是等于和大于WHERE子句看起來(lái)最簡(jiǎn)單實(shí)際最容易踩坑的都在這里。幾個(gè)我工作中經(jīng)常發(fā)現(xiàn)同事寫錯(cuò)的地方空值判斷必須用IS NULL不能寫 NULL。這是SQL里最經(jīng)典的坑。NULL不是一個(gè)值它表示“未知”所以任何與NULL的等值比較結(jié)果都是未知永遠(yuǎn)不會(huì)為真。正確寫法是WHERE column IS NULL或者WHERE column IS NOT NULL。字符串比較的隱式轉(zhuǎn)換問(wèn)題。在MySQL里如果某列是字符串類型你寫WHERE phone 13800138000MySQL會(huì)嘗試把列值轉(zhuǎn)成數(shù)字再比較如果這一列有非數(shù)字字符可能會(huì)匹配出意料之外的結(jié)果。穩(wěn)妥的寫法是給字符串類型加引號(hào)WHERE phone 13800138000。IN和EXISTS的選擇。小表驅(qū)動(dòng)大表時(shí)EXISTS往往比IN更高效。原因在于EXISTS是逐行判斷、遇到匹配就停止短路而IN通常要把子查詢結(jié)果完整物化出來(lái)再比對(duì)。當(dāng)然現(xiàn)代優(yōu)化器已經(jīng)有了很多改寫優(yōu)化但習(xí)慣上我仍然建議子查詢結(jié)果集很小用IN外部表小、內(nèi)部表大用EXISTS。2.3 JOIN的連接邏輯INNER、LEFT、RIGHT的語(yǔ)義邊界連接的語(yǔ)義一定要搞清楚。很多人把LEFT JOIN當(dāng)成“附加列”的工具卻常常忽略掉它產(chǎn)生的NULL行。用最直白的方式解釋INNER JOIN只保留兩邊都滿足條件的行其他丟棄LEFT JOIN左邊的表FROM后面的表所有行都保留右邊表有匹配就帶上沒(méi)匹配就補(bǔ)NULLRIGHT JOIN道理一樣以右邊的表為基準(zhǔn)保留全部行FULL OUTER JOIN兩邊都保留沒(méi)匹配的補(bǔ)NULL——但要注意MySQL原生不支持需要UNION模擬實(shí)際項(xiàng)目里L(fēng)EFT JOIN用得最多。但有個(gè)細(xì)節(jié)值得注意LEFT JOIN之后如果在WHERE里加了對(duì)右表字段的過(guò)濾條件這個(gè)JOIN很可能會(huì)被優(yōu)化器改寫成INNER JOIN。因?yàn)閃HERE條件是最終結(jié)果集的硬性過(guò)濾一旦右表字段不滿足條件就必須剔除那LEFT JOIN保留的NULL行反正也過(guò)不了過(guò)濾等價(jià)于內(nèi)連接。這個(gè)坑我踩過(guò)不止一次。業(yè)務(wù)方要“左表全量右表補(bǔ)充”結(jié)果開(kāi)發(fā)在WHERE里加了右表的條件數(shù)據(jù)直接變少還排查了很久。血的教訓(xùn)對(duì)左連接保留語(yǔ)義的過(guò)濾條件應(yīng)該寫在ON子句里而不是WHERE里。3. 高頻實(shí)戰(zhàn)寫法去重、分頁(yè)、日期與字符串處理這一節(jié)我給你整理幾組真正天天要用的SQL語(yǔ)法寫法每一個(gè)都附帶適用場(chǎng)景和注意事項(xiàng)。這些內(nèi)容不是教科書上的名詞解釋而是我從實(shí)際項(xiàng)目中提煉出來(lái)、反復(fù)驗(yàn)證過(guò)的可靠方案。3.1 去重的三條路DISTINCT、GROUP BY、窗口函數(shù)搜索熱詞里“sql語(yǔ)句去重”出現(xiàn)了不止一次可見(jiàn)這是多常見(jiàn)又多變的需求。去重這件事情看起來(lái)簡(jiǎn)單實(shí)際上根據(jù)“去重到什么粒度”和“需要保留哪些信息”寫法的差別很大。場(chǎng)景一完全重復(fù)的行只留一條這種最簡(jiǎn)單的去重直接SELECT DISTINCT col1, col2 FROM table。它返回的是組合列不重復(fù)的所有行。場(chǎng)景二按某個(gè)字段去重但需要返回其他字段的完整信息比如每個(gè)用戶最近一條訂單或者每個(gè)部門工資最高的人。DISTINCT就不好使了因?yàn)樗荒鼙WC整行組合不重復(fù)沒(méi)法指定“按user_id保留最新一條”。此時(shí)用窗口函數(shù)是最優(yōu)雅的SELECT user_id, order_id, order_amount, order_time FROM ( SELECT user_id, order_id, order_amount, order_time, ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY order_time DESC) AS rn FROM orders ) t WHERE rn 1;窗口函數(shù)的邏輯是先把數(shù)據(jù)按user_id分區(qū)在每個(gè)分區(qū)內(nèi)按order_time降序編號(hào)然后取每組編號(hào)為1的行。這一步既完成了去重又保留了“最新一條”的業(yè)務(wù)含義可讀性也很好。場(chǎng)景三統(tǒng)計(jì)去重后的數(shù)量計(jì)算活躍用戶數(shù)、獨(dú)立訪客數(shù)直接用COUNT(DISTINCT user_id)這個(gè)用法也經(jīng)常出現(xiàn)在報(bào)表SQL里。注意COUNT(DISTINCT)在數(shù)據(jù)量大的時(shí)候性能并不好因?yàn)樗枰~外的排序或哈希操作。如果只是要知道大概的數(shù)量級(jí)用APPROX_COUNT_DISTINCTSQL Server支持或HyperLogLog方案可能更務(wù)實(shí)。3.2 分頁(yè)查詢的正確姿勢(shì)LIMIT的偏移量陷阱分頁(yè)是每個(gè)后端必寫的功能。MySQL的寫法很直接SELECT * FROM orders ORDER BY create_time DESC LIMIT 20 OFFSET 0; -- 第1頁(yè) SELECT * FROM orders ORDER BY create_time DESC LIMIT 20 OFFSET 20; -- 第2頁(yè)OFFSET越大查詢?cè)铰@是LIMIT分頁(yè)的經(jīng)典問(wèn)題。原因是數(shù)據(jù)庫(kù)需要掃描并丟棄前面所有的行才能拿到目標(biāo)數(shù)據(jù)。數(shù)據(jù)量在幾十萬(wàn)以內(nèi)還好上了百萬(wàn)深分頁(yè)會(huì)直接拖垮接口。更穩(wěn)健的替代方案是鍵集分頁(yè)Keyset Pagination也就是利用排序條件里的唯一鍵來(lái)做游標(biāo)-- 假設(shè)上一頁(yè)最后一條記錄的create_time是2024-06-01 12:00:00id是1024 SELECT * FROM orders WHERE create_time 2024-06-01 12:00:00 OR (create_time 2024-06-01 12:00:00 AND id 1024) ORDER BY create_time DESC, id DESC LIMIT 20;它的思路是拿“上一頁(yè)的最后一條”作為邊界不斷往后翻。因?yàn)樗饕梢跃_命中起點(diǎn)所以不管翻到第幾頁(yè)性能都穩(wěn)定。如果你的項(xiàng)目有深分頁(yè)的需求這個(gè)寫法值得掌握。SQL Server的分頁(yè)語(yǔ)法不一樣用的是OFFSET FETCHSELECT * FROM orders ORDER BY create_time DESC OFFSET 20 ROWS FETCH NEXT 20 ROWS ONLY;從語(yǔ)法上看邏輯是一樣的先跳過(guò)20行再取接下來(lái)的20行。3.3 日期與時(shí)間處理的三個(gè)高頻函數(shù)日期處理是SQL語(yǔ)法里繞不開(kāi)的部分幾乎每個(gè)報(bào)表都涉及。MySQL里最常用的三個(gè)DATE_FORMAT(date, %Y-%m-%d)把日期格式化成指定字符串DATEDIFF(date1, date2)計(jì)算兩個(gè)日期相差的天數(shù)DATE_SUB(date, INTERVAL n DAY)日期加減按月份分組的經(jīng)典寫法SELECT DATE_FORMAT(create_time, %Y-%m) AS month, COUNT(*) AS order_count, SUM(order_amount) AS total_amount FROM orders WHERE create_time DATE_SUB(CURDATE(), INTERVAL 6 MONTH) GROUP BY DATE_FORMAT(create_time, %Y-%m) ORDER BY month DESC;處理日期有個(gè)非常重要的細(xì)節(jié)能用日期范圍過(guò)濾就盡量別在WHERE里套函數(shù)。比如要查2024年6月的訂單寫成WHERE create_time 2024-06-01 AND create_time 2024-07-01索引能用得上寫成WHERE DATE_FORMAT(create_time, %Y-%m) 2024-06索引就廢了因?yàn)楹瘮?shù)改變了列的值優(yōu)化器沒(méi)法直接走索引。這是慢查詢排查中最常見(jiàn)的根因之一后文還會(huì)詳述。3.4 字符串聚合與拼接GROUP_CONCAT和STRING_AGG“把多行的某個(gè)字段拼成一段字符串”這個(gè)需求用得也不少。MySQL的寫法是GROUP_CONCATSELECT department_id, GROUP_CONCAT(employee_name ORDER BY employee_name SEPARATOR 、) AS names FROM employees GROUP BY department_id;SQL Server沒(méi)有GROUP_CONCAT對(duì)應(yīng)的是STRING_AGG用法類似SELECT department_id, STRING_AGG(employee_name, 、) WITHIN GROUP (ORDER BY employee_name) AS names FROM employees GROUP BY department_id;兩邊的參數(shù)有些差異但思路一致。寫的時(shí)候注意GROUP_CONCAT默認(rèn)長(zhǎng)度限制是1024字節(jié)拼接內(nèi)容長(zhǎng)的時(shí)候需要先設(shè)置group_concat_max_len。4. 寫SQL前先看安全注入原理與防御姿勢(shì)“SQL注入”這個(gè)關(guān)鍵詞在網(wǎng)絡(luò)熱詞里多次出現(xiàn)又是ctfshow里的高頻考點(diǎn)又是安全測(cè)試?yán)锢@不開(kāi)的環(huán)節(jié)。它到底是什么說(shuō)白了用戶的輸入被當(dāng)成SQL代碼執(zhí)行了。4.1 注入發(fā)生的根因與萬(wàn)能密碼原理先看一段最原始的登錄查詢SELECT * FROM users WHERE username admin AND password 123456;如果代碼里是直接把用戶輸入的username和password拼接進(jìn)這個(gè)字符串攻擊者在密碼框輸入 OR 11那么實(shí)際執(zhí)行的語(yǔ)句就變成SELECT * FROM users WHERE username admin AND password OR 11;因?yàn)镺R 11恒為真整條WHERE條件的結(jié)果就是真攻擊者就繞過(guò)了密碼校驗(yàn)。這就是所謂的“萬(wàn)能密碼”原理本質(zhì)上不是SQL有什么漏洞而是拼接字符串的代碼留下了注入點(diǎn)。再比如熱詞里提到的“fofa查詢sql注入”FOFA這類網(wǎng)絡(luò)空間搜索引擎能搜到暴露在公網(wǎng)的資產(chǎn)很多帶有SQL注入漏洞的系統(tǒng)就是這么被找出來(lái)的。這提醒我們?nèi)魏螘r(shí)候都不要把用戶輸入直接拼進(jìn)SQL這是底線。4.2 參數(shù)化查詢唯一可靠的防御方式防御SQL注入的辦法其實(shí)很簡(jiǎn)單而且是語(yǔ)言層面的標(biāo)準(zhǔn)方案參數(shù)化查詢。它讓SQL模板和用戶輸入徹底分離數(shù)據(jù)庫(kù)把輸入的“值”當(dāng)數(shù)據(jù)處理而不是當(dāng)SQL代碼執(zhí)行。Python里用MySQL驅(qū)動(dòng)時(shí)的寫法cursor.execute( SELECT * FROM users WHERE username %s AND password %s, (username, password) )Java里用JDBC的PreparedStatementString sql SELECT * FROM users WHERE username ? AND password ?; PreparedStatement ps conn.prepareStatement(sql); ps.setString(1, username); ps.setString(2, password);參數(shù)化查詢之外的其他防護(hù)都不夠硬。比如黑名單過(guò)濾、轉(zhuǎn)義特殊字符這些方案都能被繞過(guò)。黑名單永遠(yuǎn)不完整轉(zhuǎn)義規(guī)則在不同字符集和數(shù)據(jù)庫(kù)方言下可能有差異一個(gè)考慮不周就漏了。所以我在團(tuán)隊(duì)里反復(fù)強(qiáng)調(diào)能寫參數(shù)化查詢就別手動(dòng)轉(zhuǎn)義。4.3 安全自查清單結(jié)合我參與過(guò)的一些安全測(cè)試經(jīng)驗(yàn)整理一份可以日常對(duì)照的清單所有SQL執(zhí)行入口統(tǒng)一走參數(shù)化查詢禁止字符串拼接存儲(chǔ)過(guò)程內(nèi)部如果拼接SQL同樣要參數(shù)化處理或嚴(yán)格校驗(yàn)入?yún)?shù)據(jù)庫(kù)賬號(hào)遵循最小權(quán)限原則應(yīng)用賬號(hào)只擁有業(yè)務(wù)必需的表權(quán)限SELECT、INSERT、UPDATE、DELETE按需分配錯(cuò)誤信息不要直接拋給前端避免暴露SQL片段、表名、字段名定期掃描接口用自動(dòng)化工具檢測(cè)注入點(diǎn)說(shuō)句實(shí)話SQL注入在OWASP里這么多年一直排在最危險(xiǎn)漏洞前列不是因?yàn)樗卸嚯y修而是很多團(tuán)隊(duì)根本沒(méi)有把參數(shù)化查詢當(dāng)成默認(rèn)約定。只要約定成俗Code Review把關(guān)這個(gè)坑基本就堵住了。5. 慢SQL排查索引失效、執(zhí)行計(jì)劃與優(yōu)化順序熱搜詞里“慢sql優(yōu)化”、“sql優(yōu)化”、“并行sql優(yōu)化”扎堆出現(xiàn)說(shuō)明大家在實(shí)際工作中遇到的性能問(wèn)題遠(yuǎn)比語(yǔ)法問(wèn)題多。語(yǔ)法沒(méi)寫錯(cuò)但就是慢這才是最磨人的。5.1 先從一次典型的慢查詢排查講起我之前遇到過(guò)一張訂單表數(shù)據(jù)量在800萬(wàn)行左右一條統(tǒng)計(jì)SQL跑了幾十秒接口直接超時(shí)。SQL大致長(zhǎng)這樣SELECT user_id, COUNT(*) AS order_count, SUM(order_amount) AS total_amount FROM orders WHERE DATE_FORMAT(create_time, %Y-%m) 2024-05 GROUP BY user_id;從語(yǔ)法角度看它完全正確。問(wèn)題出在哪WHERE DATE_FORMAT(create_time, %Y-%m) 2024-05。create_time列上明明有索引但因?yàn)閷?duì)列用了函數(shù)索引自然失效。優(yōu)化器沒(méi)法用二分查找定位“2024年5月”的范圍只能全表掃描然后每一行都套一個(gè)DATE_FORMAT計(jì)算再跟目標(biāo)值比對(duì)。800萬(wàn)行就這么硬掃了一遍。改法很簡(jiǎn)單SELECT user_id, COUNT(*) AS order_count, SUM(order_amount) AS total_amount FROM orders WHERE create_time 2024-05-01 AND create_time 2024-06-01 GROUP BY user_id;同樣的業(yè)務(wù)語(yǔ)義性能天差地別原因就是讓索引回到了可用狀態(tài)。5.2 讀懂執(zhí)行計(jì)劃EXPLAIN的關(guān)鍵列排查慢SQL第一步永遠(yuǎn)是看執(zhí)行計(jì)劃。MySQL里就是EXPLAINSQL Server對(duì)應(yīng)的是“顯示估計(jì)的執(zhí)行計(jì)劃”PostgreSQL是EXPLAIN ANALYZE。不依賴執(zhí)行計(jì)劃去猜性能問(wèn)題那只能是瞎蒙。以MySQL的EXPLAIN為例幾個(gè)關(guān)鍵輸出列表格列名關(guān)注點(diǎn)說(shuō)明type至少要到range最好到ref或const從全表掃描到索引查找能看到訪問(wèn)路徑好壞key實(shí)際用到的索引如果為NULL說(shuō)明沒(méi)走索引rows預(yù)估掃描行數(shù)數(shù)值越小越好Extra重點(diǎn)是Using filesort、Using temporary出現(xiàn)這兩個(gè)詞通常意味著排序/分組沒(méi)走索引數(shù)據(jù)量大就會(huì)慢看到Using filesort要警覺(jué)order by沒(méi)走索引數(shù)據(jù)庫(kù)要把結(jié)果集拉到內(nèi)存或磁盤上排序。看到Using temporary同理GROUP BY經(jīng)常觸發(fā)表格文件像臨時(shí)表的操作。5.3 索引失效的七大常見(jiàn)場(chǎng)景整理一份對(duì)照表給你排查的時(shí)候命中一個(gè)就檢查一個(gè)對(duì)列使用函數(shù)WHERE DATE_FORMAT(create_time, ...) ...索引失效隱式類型轉(zhuǎn)換字符串列和數(shù)字比較索引可能失效前導(dǎo)模糊匹配LIKE %關(guān)鍵詞無(wú)法走索引LIKE 關(guān)鍵詞%則可以聯(lián)合索引不滿足最左前綴原則比如索引是(a, b, c)查詢條件里只寫了b和c走不了索引在索引列上做運(yùn)算WHERE price * 1.1 100優(yōu)化器沒(méi)法利用索引OR條件連接非索引列WHERE a 1 OR b 2如果b沒(méi)有索引可能全表掃描NULL值判斷的邊界情況索引列大量NULL時(shí)IS NULL的優(yōu)化效果不如預(yù)期真實(shí)項(xiàng)目里聯(lián)合索引的最左前綴原則是很多人栽跟頭的地方。比如建了索引(idx_user_id, idx_create_time)查詢條件是WHERE create_time ?沒(méi)有帶上user_id那這個(gè)聯(lián)合索引就用不上必須老老實(shí)實(shí)建一個(gè)create_time的單列索引或者調(diào)整SQL讓條件包含user_id。5.4 優(yōu)化順序先搞清楚瓶頸再動(dòng)手我見(jiàn)過(guò)不少同事拿到慢SQL二話不說(shuō)就加索引結(jié)果加了索引還是慢。正確的排查順序應(yīng)該是定位瓶頸SQL全表掃描慢還是排序慢還是連接關(guān)系里中間結(jié)果太大看執(zhí)行計(jì)劃確認(rèn)實(shí)際是否走了索引有沒(méi)有Using filesort、Using temporary優(yōu)化SQL結(jié)構(gòu)改寫WHERE條件、減少不必要的列、優(yōu)化JOIN順序才考慮索引調(diào)整加索引、調(diào)整聯(lián)合索引順序、覆蓋索引最后提一句索引不是越多越好。每個(gè)索引都占用寫入開(kāi)銷插入、更新、刪除時(shí)都要同步維護(hù)。一張表建了七八個(gè)索引寫性能必然受影響。取舍的標(biāo)準(zhǔn)永遠(yuǎn)是看真實(shí)業(yè)務(wù)查詢場(chǎng)景而不是把所有列都建一遍。6. 多數(shù)據(jù)庫(kù)方言差異與常見(jiàn)報(bào)錯(cuò)排查大家在搜索里頻繁搜到sql server相關(guān)的關(guān)鍵詞sql server writelog、sql server 2012密碼到期、sql server express下載、solidworks electrical無(wú)法連接到sql server。這說(shuō)明很多人在工作中被數(shù)據(jù)庫(kù)環(huán)境的坑卡住了。SQL語(yǔ)法雖然標(biāo)準(zhǔn)化但不同數(shù)據(jù)庫(kù)的“方言”和“環(huán)境問(wèn)題”確實(shí)千差萬(wàn)別。6.1 SQL標(biāo)準(zhǔn)與各數(shù)據(jù)庫(kù)的語(yǔ)法差異對(duì)照我整理了一份高頻差異對(duì)照表適合日常查詢時(shí)參考表格能力項(xiàng)MySQLSQL ServerPostgreSQL字符串拼接CONCAT(a, b)a ba || b分頁(yè)LIMIT offset, countOFFSET n ROWS FETCH NEXT m ROWS ONLYLIMIT count OFFSET offset自增主鍵AUTO_INCREMENTIDENTITY(1,1)SERIAL 或 IDENTITY取前N條LIMIT NSELECT TOP NLIMIT N字符串聚合GROUP_CONCATSTRING_AGGSTRING_AGG當(dāng)前日期CURDATE() / NOW()GETDATE()CURRENT_DATE / NOW()如果不存在則更新存在則忽略INSERT ... ON DUPLICATE KEY UPDATEMERGE 語(yǔ)句INSERT ... ON CONFLICT DO UPDATE舉例來(lái)說(shuō)剛剛講過(guò)MySQL分頁(yè)的LIMIT寫法同一條SQL拿到SQL Server里就會(huì)語(yǔ)法報(bào)錯(cuò)這是我在項(xiàng)目里見(jiàn)得最多的“跨庫(kù)遷移兼容性”問(wèn)題。除此之外SQL Server的默認(rèn)排序規(guī)則Collation也??尤酥形淖侄闻判蛟贑hinese_PRC_CI_AS和Latin1_General_CI_AS下的表現(xiàn)不一樣查詢結(jié)果順序可能跟預(yù)期不同。6.2 SQL Server的常見(jiàn)環(huán)境報(bào)錯(cuò)與排查思路SQL Server相關(guān)的問(wèn)題在搜索詞里出現(xiàn)頻率極高我把兩個(gè)典型的拿出來(lái)拆解案例一sql server writelog 慢或持續(xù)高活躍Writelog是SQL Server的日志寫入進(jìn)程。如果它長(zhǎng)時(shí)間處于高活躍狀態(tài)通常說(shuō)明事務(wù)日志寫入壓力大??赡茉蛴袛?shù)據(jù)庫(kù)的恢復(fù)模式是FULL且日志沒(méi)有定期備份、長(zhǎng)事務(wù)持有日志空間不釋放、磁盤本身寫入性能差。排查思路檢查DBCC SQLPERF(LOGSPACE)看日志文件空間使用率檢查日志備份頻率FULL恢復(fù)模式下必須定期備份日志才能截?cái)嗳罩疚募挪殚L(zhǎng)事務(wù)用DBCC OPENTRAN查看最早的活動(dòng)事務(wù)檢查磁盤IO延遲指標(biāo)尤其要關(guān)注日志文件的物理盤是不是和數(shù)據(jù)庫(kù)文件混在一起案例二sql server 2012密碼到期導(dǎo)致登錄失敗搜這個(gè)關(guān)鍵詞的人大概率遇到了類似報(bào)錯(cuò)Login failed for user 某某. Reason: The password of the account has expired.這是SQL Server 2012默認(rèn)開(kāi)啟了密碼過(guò)期策略導(dǎo)致的問(wèn)題。處理方式有兩個(gè)用Windows認(rèn)證方式或sa賬號(hào)登錄后修改該登錄名的密碼并取消密碼過(guò)期策略或者直接通過(guò)屬性面板取消“強(qiáng)制密碼過(guò)期”勾選。要更穩(wěn)妥的話還可以關(guān)掉整個(gè)服務(wù)器級(jí)別的密碼過(guò)期策略但這要看公司安全規(guī)范怎么要求。6.3 第三方軟件連不上SQL Server的排查順序搜索詞里還有“solidworks electrical無(wú)法連接到sql server”這類問(wèn)題的本質(zhì)是客戶端連接SQL Server實(shí)例失敗跟具體業(yè)務(wù)軟件關(guān)系不大排查路徑基本一致。按照從低到高的排查順序網(wǎng)絡(luò)層ping數(shù)據(jù)庫(kù)服務(wù)器IP通不通端口層SQL Server默認(rèn)端口1433是否監(jiān)聽(tīng)telnet通不通實(shí)例名層如果是命名實(shí)例確認(rèn)實(shí)例名是否正確比如服務(wù)器IP\實(shí)例名驅(qū)動(dòng)層確認(rèn)軟件內(nèi)置的SQL Server驅(qū)動(dòng)版本是否太舊協(xié)議層SQL Server Configuration Manager里確認(rèn)TCP/IP協(xié)議是否啟用因?yàn)槟J(rèn)情況某些版本只啟用了Shared Memory認(rèn)證層Windows認(rèn)證還是混合認(rèn)證用錯(cuò)認(rèn)證模式也會(huì)連接失敗很多“軟件連不上SQLServer”的問(wèn)題最后都出在TCP/IP協(xié)議沒(méi)啟用或者實(shí)例名拼錯(cuò)而不是服務(wù)器真的掛了。先按這個(gè)順序排查能省掉大量時(shí)間。6.4 關(guān)于數(shù)據(jù)庫(kù)環(huán)境的最后提醒遇到環(huán)境類報(bào)錯(cuò)我個(gè)人的習(xí)慣是先確認(rèn)版本再確認(rèn)配置最后碰代碼。很多SQL Server、MySQL的報(bào)錯(cuò)信息在版本之間存在顯著差異網(wǎng)上搜到的方案是基于舊版本的直接套用可能適得其反。比如SQL Server 2012的密碼策略問(wèn)題和2019的有些細(xì)節(jié)就不一樣必須先定準(zhǔn)環(huán)境再動(dòng)手。7. 兩代人的SQL使用習(xí)慣從手寫語(yǔ)句到ORM的利與弊最近幾年ORM框架越來(lái)越流行寫代碼的時(shí)候直接鏈?zhǔn)秸{(diào)用方法底層自動(dòng)生成SQL。很多新人確實(shí)沒(méi)怎么手寫過(guò)SQL了。但搜索詞里“sql面試題”、“sql基礎(chǔ)知識(shí)”的搜索量一直居高不下說(shuō)明面試和工作里對(duì)SQL能力的要求并沒(méi)降低。我在這里也聊聊我對(duì)ORM和手寫SQL的真實(shí)看法。ORM最大的價(jià)值是提升了開(kāi)發(fā)效率和代碼可維護(hù)性。在簡(jiǎn)單CRUD場(chǎng)景下ORM比手寫SQL少了很多樣板代碼還能自動(dòng)映射實(shí)體避免拼字符串導(dǎo)致的低級(jí)語(yǔ)法錯(cuò)誤。比如用Python的SQLAlchemy或者Java的MyBatis-Plus寫簡(jiǎn)單的插入、更新、單表查詢確實(shí)直觀高效。但ORM的問(wèn)題同樣明顯復(fù)雜查詢的SQL生成不可控。我見(jiàn)過(guò)一個(gè)案例業(yè)務(wù)方用ORM拼了一個(gè)多層子查詢生成的SQL嵌套了五六層執(zhí)行計(jì)劃里嵌套循環(huán)層數(shù)爆炸一個(gè)查詢跑了三分鐘。后來(lái)我手動(dòng)改寫成兩個(gè)JOIN加一個(gè)臨時(shí)表三秒出結(jié)果。這種場(chǎng)景下ORM的抽象反而成了性能優(yōu)化的阻礙。所以我的立場(chǎng)一直很明確簡(jiǎn)單查詢交給ORM復(fù)雜查詢堅(jiān)持手寫SQL。這跟語(yǔ)法能力有什么關(guān)系關(guān)系大了——你要手寫就得真正掌握SQL語(yǔ)法得會(huì)看執(zhí)行計(jì)劃得知道子查詢會(huì)不會(huì)被優(yōu)化器改成JOIN得明白窗口函數(shù)該怎么用。沒(méi)有這個(gè)底子遇到性能問(wèn)題就只能干瞪眼。從學(xué)習(xí)的角度說(shuō)我依然建議把SQL語(yǔ)法的基礎(chǔ)打牢。現(xiàn)在你搜“sql語(yǔ)法”能找到一堆教程但真正系統(tǒng)的做法是拿一套官方文檔我推薦PostgreSQL或者M(jìn)ySQL的官方手冊(cè)把SELECT那部分的每個(gè)子句逐條看一遍然后到本地庫(kù)建兩張表反復(fù)練習(xí)。語(yǔ)法這東西就像開(kāi)車看一百遍不如自己開(kāi)十遍來(lái)得扎實(shí)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
四虎国产精品永久入口| 天堂男人网| 免费黄色A片| 欧美92| 亚洲 图片 欧美 色图| a亚洲欧美色欲| 亚欧美色图| 撸撸成人在线视频| 东京热亚洲一区二区| 飘花国产午夜精品不卡| 欧美在线91| 97碰碰色| 美女啊啊啊啊啊啊| 亚洲色天堂九9| 中文字幕第23区| 中文高清一区二区的| 日本高清有码网址视频| 大色综合网| 操操操五月天婷婷丁香影院| 大香蕉免费3| 亚洲精品国产拍免费91在线| 亚洲男人天堂视频| 茄子社区国产精品| 中文字幕精品亚洲熟女| 欧美日韩人妻婷婷一区| 人人爽人人精品乱人伦AV| 在现视频女上位好爽| 丁香五月激情啪啪| 欧美日韩m| 六月丁香婷| 婷婷丁香成人| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 无码视频一区二区| 亚洲精品欧美专业| 在线情色电影 91大| 超碰午夜| 亚洲丝袜综合| 男人的午夜天堂| 欧美色图亚洲激情| 97欧美超碰| 日韩福利电影网| 国产偷人伦激情在线观看| 天天拍夜夜| 九九九九九精品视频| 天天久久久久久| 久伊人网78| 啊啊啊爽爽| 69一区二区三区 | 性爱乱伦一区| 狠狠操狠狠| 亚洲 欧美 91| 国产第二页| 久久风骚城市| 精品久| 日B操| 国产精品熟女九色九色蜜臀| 手机看片1024你懂的国产| 全球成人中文在线| 啊啊啊啊啊啊啊啊啊啊在线观看| 欧美性爱超碰97| 美女被啪到深处抽搐视频| 亚洲精品尤物yw在线影院| 日韩av影片在线观看| 大香蕉人妻| 天天干天天日天天射黄色| 欧美老妇女内射网址| 91劲爆| 九九九九免费| hd成人一区二区在线| 婷婷九月| 96免费视频在线| 亚洲极品| 人妻精品视频一区二区三区 | 久久、1234| 亚洲激情在线| 国产黄片精品在线| 丝袜制服字幕在线| 又黄又硬又粗又长国产视频| 精品国产一区二区三区在线播出| 91熟女熟妇视频网站| 成人五月天色网| 丝袜美腿丝袜| 日本免费中文字幕在线| 搡老女人老91妇女熟女| 国产在线综合福利网站| 亚州色交| 日韩一级二级三级| 国产久久av| 久久极品一区二区| 欧美一级在线观看成人| 色综合91| 久久老熟女| 亚洲精品亚洲人成在线麻豆| 熟女色图在线| 亚洲色图欧美色图另类图片| 精品-91人妻子系列| 亚洲图片欧美制度| 日本操逼视频在线| 亚州日韩97| 中文字幕三四区| 99热精品在线在线| 九九九九AV| 欧美强奸一区二区诱惑| 日韩精品一区,二区 九九...老司机| 99re免费| 国产欧美美女免费观看视频| 999久久久九九九九| 精品亚洲黄色片 国产精品导航一区二区| 五月天偷拍| 玖玖资源中文字幕制服丝袜| 9精品久久久久| 3P乱轮视频| 蜜桃在线观看一区二区三区 | 久久9精品网站| 久久超碰国产一区二区三区| 肥臀熟女福利视频一区二区| 男女性感激情网站| 操少妞在线视频| 操逼片国产| 东北女人| 这里只有精品视频在线观看麻豆 | 精品国产乱码久久久久久久| www.人人cao| 久久久久人| 亚洲一区二区三区四区视频| 骚妻少妇精品性色无码四色A V| 无码 黑人一区二区三区| 不卡人妻少妇精品毛片一区23区视频| 综合久久久久久久久91| 国产精品电影推荐| 色色综合97| 日本潮催一卡操| 性色高清在线| 八人操人人摸人人看| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 天天天天干| 变态综合色| 丰满欧美少妇| 国产情侣自拍在线播放| 免费视频97| 欧美一二在线| 日韩av影片在线观看| 久久久草草精品| 久久五月综合| 日韩AV无码网站| 久久九操在线观看| 开心婷婷五月| 干我久操| 大香蕉手机在线| 国产精品青草综合久久| 欧洲亚洲国产综合在线| 欧美se综合| 欧美最婬乱婬爆婬性视频| 亚洲无码 国产无码| 91麻豆天美国产| 黄色小视频日本txt| 亚洲黄色电影| 日本日逼高清| 中国熟妇| 精品人妻一区春色| 丁香五月影院| 日本免费人成视频播放120秒| 男人天堂免费| 久久色一区二区| 久操视频资源站公开| 色图四区| 噜噜噜亚洲精| 蜜臀久久99精品| 色九九综合| 久久欲| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 97超碰巨乳| 久草五月| 亚洲av综合色| 搡老女人老熟女91| 欧洲亚洲人妻无码久久三区四区| 91精品久久久久久77777| 色五月首页| 国产毛片在线| 国产精品日韩在线一区| av影片在线观看不卡| 四虎精品一区| 中文字幕第23区| 91亚洲不卡一区| 99久久久久| 黄色免费网页无码| 尹人免费观看视频在线| 少妇久久久久久| 亚洲色婷婷综合久久久久中文| 久久久九九九九| 男人的天堂激情| 在线另类| 国产欧美精品日韩区二区麻豆天美| 3d成人精品一区二区| 91久久久亚洲| 超碰在线人人射| 九热中文字幕| 亚洲天天操| 日韩欧美传媒一区国产| 国产精品乱码久久久久| 男插女青青影院| 日夜精品| 久久青青草在线视频| 国产超碰欧美| 精品女同一区| 久久亚洲日韩熟女精品| 国产一区二区精品久久久不卡蜜臀| 330dv亚洲成年视频网| 日韩丝袜高跟制服在线观看| 青青青草伊人精品| 欧美日本视频一区| 欧美特黄视频网站| 欧美色图99| 国产sv美女内射| 日韩欧美女求操每天更新| 国产精品69久久久久久久| 蜜臀一二三区| 国产一区在线看| 东京热91| 久久精品国内Av熟女高清| 一区操逼| 综合一区中亚洲国产成人综合精品 | 日韩欧美女求操每天更新| 91精品导航| 91亚洲影视| 女人天堂av在线播放| 秋霞 色色| 人人妻人人爽 97人人看碰人免费公开视频| 一级岛国大片| 白嫩国模丰满一二三区| 欧美色图天堂在线| 亚洲精品天天影视综合网| 麻豆AV96熟妇人妻| 蜜桃狠狠色伊人亚洲综合| 久久精品无码熟妇一区二区三区视频导航| 91色亚洲| 国产精品 久久久精品一牛| 秋霞一级A片黄色视频| 精品人妻av在线播放| 性爱av在线免费观看| 色五月婷婷五月天| 中出789在线视频| 四虎在线免费视频| 欧美亚洲中文| 一区二区三区视频在线观看免费| 亚洲欧美九九| 欧美人妻一区二区| PMv在线观看| 成人国产精品三级A片| 亚洲有薄码区日本系列中文字幕| 福利天堂| 日日爱99| 女人双腿搬开让男人桶| 亚熟在线| 97操B| 黄色电影在线播放综合网站| 丝袜美腿诱惑亚洲欧美视频在线观看| 日韩 欧美 国产 麻豆| 久久啊啊| 黄色高清无码无码破解免费暗网| 精品免费1| 国产自偷| 日本免费中文字幕在线| 97人人爱人人做人人乐| 亚洲人妻久久| 久久人人爽人人爽人人片Ⅴ| 啊啊啊啊啊啊啊在线| a级免费在线观看| 久99热| 91精品少妇搡搡搡| AⅤ片水多多| 欧美在线视频99| 四虎在线播放| 国产精品久久久久久久AV大片| 99热官网| 2017天天插| 金莲网址| 日韩精品9区| 亚洲成人在线高清| 超碰午夜在线| 日本不卡二区| 91性网| 凹凸视频在线观看伊人| 天堂麻豆天美| 成人精品久久久午夜福利| 蜜桃成人1区2区3区| 九九操久久国产免费视频| 91操人| ai欧美亚洲小说| 国产精品麻豆免费视频| 日韩传媒在线| 日韩性爱免费观看视频| 日本不卡二三区| 亚洲 无码 偷拍| 欧美另类色| 日少妇视频| 天天日老熟妇| 亚洲成人精品在线一区| 日本不卡一区二区三区| 蜜桃无码AV一区二区| 久久视频,这里只有精品 | 中文字幕第页| 在线中文字幕视频| 91在线页| 欧美人人曰人人操人人射射| 91N综合在线| 国产免a费看黄片在线| 尤物视频网 刘玥| 亚洲黄色a级片| 欧亚韩国999| 9久热| 人妻欧美| 九九热视频这里只有精品| 国产精品免费1区2区视频| 亚洲综合影片| 99色色网| 你懂的在线观看区国产| 97视频在线免费播放| 国内毛片无码一级毛片| 青青色在线观看| 人人污日韩一区二区| 青青久久手机线视频| 久久久精品九| 嗯嗯嗯,草死我| 成人性爱视频在线看| 欧美另类天堂| 任我爽视频在线观看| 91成人在线免费视频| 色约约一区=区三区| 啊啊啊com| 曰本人妻人人澡人人夹| 78超碰| 蜜桃色院一区久久 | 国产偷人妻精品一区二区在线| 国产浮力影院第1页| 96超碰网| 9ⅰ久久久天天| 伊色综合天堂色97| 99色视频| av无码av无码专区| 丰满人妻一区二区三区色-百度| 歐美性天天| 99热精品在线播放| 亚洲色色探花| 九九九免费视频| 久久精品视频一区三区小泽玛利亚| 久久五月丁香| 欧美精品成人在线播放| 国产91精品在线免费| 超碰在线综合97| 97操97色| 婷婷午夜| 免费操逼视频下载| 日本免费中文字幕在线| 91成人18| 怡春院久久| 青青草色插素人| 按摩中文字幕| 欧美制服另类丝袜| 98一区二区精品| 天天躁日日躁AAA片李宗瑞| 综合国产影视三级| 亚洲 欧美 制服 另类 自拍| 偷拍综合网| 91亚洲黄色网| 日韩99999| 污电影在线观看| 少妇人妻无码| 国内97干免费看| 欧亚不卡| 你草精品在线视频| 亚洲AO在线| 亚洲av在线免费观看| 婷婷综合在线| 日韩无码服务区| 精品一二三区四视频| 日韩99神马视频播放| 久久人人妻| 日韩AV一区二区三区四四| 亚洲综合九九| 久热九九| 亚洲综合网电影91| 中文字幕五区| 美女高潮视频91| 欧美色图偷拍另类| 精品176精品2| 久久噜噜噜精品国产亚洲综合| 天天色踪合| 98超碰日本| 日本不卡一区二区三区| 日韩精品人妻中文字幕不卡乱码| 人人妻人人澡人人爽久久av| 亚洲色91| 日本欧美一区二区三区视频麻豆| 日本欧美一区二区三区视频麻豆| 黄色区免费观看中文字幕| 黄色av片三级三级三级免费看| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 91在线视频国产网站| 2021国产成人精品久久| 影音先锋新男人| 亚洲成人一区二区精品| 99久久综合| 国产精品女同| 日本最新1区2区3区| 啊啊在线| 香蕉欧美| 国产精品成人无码av无码免费| 久久精品国产亚洲AV成人直播| 欧美特大黄一级片片免费| 日韩成人综合网| 国产极品999| 久久久久921| 99999国产| 探花视频免费观看国产专区| 99久久久无码国产精品性男| 中文字幕亚洲欧美在线不卡| 少妇特黄一区二区三区| 国产成人在线观看网址| 亚洲色欲天天人妻无码系列专区| 欧洲久久一二线| AAAA欧美日韩| 人人扣人人操| 丁香婷婷激情五月天无毒不卡 | 亚洲国产欧美另类自拍| 久久思思热| 99色婷婷中文字幕乱色| 欧美日韩狠狠爱| 无码137片内射在线影院| 综合久| 日韩99神马视频片| 99久久99久久免费精品蜜臀| 操逼操逼逼操操逼91 | 蜜臀久久99精品久久久久| 人人操肉肉| 婷婷色一区| 欧美丝袜美女电影一二三四区| 97在线免费观看视频| 婷婷中文网| 97玖玖超碰| 伊人宅男大香蕉 | 麻豆a'v电影| 99久久精品国产系列| 午夜福利免费福利视频| 精品然女一区二区| 色欲Av人妻精品一区二| 国产亚洲人妻综合日韩 久久| 精品久久久不卡一区二区| 草草草视频在线免费看| 91爱综合| 成人国产二区三区在线,男女精品。| 久久riav中文精品| 中国黑人三级片网站上区| 婷婷爽人人婷婷爽视频| 婷婷五月天成人| 色色青青久久| 操操逼操操逼操操逼逼| 色婷婷久久综合超碰| 操国产高清| 97久操| 亚欧成人中文字幕一区| 330dv亚洲成年视频网| 麻豆三极片| 亚州情色j区| 成人性交免费视屏| 91一区二区| 手机在线大香蕉| 香蕉久久国产AV一区二区| 欧美爱国产综合、| 丰满人妻av一区二区三区 | 26uuu性物| 91N综合在线| 26UUU欧美激情一区二区| 97视频620| 日韩中文字幕国产| 超碰午夜| 日本三级中国三级99人妇网站| 久久久久久99999国产精品| 多乙久久久久久| 物业黑人 AV一区| 中国女人内射6XXXXX| 99久久9| 欧美视频边做饭边橾| yazhououmeizongya| 在线看免费无码AV天堂的| 熟妇一区,二区,三区。| 麻豆人妻精品一区二区| 88xx成人精品视频| 亚洲天堂资源| 色九九九九久| 2017人人操,人人摸| 福利大香蕉| 91丨九色丨东北熟女| 粉嫩av在线| 97bbn| 婷婷久月| 国产一级αv免费看片| 欧美日韩国产传媒在线精品| 久久久久9999妇女| 亚洲砖码砖专无区2023| 91亚洲综合在线| 奸色色 男人天堂 天天射| 日本高清免费一本视频在线观看| 蜜臀99999| AV电影在线播放| 国内毛片欧美香蕉精品| 国产AV天美传媒一区二区三区| 五月天婷婷综合网| 无码外流操逼视频| 色约约一区=区三区| 九九热超碰97亚洲最新香蕉 | 成人麻豆av电影网站| 亚洲在线观看| 69AV女优男人的天堂| 国产色精品午夜大片| 亚洲天天综合| 91艹| 97国产精品国| aaaa少妇高潮大片| 人人操人人摸人人骑| 欧美性视频二区三区| 亚洲有码 视频一区| 91三级理论片播放器| 精品视频一区二区| 九九五月天| 国产地址二三| 91国产丝袜足交精品视频| 日韩中文字幕在线视频观看| 精品国产一区二区三区香蕉欧美| 精品999999| 偷拍欧美亚洲| 婷婷久草| 大肉棒导航| 97超碰色五月| 激情开心五月天| 一区| 91亚州日韩高清| 黄色av一区二区在线| 欧美国产精品| 9国产超碰| 亚洲综合影院| 亚洲另类天堂| 夜夜欢天天干| 亚洲在线91| 久久久一区二区三区麻豆| 久久亚码| 久草精品一区| 亚洲 欧美 另类 日韩 人妻一区| 蜜臀精品1区2区| 蜜臀国产AV中文字幕| 最近的最新的中文字幕视频| 尤物一级在线免费观看| 特级毛片特黄久久免费看| 免费的黄片有限公司| 日本视频在线中文字幕| 精品99999| 国产捆绑一区| 人人人摸人人| A级毛片在线看免费| 国产乱伦视频污| WWW.操逼.COM| 国产精品永久免费10000| 欧美一级美片在线观看免费| 欧美一二三级精品在线| 亚洲国产婷婷在线播放| 日韩免费大片一级播放| 国产av美女被艹的乱叫| 亚洲色综合| 夜夜一区二区| 伊人久久国产免费观看视频| 超碰天天操| 日韩八十路老熟女| 日产精品久久久一区二区| 欧美天堂在线| 日本αv| 国产亚洲日韩在线三区黑人| 精品一区二区亚洲国产| 五月婷婷丁香六月| 日韩内射视频| 亚洲国产青青| 国产成人精品网站| 亚洲中文字幕熟女| 97人妻免费中文字幕| 国产尹人在线视频免费| 超碰亚洲97| 亚洲 欧美 另类 日韩 人妻一区| 国产视频97| 蜜臀久久99精品久久久久| 涩综合导航| 欧美成人性爱视频大全| 欧美一区二区在线资源| 伊人在线大香蕉视频久久| 久久久久成人网| 欧美中文字幕日韩在线| 免费一级毛片在线视频观看| 久久国产99精品72福利| 欧美精品三区| 91亚洲网| 日本人人操人人操| 亭亭丁香激情| 91亚.色| 天天看夜夜看日日干| 玖玖资源综合在线视频| 99re3这里只有精品| 9997se| 国产精品又黄又猛又粗| 亚洲综合九九| 欧美日韩亚洲五月天婷婷| a啊啊啊啊啊啊啊啊一区二区| 欧亚无码视频| 男人的天堂不卡一区二区| 污污污8888| 97精品免费视频网站| 韩国黄片aaaa| 亚洲色图a| 亚洲色人阁| 久久久久国产一区二| 激情文学欧美| 久久久久少妇| 国产少妇肉丝在线观看| 97精品人妻一二三四| 亚洲国产欧美一区二区潘金莲 | 亚州男人的天堂| 91免费看一区二区三区| 女人爽到高潮久久久| 白嫩91在线亚洲| 岛国大片在线观看网站入口| 亚州再线| 涩综合导航| 欧亚综合一卡二卡中文字幕| 精品人妻久久久久一区二区三区| 日本色色色色色视频| 国产青视频| 人妻一区二区三区四区视频| 麻豆精品久久久久久久| 91色婷婷综合久久中文字幕二区| 人妻精品视频一区二区| 久久久久久九九九九九九| 亚一综合久久久久久久久久| 中出789在线视频| 久草精品国产99| 九久9热| 国产精品美女久久久久久网站| 这里只有精品久久| 啪啪啪综合| 深爱激情五月天| 欧美91网| 99精品免费| 亚洲熟女综合网| 亚洲欧美精品91| 97超碰中文在线| 欧美 亚洲 制服 精品| 欧美亚洲中文| 欧美狠狠弄| 欧美日韩免费性爱| 国产一| 91精品啪在线观看国产城中村| 伊人久久亚洲色欲综合网站 | 中文字幕在线观看第二页| 欧美色宗合| 歐美一級亂黃99在綫精品| 手机午夜电影神马久久| 色天堂综合| 强奸乱伦中文字幕AV| 精品无码一区二区三区| 九九热精品| 中文字幕欧美日韩三级| 久草婷婷| 欧美黄色片AAAAA| 青青操国产夫妻| 精品视频日日夜夜| 天天懆天天日| 国产2.3.4区| 欧美躁死她一区二区| 欧美福利视频啊啊啊啊| 啊啊啊啊啊啊啊在线| 97久久久| 久久精品福利影院| 91美女高潮| 欧美躁死她一区二区| 国产成人拍国产亚洲精品| 蜜臀亚洲综合一二三四区| 免费视频a级毛片免费视频| 思思热国产高清| 国产日韩欧美| 中文字幕日韩综合| 最新三级网址| 亚洲全色网| 天天日美女的B| 大香蕉123| 中文字幕亚洲永久精品| 干超碰碰熟女| 青青久久久| 歐美一級亂黃99在綫精品| 色噜噜人妻丝袜a∨先锋影| 在线观看中文字幕| 九九九九九九九| 2025亚洲男人天堂| 色色五月婷| 国产AV毛片| 人人搞人人插人人操| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 久久伊人大香蕉| 成全在线观看免费观看| 亚洲美女AV无码| 久久精品国产97欧美精品亚洲| 精品一区二区麻豆| 花野真衣| 五月丁香激情综合网| av网站在线观看了| 久久久久国产精品久久久| 国产精品午夜精品| 婷婷五月天无码 | 久久人妻少妇| 日韩99神马视频播放| 大香蕉伊人色偷偷在线| 国产成人久久久精品免费AV| wwwxxx日本爽| 欧美成熟性爱精品| 大香蕉伊人网| 日本女人久久久| 91痴汉| 久久网亚洲| 亚洲色悠悠久久88| 人妻精品一区二区全免费| 水野优香在线观看| 国产超碰| 欧美在线干| 天堂8在线新版官网| 老司机老司机午夜影院| 九九干| 爽极品影院| 超碰精品国产无码| 国产真实子伦对白| 97综合久久| 97视频在线看| 亚洲高清视频在线免费观看| 欧美色亚洲| 中文字幕丰满人妻日本| 亚洲伊人成综合成人网| 欧美亚洲自拍另类人妻| 无遮挡又黄又刺激的视频| 新亚洲无码| 视频国产成人精品日本亚洲18| 秋霞Av理论一级在线| 深夜福利黄片| 天天躁日日躁AAAAXXXX国产| 人人 操人人 操人人| 人人艹亚洲| 久久久久国产精品喷潮免费观看臀| 日韩人妻中文视频| 精品超碰国产| 亚州宗合另类| 亚洲欧洲精品成人| 免费亚洲国产精品久久一区| 人人妻人人色一区二区三区| 97色综合中文网| 97综合网| 天天操天天干一区二区| 日本性爱少妇| 久久九九综合| 厕所偷拍在线| 亚洲污污网站| 加勒比无码毛片| 久久78| 97在线精品观看视频| 91强热人妻| AA丁香综合激情| 国产性刺激| 插入粉嫩少妇视频| 久久一区二区蜜桃| 立川理惠被中出无码| 狠狠色狠狠色狠狠五月| 亚洲综合成人网| 午夜福利久久久噜久噜久久综合| 天天操人人操骚逼网站| 天天综合网在线91| 1769国内精品视频| 亚洲日韩精品在线播放| 精彩视频日韩| 色香综合天天影视综合 | 日本一级特级毛片视频| 欧美少妇性爱网站| 伊人天堂在线| 久久久精| 乱伦熟妇一区二区| 最近的最新的中文字幕视频| 国产乱婷婷精品二区三区| 天天日美女的B| 日日超碰亚洲| 手机看片1025| 97天天操天天干| 久久久久久人体| 国产中文大片资源中文字幕| 欧美后进式| 97精品网站| 玖玖爱在线视频免费观看| 日韩性爱网址| 亚洲色悠悠久久88| 伊人热综合| 成人看片网站| 蜜桃臀一区二区三区久久| 国产婷婷综合在线观看| 五月丁香在线| 成人资源中文字幕在线观看| 日本三级A片网站com| 欧美|91色综合| 中文字幕第7页| 极品尤物自安慰| 欧美色66| 午夜小电影在线插入淫高潮| 成人av免费观看| 色眯眯av| 亚欧免费| 天天日日本| 91人妻少妇| 精品超碰中文在线| 亚洲欧美综合图片| 97最新在线播放视频| 超碰午夜| 午夜爽爽爽在线观看永久入口姬片| 色鬼在线综合| 日本一级特级毛片视频| 资源在线观一 二| 国产免费小视频| 久精品无码av一区二免费国产在线观看| 亚洲AV无码久久精品蜜桃小说| AVE乱伦| 91暧暧| 日本操逼视频免费| 精品四五区| 久久只有精品| 福利风月五月天影院| 91精品人| 久久综合乱子伦国产免费| 99人妻| 人妻天天爽夜夜爽精品2| 国产精品ww久久| 九九九午夜| 中日韩一区二区三区欧美| 丰满少妇一区二区三区四区观看| 日韩国产精品人妻无码久久久| 厕所偷拍在线| 日韩免费看在线黄色片| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 日韩 国产 欧美自拍| 久久成年精品| 自拍视频一区在线观看| WWW美腿丝袜香蕉中文| 精品亚洲国产成人AV制服丝袜| 亚洲蜜臀精品视频久久| 丁香六月综合激情| 97综合久久| 大香蕉在线视频重口味毛片在线| 亚洲国产ⅴ高清在线观看| 欧洲自拍色图gif在线| 91在线精品| 久久中文字幕在线观看| 欧美大香蕉在线观看| 精品国产无码中文| 亚洲一区制服诱惑| 国产少妇肉丝在线观看| 欧美特大AA级黄片| 欧美最大综合网| 婷婷六月天| 综合久久久久久久久91| 免费亚洲国产精品久久一区| AAA久久| 亚洲美女av无码| 亚洲视频一二区| 人妻激情偷乱视三区频一区二区| 一区二区三区四区理论片| 伊人色综合超碰| 欧美强奸乱能| 深田咏美亚洲精品福利社| 本道综合精品| 啊啊啊啊二区好大| 亚洲超碰在线| 日韩高清黄片| 全国男人天堂网| 久草精品国产蜜臀| 天天爽夜夜操| 黄片色区软件| 午夜性刺激视频免费观看| 男人的天堂久久狠| 67914亚洲精品| 超碰人妻天天干| 亚洲天天更新| 色亚州人久干视频在线观看免费版| 久久精品一区二区三区不卡| 国产女人和拘做爰视频| 中文久久久| 中精品一区二区三区| 亚洲色图欧美色图制服丝袜| 色999五月色| 亚洲小电影免费涩涩成人在线高清 | 操逼大黄片| 人人妻人人爽一区二区三区| 日影院久久婷婷夜夜网| 校园春色 男人天堂 | 亚洲熟女乱色| 六月婷婷综合| 中文字幕奈奈美被公侵犯| 久操97| 97操97干| 黄色片G G G| 91色爽欧美| 天美传媒国产原创中文字幕亚洲欧美另类 | 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 自拍欧美| 国产视频一区二区在线观看| 亚洲色综合| 欧美成人一级免费电影| 老熟女乱伦一区| 97欧美视频| 熟女熟妇一区二区三四区| 国产精品午夜福利视频| 91处女视频在线观看| 男人的天堂激情| 国产一区二区三区中文字幕| 五月丁香影院| 丝袜大香蕉| 玖玖婷婷五月天| 91在线无码精品秘 软件| 黑人无码一区二区| 色官网色综合| 人人插人人摸人人| 淫荡少妇免费| 99久久婷婷丁香| 国产曰批免费观看久久久| 欧美日韩电影成人在线| 第四色奇米影视777| 国产亚洲欧美每日在线| 色欲三区| 草草影院日本第一页| 飘花国产午夜精品不卡| 亚洲无无码αⅴ每日更新| 午夜啪| 免费av在线播放二区| 亚洲 小说 欧美 激情 另类| 日本一区二区三区午夜观看| 操啊国产| 日韩性爱毛片操骚逼| 午夜一区二区三区国产| 国产51色综合久久免费| 18禁的网站在线| 国产精品久久伊人| 久久婷婷亚洲| 玖色AV| 久久伊人在线五区| AV天堂男人的天堂| 欧美在线视频播放| 蜜臀久久精品久久久久视频| 超碰偷拍| 啊啊啊免费视频| 伊人网免费视频| 激情国产乱伦Av| 手机看片1024你懂的国产| 五月丁香婷婷色| 99久久无色码| 媚薬在线视频麻豆| 淫纸中9区| 综合久久97| 久草免费福利在线播放| 色婷婷五月综合激情中文字幕| 2010男人的天堂| 鸥美精品一区二区久久婷婷| 亚洲色图第四色| 97天天| 八戒无码国产午夜福利| 玖玖爱免费观看视频| 欧美一级三级| 亚洲天堂情色| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | av天堂精品久久| 婷婷五月综合在线| 日本一片一区| 69久久| 自拍偷拍第26| 国产强奸超碰AV| 96AV精品| 69丨亚洲丨精品丨入口免费播放| 久久99国产精品| 成人精品一区二区91毛片不卡| 九九99精品| 亚洲伊人久久综合97| 欧美精品日韩久久久九| 一本道综合色图| 97热视频在线观看| 久久伊人最新网址视频| 国产精品视频白浆免费| 亚洲男人天堂2012| 综合少妇网| 麻花豆传媒剧国产MV出差| 96AV精品| 久久成人东京热人妻| 影音先锋新男人| 骚逼高潮久久精品| 91操人| 亚洲一卡二卡在线免费| 丁香五月天激情综合| 天天激色| 国产成人亚洲精品无码最新在线| 自拍鲍鱼一区在线高清观看免费| 国产精品 午夜福利| 97精品在线视频| 国产又操| 欧美熟女丝袜| 久久久99免费| 亚洲精品一区二区三区新线路| 97人人色| JIZZJIZZ国产精品喷水| 日韩情色AV| 91无码西班牙视频在线| 色婷婷99| 91高清日| 国产1769在线| 97精品久久久久中文字幕| 日韩在线地址一| 久99久视频精选| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 99久久亚洲精品无码毛片潘甜甜| 五月婷婷色色| 男人的天堂kva| 天天做日日爱夜夜爽| 日本高清加勒比| 熟妇的味道HD中文字幕| 久久久婷婷| 国产精品无码成人精品| 欧美成不卡网| 免费A片三p视频| 蜜桃精品一区二区三区ww| 亚洲天天操| 欧美色三级片91| 欧美色999| 久久25| 成人性爱免费播放| 好爽,再快点啊哈嗯嗯嗯嗯| 久久午夜色播影院免费高清| 久草成人福利导航| 亚洲天天操| 青青草自拍视频在线播放| 欧美97爱| 夜夜嗨AV蜜臀av| 亚洲影院无码在线| 精品然女一区二区| 欧美色视频在线| 超碰伊人在线| 亚洲精品日日夜夜52| 日韩91网| 欧美熟爽综合| 日本人妻伦在线中文字幕| 1204av韩国| 午夜爽爽爽在线观看永久入口姬片| 亚洲图片在线| 亚洲五月婷婷| 久操免费在线| 男人天堂久久日韩| 国产熟女免费观看久久| 久久婷婷一区| 欧美超碰9798| 国产毛片久久久久久久| 亚洲自拍青操视频| 五月天激情小说| 一区二区乱码福利| 青青草成人视频在线观看二区| 日韩欧美亚洲一区二区三区影院| 婷婷丁香人妻 | 91爱剪切久久| 亚州色站 日韩电影| 特级毛片特黄久久免费看| 色路综合| AV天堂男人的天堂| 日韩成人精品视频自拍| 东北女人高潮视频| 色女综合| 黑人精品成人一区二区三区| 成人性交午夜免费片| 日本97久久久精品| 一区二区三区精品视频| 色牛aV| 亚洲自拍青操视频| 97九色人妻| 精品一区二区成人| 91亚洲人| 精品视频久久区| 91n美女视频| 91强奸乱轮| 亚欧无码线免费观看视频| 中文字幕免费看| 色女99一级片在线观看| AV综合中文字幕干| 尤物视频一区| 91亚洲欧洲| 免费国产| 一本大道综合伊人精品热热| 久久婷婷五月天| 亚洲中文电影| 免費黃色視頻觀看一| 国产又黄又爽又刺激久久久久久 | 噜噜噜无码AV一级一级久久影院| 国产乱伦视频污| 婷婷丁香人妻 | 亚洲天堂资源在线| 色香伊人| 欧美亚洲丝袜美女电影| 天天插天天插| 黑人黄片在线免费观看| 不卡av在线中文字幕| 精品一级毛片在线观看| 亚洲 日本 不卡| 熟女熟妇伦久久影院毛片一区二区 | 久操免费电影| 综合网97| 热久日综合| 台湾佬中文娱乐自偷自拍| 操91| 亚洲国产一区二区三区四区国产| 亚洲精品性爱片| 国产日韩精品suv| 亚洲AV无码乱码| 亚洲 在线| 国产农村妇女毛片精品久久| 色香91| 99re在线精品78| 性生活无遮挡纯毛片在线看| 亚洲成人一二三区| 国产丝袜美女诱惑| 天综合网| 欧美不卡在线美女| 91ise欧美| 天天影视网综合少妇| 思思热在线观看| 久久丁香| 99re视频在线观看这里只有精品| 99re国产中文字幕| 国产精品自产拍在线观看社区| 色欲人妻一区二区在线| 久久久久国产精品久久久| 97久久国产| 国产精品视频在线观看| 夜夜躁狠狠躁日日躁av| 91久| 久久久一区二区三区四区五区| 9 1果冻精品视频| 久久亚洲一区二区色婷婷| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 性高潮久久久| 色97欧美| 熟妇女伦乱视频| 久夜视频| 啊啊啊在线观看| 性无码专区2020| 香蕉黄色一级视频| 久久精品欧美一区二区三区不卡| 亚洲激情综合另类男同| 日本操逼二区| 人人色人人操在线| 国产丝袜视频| 草伊人高潮喷水超碰|