我有兩張桌子,一張稱為9m 行的鏡頭,一張稱為 50k 行的孔。我的 DBMS 是 SQLite。
目標是用從孔回傳的值替換鏡頭中x,y的零值。我有一整天都在運行以下查詢:z
UPDATE shots
SET x = h.hole_x,
y = h.hole_y,
z = h.hole_z
FROM holes h
LEFT OUTER JOIN shots s
ON h.tournament = s.tournament
AND h.course = s.course
AND h.year = s.year
AND h.round = s.round
AND h.hole = s.hole
WHERE s.end = 'hole'
AND s.x = '0.0'
AND s.y ='0.0'
AND s.z = '0.0'
AND h.hole_x != '0.0'
AND h.hole_y != '0.0'
AND h.hole_z != '0.0'
我在這里讀到aSubquery可能比JOIN. 如何重寫我的查詢以使其變得更快?
uj5u.com熱心網友回復:
您在這里的主要問題是您正在進行不必要的連接holes,您必須洗掉該連接。
UPDATE這是SQLite中類似連接的陳述句的正確語法:
UPDATE shots AS s
SET x = h.hole_x,
y = h.hole_y,
z = h.hole_z
FROM holes AS h
WHERE h.tournament = s.tournament AND h.course = s.course
AND h.year = s.year AND h.round = s.round AND h.hole = s.hole
AND s.end = 'hole' AND s.x = '0.0' AND s.y = '0.0' AND s.z = '0.0'
AND h.hole_x <> '0.0' AND h.hole_y <> '0.0' AND h.hole_z <> '0.0';
另外,你為什么要比較'0.0'?如果這些列hole_?是數字,那么您應該將它們與.0.0或. 進行比較0。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/511647.html
