Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是什么降低了MySQL表上索引的速度_Mysql_Indexing_Sql Update_Sql Insert_Sql Delete - Fatal编程技术网

是什么降低了MySQL表上索引的速度

是什么降低了MySQL表上索引的速度,mysql,indexing,sql-update,sql-insert,sql-delete,Mysql,Indexing,Sql Update,Sql Insert,Sql Delete,因此,我回顾了MySQL中索引的相关文献,但我仍然对以下内容感到困惑。有人解释说,索引可能会降低MySQL查询的计算时间。据解释,这是基于对具有所述索引(称为sayindex_A)的表进行操作的查询。我知道,在某些情况下,MySQL必须重写其索引文件,以便在相关表上执行更新、插入或删除查询。我不明白的是这到底是怎么发生的。它必须在每次更新、插入或删除之后发生吗?(情况似乎并非如此。)或者,在发布重写之前,是否需要执行一定数量的上述操作?(在这种情况下,我如何找出有多少?)或者这也取决于用于该表的

因此,我回顾了MySQL中索引的相关文献,但我仍然对以下内容感到困惑。有人解释说,索引可能会降低MySQL查询的计算时间。据解释,这是基于对具有所述索引(称为say
index_A
)的表进行操作的查询。我知道,在某些情况下,MySQL必须重写其索引文件,以便在相关表上执行更新、插入或删除查询。我不明白的是这到底是怎么发生的。它必须在每次更新、插入或删除之后发生吗?(情况似乎并非如此。)或者,在发布重写之前,是否需要执行一定数量的上述操作?(在这种情况下,我如何找出有多少?)或者这也取决于用于该表的引擎?基本上,我希望更好地理解是什么导致索引减慢查询速度,以便在生产中更好地避免这种情况。请让我知道,如果我问什么是不清楚的,谢谢你的时间


编辑:答案似乎在于更好地理解RTree和BTree。这些结构用于管理MySQL中各种引擎中的索引。我将进一步回顾这些,并希望尽快就我的发现发布一个明确的答案。

是的,在每次查询后都会发布。因此,对于MyIsam批量插入,我们可以禁用密钥并执行所有插入,然后启用密钥返回。请阅读了解更多关于。(这在innodb中无论如何都不可用)

我感觉您对“更新索引”的含义感到困惑。让我详细说明一下,您有一个大表,并为您提供一些简化的指标:

  • 如果在表中插入(或更新或…)一百万行,则需要一百万个工作单位

  • 当您插入另一行时,只需1个工作单位


“重建索引”需要另外一百万个工作单位,但只有当您明确地
删除
重新创建
索引、某些情况下的
更改表
,以及一些其他模糊操作时,才会发生这种情况。

是的,索引必须在更新、插入或删除后更新。否则,索引就不是很有效。你需要看看你的
解释
,看看这个问题是从哪里来的。把它想象成某本定价过高的大学教科书后面的索引。如果你插入、更新或删除本书的任何部分,页码必须层叠,不是吗?否则索引将如何定位记录?如果不是这样,你就不会有一个非常有用的索引。你没有提到为什么你应该关心(在绝大多数情况下)在更新期间维护索引的微小开销。oracle和mysql等RDBMS的设计目的是使索引更新速度非常快,从操作上来说,开销是微不足道的。我还没有听说过树变得不平衡的可能性。他们可能会腐败。有一些机制可以处理(索引被锁定)。它还取决于引擎(InnoDB、MyISAM)。还有一些特殊情况允许您禁用密钥(
禁用密钥
)。@John Galt在特殊情况下这是一个问题。这些情况通常是由于表格设计不当造成的。表的索引越多,索引的类型(数据表示、索引大小、元素数)是影响更新过程中产生的开销的因素。谢谢您的链接。我会复习的,谢谢。这其实是我想知道的。一直以来,我都没有得到答案。我想读更多关于这方面的内容。你知道这种东西的好来源吗?《高性能MySQL》也许是一本可靠的书,但可能更高级、更丰富。在线手册(dev.mysql.com)几乎涵盖了所有内容,但它是作为参考手册组织的。我喜欢推荐我的博客。从开始,然后转到最后的一些链接。所以,我正确地了解了“更新索引”的含义?重建整个索引并不是一种常见的误解。但一旦你明白它是增量维护的,你就再也不会回头看了。理解增量维护对我来说是一个游戏规则改变者。谢谢