MySQL中许多索引的缺点

时间:2013-11-16 18:02:13

标签: mysql database indexing

情况

我有一个名为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

问题

这种做法是否属实?在DB中有这么多(或多于这个)索引是否有任何缺点?

1 个答案:

答案 0 :(得分:12)

  

并且有这个数量(或者超过数量)的任何缺点   这个)DB中的索引?

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

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

来自[here] [1]的索引的缺点表明:

  

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

     

首先,索引占用磁盘空间。通常空间使用不是   重要的,但是因为在每个列的每个列上创建索引   可能的组合,索引文件的增长速度要快得多   数据文件。在表具有大表大小的情况下,   索引文件可以达到操作系统的最大文件大小。

     

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

[1]:已删除垃圾邮件链接