我有来自12个表的2个表,这2个表有数百万个记录,当我从这些表中检索数据时需要更多时间。我听说过索引,但我认为索引不是一种可以在这里使用的正确方法。因为每次我需要获取整个记录而不是记录的2-3列。我也应用了索引,但是由于我获取了整个记录,所以执行时间比没有索引要花费更多。
那么,这里可以使用什么样的正确方法呢?
答案 0 :(得分:1)
我的观点基于Oracle,但类似的原则可能适用于其他RDBMS。请使用所使用的系统标记您的问题。
对于索引列的数量大多是不相关的。更重要的是行数。但我猜你需要所有这些或大部分都需要。索引在这种情况下无济于事,因为它只会在流程中添加另一个步骤,而不会减少完成的工作量。
所以你似乎做的是大表扫描。这些通常不会被缓存,因为它们基本上会从存储在那里的所有其他有用数据中清除整个缓存。因此,每次选择这种数据时,都必须从光盘中划出,也可能通过电线发送。这肯定需要一些时间。
根据您的描述,最好的方法是通过尽可能地将数据缓存到应用程序来减少光盘读取和网络流量。尝试在应用程序的计算机上设置缓存,可能是应用程序的一部分。读取数据一次,将其放入缓存中,然后从中读取数据。内存数据库允许您保留基于SQL的访问路径(如果这对您有任何价值)。
在任何人尝试使用之前,可能会尝试在后台填充缓存。
当然这会耗费相当多的记忆,你必须判断这是否可行。
第二种方法是调整缓存设置,使数据库在内存中缓存这些表。但请注意,这将影响整个数据库的性能,而不是以积极的方式。
第三个选项可能是将处理逻辑移动到数据库中。它不会减少光盘I / O的数量,但至少你会把网络带出循环(假设这是问题的一部分)
答案 1 :(得分:0)
你可以尝试一些方法: -
希望它有所帮助。我已经测试了所有三个MySQL数据库 - django(python)应用程序,它们显示了良好的结果。