Mysql

我可以安全地索引 MySQL 中表的所有列嗎?

  • December 14, 2017

我有一張有 4 列的表。一列是主鍵,其他三列是對其他表列的引用。我在這四個表上使用連接作為搜尋過濾器。這些連接需要時間。

所以我想在列上建立索引,因為我讀到我應該在連接條件的列上創建索引。我的問題是,如果表的所有列都被索引,會有問題嗎?有沒有其他方法可以降低這些搜尋過濾器的時間複雜度。

更多提示:

  • 表1(主搜尋)-10億條記錄 primary_key fk1 fk2 fk3
  • 表 2-8 億條目 pk1 ..(8-9 列)
  • 表 3-7 億條 pk2 ..(10-12 列)
  • 表2-8.5億條目pk3 ..(7-8列)

我正在使用 MyISAM 引擎。

在查詢方面,表的索引永遠不應該是您首先關心的問題。

您計劃使用的查詢應該指示您需要的索引。

根據查詢,可以單獨索引某些列。其他查詢需要復合索引。ORDER BYandGROUP BY子句應該為索引提供即時提示。不使用此類提示可能會導致臨時表排序,而不是按所需的所需順序對數據使用索引。

列值的低基數應該消除對索引的需要。

即使考慮了這些因素,您可能會發現查詢可能需要一些調整(也稱為重構)以提高性能。

當您達到擁有正確索引的程度時,您不必擔心這些索引的大小。對於 MyISAM 表,這意味著 .MYI 文件可能會顯著增長。

索引文件的大​​小以及索引的數量現在應該與查詢的性能進行權衡,特別是如果索引提供了正確的數據順序和最快的檢索。

查詢的解釋計劃可能會隨著時間的推移而改變,具體取決於行數、列的基數、DELETE 和 UPDATE 的數量。一旦查詢的解釋計劃與幾個月前的樣子有所不同,您應該探索添加或刪除索引的需要。

引用自:https://dba.stackexchange.com/questions/11040