索引多个数据库列的成本是多少?

9 浏览
0 Comments

索引多个数据库列的成本是多少?

我正在开发一个使用MySQL表格索引3个列的应用程序。我担心当表格记录数量达到一定程度时,保存新记录的时间会变慢。请告知如何最好地处理列的索引。

更新

我正在索引一个point_value,user_id和event_id,这些都是为了客户端的目的而必需的。比如,根据球员ID和比赛ID计分棒球比赛。在表格保存了两个赛季的记录后,每天插入大约200条新记录的成本会是多少,比如说72,000分,然后经过5个赛季,可能会有25万条记录?这只是举例,但我预计每天会插入25到200条记录。

0
0 Comments

索引多个数据库列的成本是什么?

索引多个数据库列的成本是指在更新和插入操作中所需的时间成本。当进行大量的插入操作时,这种成本会显著增加。为了解决这个问题,我们可以在开始大量插入操作之前删除索引,然后在插入完成后重新创建索引。通过这种方式,我们可以节省90%的时间。

在一个以单用户为主的桌面系统中,实际上我们在开始"导入数据"的过程之前会删除索引。这个过程首先会删除所有记录,然后在同一张表中插入大量的记录。完成插入操作后,我们会重新创建索引。这个方法适用于任何数据库,不仅仅是Sybase数据库。

所以,在使用索引时要谨慎,它们并不是"免费"的。在插入大量数据时,特别要注意索引会带来的性能损耗。

对于你的问题"插入大量行",是的,我指的是插入大量的行。

我对Sybase一无所知,但是你可以在一个事务中禁用触发器,然后在之后启用它,而不是删除和创建触发器。

0
0 Comments

索引多个数据库列的成本是什么?

这个问题的出现的原因是我对我的真实项目和真实的MySQL数据库进行了一些简单的测试。

我的测试结果是:向表中添加平均索引(一个索引中包含1-3列)会使插入操作变慢2.1%。因此,如果您添加20个索引,您的插入操作会变慢40-50%。但是您的查询操作会快10-100倍。

那么,是否可以添加多个索引呢?-这取决于:)我给出了我的测试结果-您可以自己决定!

嗯,这取决于插入操作的类型和使用模式。您是否有100个同时插入的用户,他们在更新相同的索引叶块时彼此竞争?还是单个脚本插入随机值,以使得您会在叶节点上下创建块分裂?我建议2.1%是一个下限值,不是平均值或上限。

0
0 Comments

在使用数据库时,我们需要考虑对哪些列进行索引。一般来说,我们会选择一些逻辑上最有意义的列进行索引,比如在CUSTOMERS表中的客户ID列。然后我们可以定期运行应用程序并收集统计数据,以了解数据库的性能。DB2上的RUNSTATS是一个例子,我希望MySQL也有类似的工具。

当我们发现一些经常运行的查询需要进行全表扫描(或由于其他原因运行时间过长)时,我们就应该添加更多的索引。优化一个每月运行一次的午夜查询,使其在12:05完成而不是12:07,意义并不大。然而,将一个面向客户的查询时间从5秒缩短到2秒,则是一个巨大的改进(但仍然太慢了,面向客户的查询应该在可能的情况下达到亚秒级)。

添加更多索引往往会减慢插入操作的速度,但加快查询的速度。所以这是一个权衡的过程。这就是为什么只有在特定问题出现时才添加索引。其他情况都属于过早优化,应该避免。

此外,定期重新审视已有的索引是否仍然需要。可能导致添加索引的查询已经不再频繁运行,不再需要这些索引了。

老实说,我认为在一个表上对三列进行索引不会导致性能问题,除非你计划存储非常庞大的行数。索引的效率还是相当高的。

在编辑后提到的问题中,你想要对一个包含200个记录的表进行插入操作,其中包含72,000个记录(两个赛季)或者甚至可能有25万个记录(五个赛季)。我可以告诉你,每天插入200条记录对于一个数据库来说是非常小的数据量,你不需要担心这三个索引。

就在这个星期,我们在工作中向一个数据库表中导入了一天的交易记录,其中包含了210万条记录(我们每秒至少从25台独立机器上获得一次交易)。而且这个表还有四个复合主键,比你的三个单独主键更加复杂。

当然了,这是在DB2数据库上的情况,但我无法想象IBM的数据库会比MySQL差到只能处理DB2负载的0.01%。

0