【发布时间】:2011-08-18 21:42:35
【问题描述】:
我需要优化这个查询。教授建议使用索引,但我对如何使用感到非常困惑。如果我能得到一个关于什么是好的索引、为什么以及所需的实际代码的示例,那么我绝对可以自己完成剩下的工作。任何帮助都是极好的。 (PSQL 顺便说一句)
SELECT
x.enteredBy
, x.id
, count(DISTINCT xr.id)
, count(DISTINCT c.id)
, 'l'
FROM
((locationsV x left outer join locationReviews xr on x.id = xr.lid)
left outer join reviews r on r.id = xr.id)
left outer join comments c on xr.id = c.reviewId
WHERE
x.vNo = 0
AND (r.enteredBy IS NULL OR
(r.enteredBy <> x.enteredBy
AND c.enteredBy <> x.enteredBy
AND r.enteredBY NOT IN
(SELECT requested FROM friends WHERE requester = x.enteredBY)
AND r.enteredBY NOT IN
(SELECT requester FROM friends WHERE requested = x.enteredBY)))
AND (c.enteredBy IS NULL OR
(c.enteredBY NOT IN
(SELECT requested FROM friends WHERE requester = x.enteredBY)
AND c.enteredBY NOT IN
(SELECT requester FROM friends WHERE requested = x.enteredBY)))
GROUP BY
x.enteredBy
, x.id
我尝试在开头添加类似这样的内容,但它所花费的总时间没有改变。
CREATE INDEX friends1_idx ON friends(requested);
CREATE INDEX friends2_idx ON friends(requester);
【问题讨论】:
-
有人看到任何其他优化吗?
标签: database optimization indexing postgresql