ret*_*.at 6 sql database postgresql indexing
ATM我正在努力学习如何有效地使用数据库知识,并希望获得一些专家意见.我目前没有任何性能问题.我想知道,你将如何使用此查询处理索引:
SELECT B.event,
COALESCE(B.system, C.surname || ' ' || C.forename) AS name,
C.label,
B.timestamp
FROM A
INNER JOIN B ON A.event=B.event
INNER JOIN C ON B.state=C.id
LEFT OUTER JOIN D ON B.hur=D.id
WHERE A.id IN(12,13,14,15,...)
ORDER BY B.event, B.timestamp
Run Code Online (Sandbox Code Playgroud)
A.id,C.id并且D.id已经是主键
UPDATE 通常我会把INDEX(A.event)和INDEX(B.event,B.timestamp)放在一起.它是否正确?那么B.event,B.state和B.hur呢?
将您的查询重写为:
SELECT B.event,
COALESCE(B.system, C.surname || ' ' || C.forename) AS name,
C.label,
B.timestamp
FROM B
INNER JOIN
C
ON C.id = B.state
LEFT OUTER JOIN
D
ON D.id = B.hur
WHERE B.event IN
(
SELECT event
FROM A
WHERE A.id IN (12, 13, 14, 15)
)
ORDER BY
B.event, B.timestamp
Run Code Online (Sandbox Code Playgroud)
,并创建复合索引B (event, timestamp)