我有一个简单的查询,它选择产品并按名称对其进行位置搜索。数据库(postgres)有大约 200 万个产品,标题被索引以更快地执行搜索。
现在,当我连续执行 5 个查询时,前几个(大约 4 个)执行得非常快,然后查询非常慢 - 有时超过 5 秒。
但是当我使用 GORM 在 GORM 中执行完全相同的查询时,或者当我直接连接到数据库时,它会在 20 毫秒内再次执行。
为什么 GORM 在几次查询后变得超级慢?
res := dbHandler.
Scopes(query.Paginate(listRequest)).
Where(where.Main, where.Values...).
Order(orderBy).
Find(rows)
GORM 生成的相关查询:
SELECT
"products"."id", "products"."active", "products"."title",
"products"."subtitle", "products"."description", "products"."isbn",
"products"."ean", "products"."bznr",
"products"."cover_picture", "products"."publication_date",
"products"."edition", "products"."publisher", "products"."stock",
"products"."delivery_time", "products"."selling_price",
"products"."width", "products"."height",
"products"."length", "products"."weight"
FROM
"products"
WHERE
products.title ILIKE '%Warum Frauen alles besser wissen - und trotzdem alles falsch machen%'
LIMIT 10
上面没有其他流量,只有那5个query接连发生,所以我没想到前四个20ms的query执行到5s+。