我在New Relic
中看到此查询需要花费数千秒的时间:
SELECT "apps".* FROM "apps" WHERE "apps"."listing_id" = $1 ORDER BY "apps"."id" ASC LIMIT 1
它只是破坏了我的表现。该表很糟糕,因为它有超过50个非常稀疏的列,大约有5000万行。
listing_id
已编入索引。这是一个PostgreSQL
数据库,我实际上什么也不做,只允许每天auto vacuum
。
但我不知道在哪里查看以使查询执行得更快。此查询由ActiveRecord
生成。看起来它可能只是用于获取备份我的模型的表的属性。有没有办法缓存,所以我不必运行查询?
或者我还能做些什么才能做到这一点"高性能"?请注意,我在SE DBA网站上提出的问题略有不同,所以我不需要重新分类这个问题。我在这里的重点是找出为什么AR会生成这个查询,并且我可以做些什么来改变它,或者让它更有效率来对抗这样一个无赖的表。
答案 0 :(得分:1)
import QtQuick 2.3
import QtQuick.Window 2.2
Window {
visible: true
ToolbarButton {
id: toolbarButton
anchors.top: parent.top
anchors.left: parent.left
anchors.topMargin: 10
anchors.leftMargin: 10
// Add signal handler directly to emitter
onAddSaveHistory: dockWidget.text = "Button was clicked"
}
DockWidget {
id: dockWidget
anchors.bottom: parent.bottom
anchors.bottomMargin: 10
anchors.left: parent.left
anchors.leftMargin: 10
}
}
rails中的可以通过一系列语句生成。
你可以拥有
SELECT "apps".* FROM "apps"
WHERE "apps"."listing_id" = $1 ORDER BY "apps"."id" ASC LIMIT 1
App.where(listing_id: X).first
所以你可以找这两个。
答案 1 :(得分:0)
问题是你正在寻找最小的apps.id,而这不是索引的一部分。因此必须读取所有匹配的行以获取id,然后进行排序。我怀疑这是花时间。
[listing_id, id]
上的复合索引可以解决问题。