MySQL – 为什么不索引每个领域?

最近我学到了索引的奇迹,性能有了很大的提高。 但是,就我所知,我似乎无法find这个问题的答案。

索引很好,但为什么不能只索引所有字段来使表格变得非常快? 我相信有一个很好的理由不这样做,但是如何在三场比赛中的三场比赛? 10在30场? 应该在哪里画线,为什么?

索引占用内存空间(RAM); 索引太多或太大,数据库将不得不将它们交换到磁盘。 他们还增加了插入和删除时间(每个索引必须更新插入/删除/更新的每一块数据)。

你没有无限的记忆。 使所有索引适合内存=好。

你没有无限的时间。 只索引你需要索引的列最小化插入/删除/更新性能命中。

请记住,每当更新,插入或删除行时,都必须更新每个索引。 因此,索引越多,写入操作的性能就越差。

此外,每个索引占用更多的磁盘空间和内存空间(被调用时),所以它也可能会延缓读取操作(对于大型表)。 看一下这个

你必须平衡CRUD的需求。 写入表格变得缓慢。 至于绘制线的位置,取决于数据的处理方式(sorting过滤等)。

索引将占用驱动器和RAM的更多分配空间,而且还会提高性能。 不幸的是,当它达到内存限制时,系统将放弃驱动器空间并冒险性能。 实际上,您不应该将任何您认为不涉及的字段编入任何一种数据遍历algorithm,既不插入也不search(WHERE子句)。 但是如果没有其他的话 默认情况下,你必须索引所有字段。 您应该考虑unindexing的领域是否只有主持人使用查询,除非他们也需要速度