UPDATE:
Just to mention it on a more visible place. When I changed IN for =, the query execution time went from 180 down to 0.00008 seconds. Ridiculous speed difference.
This SQL query takes 180 seconds to finish! How is that possible? is there a way to optimize it to be faster?
SELECT IdLawVersionValidFrom
FROM question_law_version
WHERE IdQuestionLawVersion IN
(
SELECT MAX(IdQuestionLawVersion)
FROM question_law_version
WHERE IdQuestionLaw IN
(
SELECT MIN(IdQuestionLaw)
FROM question_law
WHERE IdQuestion=236 AND IdQuestionLaw>63
)
)
There are only about 5000 rows in each table so it shouldn’t be so slow.
(Posting my comment as an answer as apparently it did make a difference!)
If anyone wants to investigate this further I’ve just done a test and found it very easy to reproduce.
Create Table
Create Procedure
Populate Table
Query 1
Equals Explain Output http://img689.imageshack.us/img689/5592/equals.png
Query 2 (same problem)
In Explain Output http://img291.imageshack.us/img291/8129/52037513.png