【问题标题】:Disadvantages of many indexes in MySQL [closed]MySQL中许多索引的缺点[关闭]
【发布时间】:2013-11-30 01:42:41
【问题描述】:

情况

我有一个名为follow 的表,这是表结构:

- follower_id
- following_id
- when // timestamp

这些是我执行的 SQL 查询:

SELECT * FROM follow WHERE follower_id = ? ORDER BY when LIMIT 0,20
SELECT * FROM follow WHERE following_id = ? ORDER BY when LIMIT 0,20
SELECT * FROM follow WHERE follower_id = ?
SELECT * FROM follow WHERE following_id = ?

这些是我的索引:

follower_id, when
following_id, when
follower_id
following_id

问题

这种方法是真的吗?在数据库中拥有这么多(或更多)的索引有什么缺点吗?

【问题讨论】:

  • 索引加速SELECT,但在INSERT 上花费更多。您需要对数据库的性能进行基准测试,看看它们是否有影响。任何其他建议都是猜测。
  • @BoristheSpider 谢谢。看起来索引在增加读取操作的同时减少了 insert update delete 之类的写入操作。
  • 好吧,反正你不需要最后两个索引。如果您只有 WHERE a = ?,也可以使用 (A, B) 上的索引。因此,前两个索引也可以用于后两个查询。
  • @MarkusWinand 很高兴在这里见到你。谢谢你的建议。我用when, follower_id index 怎么样?这是一样的吗?
  • @CanGeliş 不,那不一样。见这里:use-the-index-luke.com/sql/where-clause/the-equals-operator/…

标签: mysql database indexing


【解决方案1】:

拥有这个数量(或超过 这)数据库中的索引?

我认为这些索引数量不会影响您的性能。

但是您可能会注意到,使用 SELECT 而不是 INSERT 时,索引既好又快。

[这里][1] 的索引的缺点说:

当在列上创建索引时,MySQL 也会创建一个 已排序的单独文件,并且仅包含您的字段 有兴趣排序。

首先,索引占用磁盘空间。通常空间使用量不是 重要,但因为在每个 可能的组合,索引文件的增长速度会比 数据文件。在表大小较大的情况下, index 文件可以达到操作系统的最大文件大小。

其次,索引会减慢写查询的速度,比如 INSERT、UPDATE 和 DELETE。 因为 MySQL 必须在内部维护 指向实际数据文件中插入行的“指针”,所以 是在上述写作查询的情况下要付出的性能代价 因为每次更改记录时,都必须更新索引。 但是,您可能能够以这样的方式编写查询 不会导致非常明显的性能下降。

[1]:垃圾链接已删除

【讨论】:

  • 感谢您的回答。您的意思是索引在提高select 性能的同时会降低insert 的性能吗?
  • 明白了,谢谢!
  • @CanGeliş:- 不客气!
猜你喜欢
  • 2010-10-20
  • 1970-01-01
  • 2012-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-24
  • 2011-01-11
  • 1970-01-01
相关资源
最近更新 更多