• <del id="a8uas"></del>
    • 千鋒教育-做有情懷、有良心、有品質的職業教育機構

      400-811-9990
      手機站
      千鋒教育

      千鋒學習站 | 隨時隨地免費學

      千鋒教育

      掃一掃進入千鋒手機站

      領取全套視頻
      千鋒教育

      關注千鋒學習站小程序
      隨時隨地免費學習課程

      上海
      • 北京
      • 鄭州
      • 武漢
      • 成都
      • 西安
      • 沈陽
      • 廣州
      • 南京
      • 深圳
      • 大連
      • 青島
      • 杭州
      • 重慶
      當前位置:合肥千鋒IT培訓  >  技術干貨  >  mysql inner join為什么不走索引?

      mysql inner join為什么不走索引?

      來源:千鋒教育
      發布人:xqq
      時間: 2023-10-14 12:14:51

      一、mysql inner join為什么不走索引

      因為索引的優勢是在大表中過濾出小的結果集進行聯接,mysql inner join句根本沒有任何過濾條件。另外表很小的話全表掃描比索引快。針對查詢語句過慢的問題,首先使用explain關鍵字對sql的執行計劃進行分析。發現整個查詢過程中均沒有使用索引,每個表的數據不大,但是三張表聯合,數據量直接乘積量級了;

      既然定位到索引問題,就去數據庫查看表的索引信息,卻發現相關字段已經建立了索引,但是查詢過程中卻未使用到索引;

      使用左外連接時,數據庫會以左表為驅動,右表被驅動,考慮使用inner join替換left join來觀察數據庫查詢是否會進行優化,替換后使用explain發現retailer表作為了被驅動表,且使用了索引,但是customer兩個表仍然未走索引,且耗時過長;

      經過對關聯表的結構進行深入對比,且對字段類型、長度、編碼等信息對比后發現數據表的編碼方式存在差異,retailer表中字段字符集格式為utf8mb4,而customer表中字符集格式為utf8;

      將關聯字段字符集統一后,使用left join左外連接仍然可以很好的命中索引,查詢時間直接0.1s。

      延伸閱讀:

      二、InnoDB是什么

      InnoDB 是 MySQL 上名列前茅個提供外鍵約束的數據存儲引擎,除了提供事務處理外,InnoDB 還支持行鎖,提供和 Oracle 一樣的一致性的不加鎖讀取,能增加并發讀的用戶數量并提高性能,不會增加鎖的數量。InnoDB 的設計目標是處理大容量數據時最大化性能,它的 CPU 利用率是其他所有基于磁盤的關系數據庫引擎中最有效率的。

      InnoDB 是一套放在 MySQL 后臺的完整數據庫系統,InnoDB 有它自己的緩沖池,能緩沖數據和索引,InnoDB 還把數據和索引存放在表空間里面,可能包含好幾個文件,這和 MyISAM 表完全不同,在 MyISAM 中,表被存放在單獨的文件中,InnoDB 表的大小只受限于操作系統文件的大小,一般為 2GB。

      聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。

      猜你喜歡LIKE

      Hbase適合存哪些數據?

      2023-10-14

      什么是采購管理?

      2023-10-14

      什么是ai算法?

      2023-10-14

      最新文章NEW

      linux系統中的安全設置有哪些?

      2023-10-14

      golp是什么設備?

      2023-10-14

      app的啟動流程都包括哪些步驟?

      2023-10-14

      相關推薦HOT

      更多>>

      快速通道 更多>>

      最新開班信息 更多>>

      網友熱搜 更多>>