SELECT?idFROMusersWHERE?age=?25改為SELECTidFROMusersWHERE?age=?25UNIONSELECTidFROMusersWHERE?age=?30No.5?謹慎使用IN和NOTININ和N…
點擊上方“IT那活兒”公眾號--專注于企業全棧運維技術分享,不管IT什么活兒,干就完了!!!
No.1 避免全盤掃描
當要查詢的數據量過大時全盤掃描的效率會很低。應該在 WHERE 和 ORDERBY 涉及的列上添加索引避免全盤掃描,能快速尋找數據。
No.2 避免NULL值判斷
在WHERE子句中如果對字段進行NULL值判斷索引會不起作用。可以在設計表結構時避免使用NULL值或者設置非空約束再就是給字段設置默認值。
No.3 避免使用 != 或 <>
在WHERE 語句中用 != 和 <> 也會讓MySql無法使用索引,最好是改為使用 =, <, > 支持索引的操作符。
No.4 避免OR條件
在WHERE子句中使用OR條件會使MySql索引失效。可以使用UNION來將多個查詢合并,或者拆分查詢邏輯。
SELECT idFROMusersWHERE age = 25
改為
SELECTidFROMusersWHERE age = 25
UNION
SELECTidFROMusersWHERE age = 30
No.5 謹慎使用IN和NOT IN
IN和NOT IN在處理大集合時,可能導致全盤掃描,特別是當IN內包含大量非連續的值時。為了提高性能,可以用BETWEEN來替代IN,特別是在查詢范圍較小時。
SELECT id FROM users WHERE age IN (25, 26, 27)
改為
SELECT id FROM users WHERE age BETWEEN 25 AND 27
No.6 LIKE查詢優化
LIKE查詢在處理部分匹配時可能會全盤掃描。尤其是在使用通配符%作為開頭時(如%abc%),MySQL無法使用索引,需要逐行匹配字符串。
避免使用%abc%或%abc,最好限制符號留在后綴位 (abc%)。
No.7 避免參數化查詢導致全盤掃描
參數化查詢可能會讓MySQL無法充分利用索引,可以通過在查詢中明確指定使用的索引來避免這個問題。
No.8 避免表達式操作
在WHERE語句中對字段進行表達式操作會使索引失效,應避免在查詢條件中使用這樣的操作。如果需要對某個字段進行計算,最好在應用程序層完成計算,并將結果傳遞給查詢,而不是在查詢中進行計算或使用函數。
No.9 使用EXISTS替代IN
當涉及子查詢時,EXISTS比IN在某些情況下效率更高, EXISTS一旦找到符合條件的記錄,就會停止進一步的查找,而IN則必須先執行整個子查詢,然后將結果返回。
No.10 索引數量控制
雖然索引能夠加快SELECT查詢的速度,但過多的索引會影響表的INSERT和UPDATE操作性能。因為每次數據的插入、更新、刪除都會使索引同步更新。通常一個表的索引數量最好不超過6個。
END
本文作者:劉 宸(上海新炬中北團隊)
本文來源:“IT那活兒”公眾號
來源:本文內容搜集或轉自各大網絡平臺,并已注明來源、出處,如果轉載侵犯您的版權或非授權發布,請聯系小編,我們會及時審核處理。
聲明:江蘇教育黃頁對文中觀點保持中立,對所包含內容的準確性、可靠性或者完整性不提供任何明示或暗示的保證,不對文章觀點負責,僅作分享之用,文章版權及插圖屬于原作者。
Copyright©2013-2025 ?JSedu114 All Rights Reserved. 江蘇教育信息綜合發布查詢平臺保留所有權利
蘇公網安備32010402000125
蘇ICP備14051488號-3技術支持:南京博盛藍睿網絡科技有限公司
南京思必達教育科技有限公司版權所有 百度統計