以下の 2 つのクエリはサブクエリです。どちらも同じで、どちらも私にとってはうまくいきます。ただし、問題は、方法 1 のクエリの実行に約 10 秒かかるのに対し、方法 2 のクエリの実行には 1 秒もかかりません。
方法 1 のクエリを方法 2 に変換できましたが、クエリで何が起こっているのかわかりません。私はそれを自分で理解しようとしてきました。以下の2つのクエリの違いと、パフォーマンスの向上はどのように起こるのかを本当に知りたいですか? その背後にあるロジックは何ですか?
私はこれらの高度な技術に不慣れです。誰かがここで私を助けてくれることを願っています。手がかりを与えないドキュメントを読んだことを考えると。
方法 1 :
SELECT
*
FROM
tracker
WHERE
reservation_id IN (
SELECT
reservation_id
FROM
tracker
GROUP BY
reservation_id
HAVING
(
method = 1
AND type = 0
AND Count(*) > 1
)
OR (
method = 1
AND type = 1
AND Count(*) > 1
)
OR (
method = 2
AND type = 2
AND Count(*) > 0
)
OR (
method = 3
AND type = 0
AND Count(*) > 0
)
OR (
method = 3
AND type = 1
AND Count(*) > 1
)
OR (
method = 3
AND type = 3
AND Count(*) > 0
)
)
方法 2 :
SELECT
*
FROM
`tracker` t
WHERE
EXISTS (
SELECT
reservation_id
FROM
`tracker` t3
WHERE
t3.reservation_id = t.reservation_id
GROUP BY
reservation_id
HAVING
(
METHOD = 1
AND TYPE = 0
AND COUNT(*) > 1
)
OR
(
METHOD = 1
AND TYPE = 1
AND COUNT(*) > 1
)
OR
(
METHOD = 2
AND TYPE = 2
AND COUNT(*) > 0
)
OR
(
METHOD = 3
AND TYPE = 0
AND COUNT(*) > 0
)
OR
(
METHOD = 3
AND TYPE = 1
AND COUNT(*) > 1
)
OR
(
METHOD = 3
AND TYPE = 3
AND COUNT(*) > 0
)
)