0

我有 12 个表中的 2 个表,这 2 个表有数百万条记录,当我从这些表中检索数据时,它需要更多时间。我听说过索引,但我认为索引不是可以在这里使用的正确方法。因为每次,我都需要获取整条记录而不是 2-3 列的记录。我也应用了 indexing ,但它比没有 indexing 花费了更多的执行时间,因为我获取了整个记录。

那么,在这里可以使用什么正确的方法呢?

4

2 回答 2

1

我的论点基于 Oracle,但类似的原则可能适用于其他 RDBMS。请用使用的系统标记您的问题。

对于索引,列数几乎是无关紧要的。更重要的是行数。但我想你也需要所有或几乎所有这些。在这种情况下,索引将无济于事,因为它只会在流程中添加另一个步骤,而不会减少完成的工作量。

所以你似乎做的是大表扫描。这些通常不会被缓存,因为它们基本上会从存储在那里的所有其他有用数据中刷新整个缓存。因此,每次您选择此类数据时,您都必须从光盘中刮入,也可能通过电线发送。这势必需要一些时间。

根据您的描述,最好的方法可能是通过将数据缓存到尽可能靠近应用程序的位置来减少磁盘读取和网络流量。尝试在应用程序的机器上设置缓存,可能作为应用程序的一部分。读取数据一次,将其放入缓存中,然后再从它们中读取。如果这对您有任何价值,内存数据库将允许您保留基于 SQL 的访问路径。

可能在任何人尝试使用它之前尝试在后台填充缓存。

当然这会消耗相当多的内存,你必须判断这是否可行。

第二种方法是调整缓存设置以使数据库将这些表缓存在内存中。但请注意,这将影响整个数据库的性能,而不是以积极的方式。

第三种选择可能是将您的处理逻辑移动到数据库中。它不会减少磁盘 I/O 的数量,但至少您可以将网络排除在循环之外(假设这是问题的一部分)

于 2012-08-18T06:20:14.003 回答
0

有几种方法可以尝试:-

  1. 启用/增加数据库的查询缓存大小。
  2. 应用程序级别的 memcached 将提高您的性能(当然)。
  3. 调整您的查询以获得最佳性能,并配置最佳工作索引。

希望能帮助到你。我已经为 MySQL 数据库测试了所有三个 - django(python) 应用程序,它们显示出很好的结果。

于 2012-08-18T06:05:42.887 回答