2023-09-20の作業メモ

SQL をみているとサブクエリで group by した結果を集計してさらに結合しているようなクエリがあった。イメージこんなの。

select 
    id, a, b, c 
from (select id, hoge from huga where id = ? group by hoga) as aa
join bb 
    on aa.id = bb.id
limit 10;

最初 limit をサブクエリにもっていけないかなと思ったが、group by があったのでそのままもってゆけなそうだった。そのまま limit を移動すると、10件をとったあとに group by が適用されてしまう。

こういうときは相関サブクエリにすると改善するとのこと。こんな感じかしら。

select 
    id, a, b, c 
from bb
where exists(select 1 from huga where id = bb.id)
limit 10;

これは JVM の話。スレッドの状態の RUNABLE は実行可能だと思ってたけど実行中だった。別に WAITING (待機中)の状態がある。混乱する。

この記事が気に入ったらサポートをしてみませんか?