sql联接查询速度非常慢(未完成)

1sbrub3j  于 2021-07-29  发布在  Java
关注(0)|答案(0)|浏览(220)

我有一个很慢的问题:

SELECT
t1.aktualizace_ciselniku_ean,
t2.den,
t2.hodina,
sum(CASE 
    WHEN t1.aktualizace_ciselniku_tdd = 'TDD č. 5' 
    AND aktualizace_ciselniku_teplotni_oblast = 'Region Jižní Čechy' THEN t2.tdd_tdd5jiznicechy * t1.aktualizace_ciselniku_odhad_rocni_spotreby 
    WHEN t1.aktualizace_ciselniku_tdd = 'TDD č. 5' 
    AND aktualizace_ciselniku_teplotni_oblast = 'Region Jižní Morava' THEN t2.tdd_tdd5jiznimorava * t1.aktualizace_ciselniku_odhad_rocni_spotreby
    WHEN t1.aktualizace_ciselniku_tdd = 'TDD č. 5' 
    AND aktualizace_ciselniku_teplotni_oblast = 'Region Praha' THEN t2.tdd_tdd5praha * t1.aktualizace_ciselniku_odhad_rocni_spotreby 
    WHEN t1.aktualizace_ciselniku_tdd = 'TDD č. 5' 
    AND aktualizace_ciselniku_teplotni_oblast = 'Region Severní Čechy' THEN t2.tdd_tdd5severnicechy * t1.aktualizace_ciselniku_odhad_rocni_spotreby 
    WHEN t1.aktualizace_ciselniku_tdd = 'TDD č. 5' 
    AND aktualizace_ciselniku_teplotni_oblast = 'Region Severní Morava' THEN t2.tdd_tdd5severnimorava * t1.aktualizace_ciselniku_odhad_rocni_spotreby 
    WHEN t1.aktualizace_ciselniku_tdd = 'TDD č. 5' 
    AND aktualizace_ciselniku_teplotni_oblast = 'Region Střední Čechy' THEN t2.tdd_tdd5strednicechy * t1.aktualizace_ciselniku_odhad_rocni_spotreby 
    WHEN t1.aktualizace_ciselniku_tdd = 'TDD č. 5' 
    AND aktualizace_ciselniku_teplotni_oblast = 'Region Východní Čechy' THEN t2.tdd_tdd5vychodnicechy * t1.aktualizace_ciselniku_odhad_rocni_spotreby 
    WHEN t1.aktualizace_ciselniku_tdd = 'TDD č. 5' 
    AND aktualizace_ciselniku_teplotni_oblast = 'Region Západní Čechy' THEN t2.tdd_tdd5zapadnicechy * t1.aktualizace_ciselniku_odhad_rocni_spotreby 
    WHEN t1.aktualizace_ciselniku_tdd = 'TDD č. 1' THEN t2.tdd_tdd1cr * t1.aktualizace_ciselniku_odhad_rocni_spotreby 
    WHEN t1.aktualizace_ciselniku_tdd = 'TDD č. 2' THEN t2.tdd_tdd2cr * t1.aktualizace_ciselniku_odhad_rocni_spotreby 
    WHEN t1.aktualizace_ciselniku_tdd = 'TDD č. 3' THEN t2.tdd_tdd3cr * t1.aktualizace_ciselniku_odhad_rocni_spotreby 
    WHEN t1.aktualizace_ciselniku_tdd = 'TDD č. 4' THEN t2.tdd_tdd4cr * t1.aktualizace_ciselniku_odhad_rocni_spotreby 
    WHEN t1.aktualizace_ciselniku_tdd = 'TDD č. 6' THEN t2.tdd_tdd6cr * t1.aktualizace_ciselniku_odhad_rocni_spotreby 
    WHEN t1.aktualizace_ciselniku_tdd = 'TDD č. 7' THEN t2.tdd_tdd7cr * t1.aktualizace_ciselniku_odhad_rocni_spotreby 
    WHEN t1.aktualizace_ciselniku_tdd = 'TDD č. 8' THEN t2.tdd_tdd8cr * t1.aktualizace_ciselniku_odhad_rocni_spotreby 
    ELSE 0 
   END) AS aktualizace_ciselniku_odhad_rocni_spotreby 
  FROM
aktualizace_ciselniku t1 
 JOIN
normalizovane_tdd t2 
    ON t2.den >= t1.aktualizace_ciselniku_datum_od 
    AND t2.den <= t1.aktualizace_ciselniku_datum_do 
GROUP BY
t1.aktualizace_ciselniku_ean,
t2.den,
t2.hodina 
ORDER BY
NULL;

这里是dbfiddle的链接。
在表aktualizace\u ciselniku中约有40000行,在normalizeovane\u tdd中约有8000行,但查询1小时后没有得到结果。
如何优化?在一个查询中创建索引还是执行两个sql命令?
数据库类型mariadb连接通过php mysqli\u连接。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题