联接表上的 GROUP BY 和相等查询的最佳索引



我在postgres:中有这个递归SQL查询

SELECT b.name, COUNT(*)
FROM a JOIN b ON a.x = b.x
WHERE a.value = some_value
GROUP BY b.name;

(计算每个b.name的a.value的出现次数(

有助于提高查询效率的最佳索引是什么?我假设对于a.value,在其上创建哈希索引会有所帮助。但是旁边的小组呢?是否有一些复合指数解决方案?还是另一种解决方案?

Never使用NATURAL JOIN。目前尚不清楚您的查询实际在做什么。犯错误很容易。最重要的是;天然的";join不使用使用外键关系显式声明的自然关系。

让我假设您的查询如下:

SELECT b.name, COUNT(*)
FROM a JOIN
b 
ON b.x = a.x
WHERE a.value = some_value
GROUP BY b.name;

在大多数数据库中,您需要以下索引:

  • a(value, x)
  • b(x, name)

最新更新