2

在我的本地开发中,我使用 ActiveRecord 进行的查询需要 1695 毫秒,包括渲染视图,但是在 Heroku 上,我使用相同的查询得到请求超时,这意味着它需要 30 多秒。关于 Heroku 或 Postgres 有什么我不知道的东西可能会导致这种情况吗?

这是查询:

Event.where(id: Details.select("event_id").where('email like \'%gmail%\''))

详细信息表的电子邮件属性没有索引。

在本地,explain_threshold 设置为 nil,但我怀疑 1.6s 查询无论如何都会有问题。

数据量并没有太大的不同,不像1000个和1000000个,这就是为什么我认为它应该花费大约相同的时间。

4

1 回答 1

2

这里的数据量很大,因为:

in (select ... where email like '%gmail%')

不能使用索引。这是对整个表的有保证的 seq 扫描。你拥有的行越多,它就会越慢。

尝试使用以下技巧稍微更改查询:

http://postgres.cz/wiki/PostgreSQL_SQL_Tricks#LIKE_optimalization

于 2013-07-06T15:21:56.687 回答