0
我有以下數據庫計劃: 表「e_tram」中有成千上萬的「汽車」。 每輛車可以有更多的記錄與表「e_vozy_typy」汽車類型的信息。在表「e_vozy_dopravci」中有關於所有者的信息,並且在「e_vozy_razeni」和「e_vozy_evc」中有關於汽車登記等的信息。 在「poradi」列中具有最新記錄最大值和最舊記錄最小值(最小值通常1)。緩慢查詢與依賴查詢JOIN
我想寫入SELECT,它會爲每輛車返回其他表中的最新信息。
我嘗試以下操作:
SELECT
et.id
aktevt.ntyp,
aktevt.typ,
akteve.evc,
akteve.ind,
aktevr.razeni,
FROM e_tram AS et
INNER JOIN (
SELECT idvozu, MAX(poradi) AS aktporadi
FROM e_vozy_typy AS evt
GROUP BY evt.idvozu
) AS evt
ON et.id = evt.idvozu
INNER JOIN e_vozy_typy AS aktevt
ON et.id = aktevt.idvozu AND evt.aktporadi = aktevt.poradi
INNER JOIN (
SELECT idvozu, MAX(poradi) AS aktporadi
FROM e_vozy_dopravci AS evd
GROUP BY evd.idvozu
) AS evd
ON et.id = evd.idvozu
INNER JOIN e_vozy_dopravci AS aktevd
ON et.id = aktevd.idvozu AND evd.aktporadi = aktevd.poradi
INNER JOIN (
SELECT idvuzdopravce, MAX(poradi) AS aktporadi
FROM e_vozy_evca AS eve
GROUP BY eve.idvuzdopravce
) AS eve
ON aktevd.id = eve.idvuzdopravce
INNER JOIN e_vozy_evca AS akteve
ON aktevd.id = akteve.idvuzdopravce
AND eve.aktporadi = akteve.poradi
LEFT JOIN (
SELECT idvuzdopravce, MAX(poradi) AS aktporadi
FROM e_vozy_razeni AS evr
GROUP BY evr.idvuzdopravce
) AS evr
ON aktevd.id = evr.idvuzdopravce
LEFT JOIN e_vozy_razeni AS aktevr
ON aktevd.id = aktevr.idvuzdopravce
AND evr.aktporadi = aktevr.poradi
GROUP BY et.id
ORDER BY akteve.evc, akteve.ind, et.id
儘管在所有列ID(+外鍵柱)指標和poradi此查詢需要大約90秒。我可以在EXPLAIN中看到MySQL不在JOIN中的依賴查詢中使用索引。有沒有解決方案可以有效地做到這一點?