所以我已经回顾了有关MySQL索引的文献,但我仍然对以下内容感到困惑。据解释,索引有可能在计算时间方面减慢MySQL查询速度。据解释,这是基于使用所述索引在表上操作的查询,称为index_A
。据我所知,由于相关表上发生的UPDATE,INSERT或DELETE查询,MySQL必须在某些时候重写其INDEX_A
的索引文件。我不明白的是这究竟是怎么发生的。必须在每次UPDATE,INSERT或DELETE之后发生吗? (这似乎不是这种情况。)或者在重写发出之前是否需要执行一定数量的所述操作? (在这种情况下,我将如何找出多少?)或者这取决于该表所使用的引擎?基本上,我希望更好地理解可能导致我的索引减慢查询的原因,以便我可以更好地避免在生产中。如果我提出的任何问题都不清楚,请告诉我,谢谢你的时间。
编辑:似乎答案在于更好地理解Rtrees和Btrees。这些是用于管理MySQL中各种引擎中的索引的结构。我将进一步审查这些内容,并希望尽快就我的发现发表明确的答案。
答案 0 :(得分:1)
是的,它会在每次查询后执行。因此,对于MyIsam批量插入,我们可以禁用密钥并执行所有插入,然后启用密钥。请阅读that了解更多信息。 (无论如何,这在innodb中都不可用)
答案 1 :(得分:1)
我觉得你对它的含义感到困惑"更新索引"。让我详细说明你有一个大表并给你一些简化的指标:
如果INSERT
(或更新或......)表中有一百万行,则需要一百万个单位。
当你INSERT
多一行时,只需要1个单位的努力。
To"重建索引"需要另外百万个工作单元,但只有当您明确DROP
和reCREATE
索引,某些情况为ALTER TABLE
以及其他一些模糊行为时才会发生这种情况。