Firebird SQL 优化
Firebird SQL optimization
能否进一步优化此查询?
SELECT
s.event_id as "id",
s.event_start as "start",
p.treatment_id as "treatment_id",
s.status_id as "status_id"
FROM
SCHEDULEREVENT s
LEFT JOIN PATIENT_HAS_EVENT p ON p.event_id = s.event_id
WHERE
p.patient_id = 50
p.event_id 是主键。
p.patient_id
上有一个索引
执行大约需要一秒钟,这对我的需要来说太长了。
编辑:
最好的解决方案是通过将 LEFT JOIN
更改为 JOIN
.
向后执行此查询
SELECT
s.event_id as "id",
s.event_start as "start",
p.treatment_id as "treatment_id",
s.status_id as "status_id"
FROM
PATIENT_HAS_EVENT p
JOIN SCHEDULEREVENT s ON s.event_id = p.event_id
WHERE
p.patient_id = 50
平均执行时间已从 912 毫秒减少到 10.69 毫秒
做"backwards":
SELECT
s.event_id as "id",
s.event_start as "start",
p.treatment_id as "treatment_id",
s.status_id as "status_id"
FROM
PATIENT_HAS_EVENT p
JOIN SCHEDULEREVENT s ON p.event_id = s.event_id
WHERE
p.patient_id = 50
或者 "INNER JOIN".
"FROM SCHEDULEREVENT LEFT JOIN PATIENT_HAS_EVENT" 从 SCHEDULEREVENT 获取所有记录,然后加入 PATIENT_HAS_EVENT,然后应用 where.
Harriv 解决方案首先应用 PATIENT_HAS_EVENT,然后加入 SCHEDULEREVENT。
使用"INNER JOIN"将使引擎选择与 Harriv 解决方案相同的计划(我猜...)。
能否进一步优化此查询?
SELECT
s.event_id as "id",
s.event_start as "start",
p.treatment_id as "treatment_id",
s.status_id as "status_id"
FROM
SCHEDULEREVENT s
LEFT JOIN PATIENT_HAS_EVENT p ON p.event_id = s.event_id
WHERE
p.patient_id = 50
p.event_id 是主键。 p.patient_id
上有一个索引执行大约需要一秒钟,这对我的需要来说太长了。
编辑:
最好的解决方案是通过将 LEFT JOIN
更改为 JOIN
.
SELECT
s.event_id as "id",
s.event_start as "start",
p.treatment_id as "treatment_id",
s.status_id as "status_id"
FROM
PATIENT_HAS_EVENT p
JOIN SCHEDULEREVENT s ON s.event_id = p.event_id
WHERE
p.patient_id = 50
平均执行时间已从 912 毫秒减少到 10.69 毫秒
做"backwards":
SELECT
s.event_id as "id",
s.event_start as "start",
p.treatment_id as "treatment_id",
s.status_id as "status_id"
FROM
PATIENT_HAS_EVENT p
JOIN SCHEDULEREVENT s ON p.event_id = s.event_id
WHERE
p.patient_id = 50
或者 "INNER JOIN".
"FROM SCHEDULEREVENT LEFT JOIN PATIENT_HAS_EVENT" 从 SCHEDULEREVENT 获取所有记录,然后加入 PATIENT_HAS_EVENT,然后应用 where.
Harriv 解决方案首先应用 PATIENT_HAS_EVENT,然后加入 SCHEDULEREVENT。
使用"INNER JOIN"将使引擎选择与 Harriv 解决方案相同的计划(我猜...)。