1

我有一个包含 70000 行的表,计划在几个月内慢慢增长到 140000 左右。

我有 4 个低基数列,其中包含 0/1 值,如 FALSE/TRUE。我的表开销(优化后)为 28 MB,表大小为 6 MB。我为这 4 列添加了 4 个单独的简单索引。我的开销降至 20 MB。

我知道索引低基数列(其中有很多行,但很少有不同的值)对查询的性能几乎没有影响,但我的开销下降了。如果没有这些索引,开销就会增加。我应该保持较低的开销还是应该保留可能毫无意义的索引?哪个对性能影响最大?

PS Table 主要以可变负载读取,从每分钟数千个查询到每天数百个查询不等。写入主要是更新这 4 个布尔列或 1 个时间戳列。

4

1 回答 1

1

当您处理具有数千万行的表大小时,索引并不是毫无意义的,而且在处理您现在正在处理的表大小时,您只会看到查询性能的微小改进。

您最好将索引保持原样,并重新考虑您的数据库架构。一个查询不应该使用 20+ MB 的内存,随着数据库的增长,它的性能只会滚雪球成更大的问题。

也就是说,在典型的 mysql 数据库中,从 70k 行跳转到 150k 行并不是一个巨大的飞跃。如果性能已经是一个问题,那么这里已经存在一个更大的问题。例如,如果您在数据库中存储大型 blob,则最好将数据存储在文件中,并将其位置保存为表中的 varchar 字段。

要考虑的另一件事是,如果您绝对必须保持数据库模式完全按照原样,那就是考虑对数据进行分区。您通常可以按 ID 或日期时间对表进行分区,并看到性能有相当大的改进。

于 2013-08-14T18:54:29.580 回答