0

所以我正在开发一个由 Heroku 托管的生产 PostgreSQL 驱动的应用程序,我不知道我的数据需要什么类型的资源。

一点关于我的数据

我有 4 张
桌子

身份证

地址

联系方式

Accounts 有很多 ID,Accounts 有很多地址,Accounts 有很多 Affills。

大致会有:

1000万+账户

1400 万+地址

700万+ID

和 1500 万 + affils。

对此进行的查询将始终使用帐户上的名称进行过滤,但它将使用 DMETAPHONE 或 LEVENSHTEIN 进行匹配。我打算按名称索引。

查询可能如下所示:

SELECT (rows) FROM accounts 
WHERE DMETAPHONE(name) = 'example' AND id IN 
    (SELECT accountID FROM addresses 
     WHERE (conditions)) AND id IN 
         (SELECT accountID FROM IDs 
          WHERE (conditions)). 

对于这些类型的操作,我需要什么类型的资源才能获得良好的性能。我应该查看 2 GB 的数据库缓存,还是应该查看 7.5 GB,或者更多?感谢您的帮助。

4

1 回答 1

1
  • DB 总是可以从更多的 I/O 中获益。如果您可以获得多个文件系统(位于不同的物理磁盘上,不知道如何在 Heroku 上继续进行此操作),您可以使用tablespaces分发您的 DB 对象。尝试将表及其索引放在单独的磁盘上,或者将一个磁盘用于帐户 + 索引,另一个用于地址 + 索引。
  • 正如 foibs 提到的,函数结果可以被索引,这可以给你的用例带来巨大的提升
  • Postgres 将充分利用您提供给它的所有内存(直到您进入巨大的超大区域),尽您所能放入shared_buffers并确保您的内存work_mem足够大,以至于典型查询不必使用磁盘文件。
  • 如果查询速度很慢,分析 SQL 并对其进行优化通常比仅仅将硬件和金钱投入到问题上要有效得多。“Depesz”先生的漂亮打印机EXPLAIN ANALYZE是你的朋友。
于 2013-11-12T22:17:52.747 回答