对 postgres 来说很新,似乎在这里有问题,我不确定该往哪个方向发展。
我有一个导致一些性能问题的查询,我不知道如何优化它。
查询实际上很简单:
SELECT transactions.* FROM transactions
LEFT OUTER JOIN companies ON "companies"."id" = "transactions"."company_id"
WHERE companies.code ILIKE '%777%'
ORDER BY transactions.id desc LIMIT 10
我想查找名称中包含 777 的公司的所有交易。数据库中有大约 2000 万笔交易和大约 200 家公司。
即使我们的 LIMIT 为 10,查询当前也会超时。我相信这是因为 ILIKE 没有使用索引,所以它非常慢。
这是否是您可能希望将 WHERE 过滤器添加到 JOIN 的实例?我已经对此进行了测试,如果找到记录,它可以快速运行。如果没有找到记录,它会再次超时。
我们应该研究一种可以提高速度的索引吗?