簡體   English   中英

如何通過多個連接加速從 MySQL 查詢加載數據

[英]How to speed up loading data from MySQL query with multiple joins

當我運行此查詢時,它只顯示未完成的加載。 因此,運行查詢的時間已經用完,而沒有顯示任何數據。 事實上,這使得計算機操作變得非常緩慢。

這是問題所在。 我正在選擇並執行多個連接以獲取正確的項目...此查詢需要很長時間。 有誰知道我如何加快速度? 這是查詢。

SELECT a.*, 
LEFT(a.tgl_inovasi, 10) AS tgl_ino, b.`nm_unit`, c.`nm_inovasijns`, 
d.`nm_regulasi`, e.`nm_sediasdm`, f.`nm_anggaran`, g.`nm_it`, h.`nm_bimtek`, 
i.`nm_renstra`, j.`nm_jejaring`, k.`nm_replikasi`, l.`nm_pedoman`, 
m.`nm_pengelola`, n.`nm_informasi`, o.`nm_penyelesaian`, p.`nm_partisipasi`, 
q.`nm_kemudahaninf`, r.`nm_kemudahanpro`, s.`nm_online`, t.`nm_kecepatan`, 
u.`nm_kemanfaatan`, v.`nm_kepuasan`, w.`nm_user`, x.nm_inovasikat 
FROM inovasi a, unit b, inovasijns c, regulasi d, sediasdm e, anggaran f, 
it g, bimtek h, renstra i, jejaring j, replikasi k, pedoman l, pengelola m, 
informasi n, penyelesaian o, partisipasi p, kemudahaninf q, kemudahanpro r, 
online s, kecepatan t, kemanfaatan u, kepuasan v, `user` w, inovasikat x 
WHERE x.id_inovasikat = a.id_inovasikat AND w.`id_user` = a.`id_user` AND 
v.`id_kepuasan` = a.`id_kepuasan` AND u.`id_kemanfaatan` = a.`id_kemanfaatan` AND 
t.`id_kecepatan` = a.`id_kecepatan` AND s.`id_online` = a.`id_online` AND 
r.`id_kemudahanpro` = a.`id_kemudahanpro` AND q.`id_kemudahaninf` = 
a.`id_kemudahaninf` AND p.`id_partisipasi` = a.`id_partisipasi` AND 
o.`id_penyelesaian` = a.`id_penyelesaian` AND n.`id_informasi` = a.`id_informasi` 
AND m.`id_pengelola` = a.`id_pengelola` AND l.`id_pedoman` = a.`id_pedoman` AND 
k.`id_replikasi` = a.`id_replikasi` AND j.`id_jejaring` = a.`id_jejaring` AND 
i.`id_renstra` = a.`id_renstra` AND h.`id_bimtek` = a.`id_bimtek` AND g.`id_it` = 
a.`id_it` AND f.`id_anggaran` = a.`id_anggaran` AND e.`id_sediasdm` = 
a.`id_sediasdm` AND d.`id_regulasi` = a.`id_regulasi` AND c.`id_inovasijns` = 
a.`id_inovasijns` AND b.`id_unit` = a.`id_unit` AND a.no_inovasi = '$no_inovasi'

我嘗試從其他威脅中尋找解決方案,幾乎所有人都建議使用索引。 但是我不明白應該將哪些表和字段添加到索引中。 請幫助解決這個問題。

我已經運行了這個查詢:

CREATE INDEX idx_inovasi1 ON inovasi (no_inovasi, tgl_inovasi, satuan, id_unit, nm_kelompok, subjek, id_inovasijns, id_inovasikat, id_regulasi, regulasi_doc, id_sediasdm, sediasdm_doc);

但它仍然沒有影響任何東西。

您應該使用索引,檢查如何索引字段,但最重要的是索引“where”之后的字段

如果您添加 EXPLAIN(您的 SQL)的結果,則有助於查明問題。 https://dev.mysql.com/doc/refman/8.0/en/explain.html

如何切換到左連接,使用現代 JOIN 語法。

SELECT a.*
, LEFT(a.tgl_inovasi, 10) AS tgl_ino
, b.`nm_unit`
, c.`nm_inovasijns`
, d.`nm_regulasi`
, e.`nm_sediasdm`
, f.`nm_anggaran`
, g.`nm_it`
, h.`nm_bimtek`
, i.`nm_renstra`
, j.`nm_jejaring`
, k.`nm_replikasi`
, l.`nm_pedoman`
, m.`nm_pengelola`
, n.`nm_informasi`
, o.`nm_penyelesaian`
, p.`nm_partisipasi`
, q.`nm_kemudahaninf`
, r.`nm_kemudahanpro`
, s.`nm_online`
, t.`nm_kecepatan`
, u.`nm_kemanfaatan`
, v.`nm_kepuasan`
, w.`nm_user`
, x.nm_inovasikat 
FROM inovasi a
LEFT JOIN unit b ON b.`id_unit` = a.`id_unit` 
LEFT JOIN inovasijns c ON c.`id_inovasijns` = a.`id_inovasijns` 
LEFT JOIN regulasi d ON d.`id_regulasi` = a.`id_regulasi` 
LEFT JOIN sediasdm e ON e.`id_sediasdm` = a.`id_sediasdm` 
LEFT JOIN anggaran f ON f.`id_anggaran` = a.`id_anggaran` 
LEFT JOIN it g ON g.`id_it` = a.`id_it` 
LEFT JOIN bimtek h ON h.`id_bimtek` = a.`id_bimtek` 
LEFT JOIN renstra i ON i.`id_renstra` = a.`id_renstra` 
LEFT JOIN jejaring j ON j.`id_jejaring` = a.`id_jejaring` 
LEFT JOIN replikasi k ON k.`id_replikasi` = a.`id_replikasi` 
LEFT JOIN pedoman l ON l.`id_pedoman` = a.`id_pedoman` 
LEFT JOIN pengelola m ON m.`id_pengelola` = a.`id_pengelola` 
LEFT JOIN informasi n ON n.`id_informasi` = a.`id_informasi` 
LEFT JOIN penyelesaian o ON o.`id_penyelesaian` = a.`id_penyelesaian` 
LEFT JOIN partisipasi p ON p.`id_partisipasi` = a.`id_partisipasi` 
LEFT JOIN kemudahaninf q ON q.`id_kemudahaninf` = a.`id_kemudahaninf` 
LEFT JOIN kemudahanpro r ON r.`id_kemudahanpro` = a.`id_kemudahanpro` 
LEFT JOIN online s ON s.`id_online` = a.`id_online` 
LEFT JOIN kecepatan t ON t.`id_kecepatan` = a.`id_kecepatan` 
LEFT JOIN kemanfaatan u ON u.`id_kemanfaatan` = a.`id_kemanfaatan`
LEFT JOIN kepuasan v ON v.`id_kepuasan` = a.`id_kepuasan`
LEFT JOIN `user` w ON w.`id_user` = a.`id_user` 
LEFT JOIN inovasikat x ON x.id_inovasikat = a.id_inovasikat 
WHERE a.no_inovasi = '$no_inovasi'

至於指標。 幾乎有一個完整的表字母表鏈接。
大多數可能都加入了主索引。

因此,查看這些表的防御,並發現哪些表沒有加入它們的 PK。
也許那些可以從查詢中使用的字段上的索引中受益。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM