MySQL 優化


MySQL 優化

  • 表關聯查詢時務必遵循 小表驅動大表 原則;
  • 使用查詢語句 where 條件時,不允許出現 函數,否則索引會失效;
  • 使用單表查詢時,相同字段盡量不要用 OR,因為可能導致索引失效,可以使用 UNION 替代;
  • LIKE 語句不允許使用 % 開頭,否則索引會失效;
  • 組合索引一定要遵循 從左到右 原則,否則索引會失效;
  • 索引不宜過多,根據實際情況決定,盡量不要超過 10 個;
  • 每張表都必須有 主鍵,達到加快查詢效率的目的;
  • 分表,可根據業務字段尾數中的個位或十位或百位(以此類推)做表名達到分表的目的;
  • 分庫,可根據業務字段尾數中的個位或十位或百位(以此類推)做庫名達到分庫的目的;
  • 表分區,類似於硬盤分區,可以將某個時間段的數據放在分區里,加快查詢速度,可以配合 分表 + 表分區 結合使用;

#神器 EXPLAIN 語句

EXPLAIN 顯示了 MySQL 如何使用索引來處理 SELECT 語句以及連接表。可以幫助選擇更好的索引和寫出更優化的查詢語句。

使用方法,在 SELECT 語句前加上 EXPLAIN 即可,如:

EXPLAIN SELECT * FROM tb_item WHERE cid IN (SELECT id FROM tb_item_cat)

 

    • id: SELECT 識別符。這是 SELECT 的查詢序列號
    • select_type: SELECT類型,可以為以下任何一種
    • table: 輸出的行所引用的表
    • partitions: 表分區
    • type: 聯接類型。下面給出各種聯接類型,按照 從最佳類型到最壞類型 進行排序
    • system: 表僅有一行(=系統表)。這是 const 聯接類型的一個特例。

possible_keys:

       指出 MySQL 能使用哪個索引在該表中找到行
    • key: 顯示 MySQL 實際決定使用的鍵(索引)。如果沒有選擇索引, 鍵是 NULL。
    • key_len: 顯示 MySQL 決定使用的鍵長度。如果鍵是 NULL, 則長度為 NULL。
    • ref: 顯示使用哪個列或常數與 key 一起從表中選擇行。
    • rows: 顯示 MySQL 認為它執行查詢時必須檢查的行數。多行之間的數據相乘可以估算要處理的行數。
    • filtered: 顯示了通過條件過濾出的行數的百分比估計值。
    • Extra: 該列包含 MySQL 解決查詢的詳細信息

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM