4

所以我查阅了有关 MySQL 中索引的文献,但我仍然对以下内容感到困惑。有人解释说,索引可能会在计算时间方面减慢 MySQL 查询的速度。有人解释说,这是基于在具有所述索引的表上操作的查询,称为 say index_A。我知道在某些时候 MySQL 必须重写它的索引文件INDEX_A作为在相关表上发生的 UPDATE、INSERT 或 DELETE 查询的结果。我不明白这到底是怎么发生的。必须在每次 UPDATE、INSERT 或 DELETE 之后发生吗?(这似乎不是这种情况。)或者在发出重写之前是否需要执行一定数量的上述操作?(在这种情况下我怎么知道有多少?)或者这是否也取决于用于该表的引擎?基本上,我希望更好地了解可能导致我的索引减慢查询速度的原因,以便在生产中更好地避免这种情况。如果我所问的任何问题不清楚,请告诉我,并感谢您的宝贵时间。

编辑:似乎答案在于更好地理解 Rtrees 和 Btrees。这些是用于管理 MySQL 中各种引擎中的索引的结构。我将进一步审查这些,并希望很快就我的发现发表明确的答案。

4

2 回答 2

1

是的,它会在每次查询后执行。因此,对于 MyIsam 批量插入,我们可以禁用键并执行所有插入,然后再启用键。请阅读以了解更多信息。(无论如何,这在 innodb 中不可用)

于 2013-03-20T16:57:06.753 回答
1

我感觉到您对“更新索引”的含义感到困惑。让我通过说您有一张大桌子并给您一些简化的指标来详细说明:

  • 如果您INSERT(或更新或......)将一百万行放入表中,则需要一百万单位的努力。

  • 当你INSERT多排一排时,只需要 1 个单位的努力。

“重建索引”需要另外一百万个单位的工作,但这只有在您明确DROPreCREATE索引、某些情况下ALTER TABLE以及其他一些晦涩的操作时才会发生。

于 2015-11-26T07:52:17.493 回答