Som*_*luk 5 mysql myisam performance index
我有一张有 4 列的桌子。一列是主键,其他三列是对其他表列的引用。我在这四个表上使用连接作为搜索过滤器。这些连接需要时间。
所以我想在列上建立索引,因为我读到我应该在连接条件的列上创建索引。我的问题是如果表的所有列都被索引会有问题吗?有没有其他方法可以降低这些搜索过滤器的时间复杂度。
更多提示:
我正在使用 MyISAM 引擎。
当涉及到查询时,表的索引永远不应该是您首先关心的问题。
您计划使用的查询应该决定您需要的索引。
根据查询,某些列可以单独建立索引。其他查询需要复合索引。andORDER BY
子句GROUP BY
应该为要创建的索引提供即时提示。不使用此类提示可能会导致临时表排序,而不是按所需顺序使用数据索引。
列值的低基数应该消除对索引的需要。
即使考虑到这些因素,您可能会发现查询可能需要一些调整(也称为重构)来提高性能。
当您达到拥有正确索引的程度时,您不必担心这些索引的大小。对于 MyISAM 表,这意味着 .MYI 文件可能会显着增长。
现在应该根据查询的性能权衡索引文件的大小以及索引的数量,特别是如果索引提供正确的数据排序和最快的检索。
查询的解释计划可能会随着时间的推移而变化,具体取决于行数、列基数、DELETE 和 UPDATE 的数量。一旦查询的解释计划与几个月前的情况发生变化,您应该探索是否需要添加或删除索引。