I am completetly at a loss for what is going on here.
I have a query, which when given one set of values, executes in less than 1 second.
Give it another set of values, and it take more than 1 minute to complete!
Here is the query that executes fast:
SELECT tbl_bin_group_detail.content_id, tbl_server_install_library.file_runtime as fruntime, tbl_entertainment.entertainment_type_id, tbl_bin_group_detail.revision_number
FROM tbl_bin_group_detail, tbl_entertainment, tbl_server_install_library
WHERE tbl_bin_group_detail.content_id = tbl_entertainment.content_id
AND tbl_entertainment.content_id = tbl_server_install_library.content_id
AND tbl_server_install_library.server_install_id = 1419
AND tbl_bin_group_detail.bin_group_id = 36
AND tbl_bin_group_detail.library_id = 35
AND tbl_bin_group_detail.version_number = 10
AND tbl_bin_group_detail.revision_number =
(SELECT MAX(revision_number) FROM tbl_bin_group_versions
WHERE version_number = 10
AND approved <> 0
AND library_id = 35
AND bin_group_id = 36 )
AND tbl_bin_group_detail.schedule_day = 1
AND tbl_bin_group_detail.schedule_hour = 1
AND tbl_bin_group_detail.schedule_slot IN (0,1,2,3)
ORDER BY tbl_bin_group_detail.schedule_slot
Here is the query that executes slower than dirt!
SELECT tbl_bin_group_detail.content_id, tbl_server_install_library.file_runtime as fruntime, tbl_entertainment.entertainment_type_id, tbl_bin_group_detail.revision_number
FROM tbl_bin_group_detail, tbl_entertainment, tbl_server_install_library
WHERE tbl_bin_group_detail.content_id = tbl_entertainment.content_id
AND tbl_entertainment.content_id = tbl_server_install_library.content_id
AND tbl_server_install_library.server_install_id = 1491
AND tbl_bin_group_detail.bin_group_id = 34
AND tbl_bin_group_detail.library_id = 36
AND tbl_bin_group_detail.version_number = 5
AND tbl_bin_group_detail.revision_number =
(SELECT MAX(revision_number) FROM tbl_bin_group_versions
WHERE version_number = 5
AND approved <> 0
AND library_id = 36
AND bin_group_id = 34 )
AND tbl_bin_group_detail.schedule_day = 1
AND tbl_bin_group_detail.schedule_hour = 1
AND tbl_bin_group_detail.schedule_slot IN (0,1,2,3)
ORDER BY tbl_bin_group_detail.schedule_slot
As you can see, all the syntax is exactly the same, only the values changed. I've never seen a queries performance affected by the criteria values before. I'm really confused.
And here is another oddity with this query.
Notice the subquery to get the max revision number?
SELECT MAX(revision_number) FROM tbl_bin_group_versions
WHERE version_number = 10
AND approved <> 0
AND library_id = 35
AND bin_group_id = 36
If I run this query seperately for either set of values, the results are instantaneous.
Now, here's the odd part. If I remove the subquery, and set the value manually with what I know is returned in each case, then both main queries run instantly!!
SELECT tbl_bin_group_detail.content_id, tbl_server_install_library.file_runtime as fruntime, tbl_entertainment.entertainment_type_id, tbl_bin_group_detail.revision_number
FROM tbl_bin_group_detail, tbl_entertainment, tbl_server_install_library
WHERE tbl_bin_group_detail.content_id = tbl_entertainment.content_id
AND tbl_entertainment.content_id = tbl_server_install_library.content_id
AND tbl_server_install_library.server_install_id = 1419
AND tbl_bin_group_detail.bin_group_id = 36
AND tbl_bin_group_detail.library_id = 35
AND tbl_bin_group_detail.version_number = 10
AND tbl_bin_group_detail.revision_number = 99
AND tbl_bin_group_detail.schedule_day = 1
AND tbl_bin_group_detail.schedule_hour = 1
AND tbl_bin_group_detail.schedule_slot IN (0,1,2,3)
ORDER BY tbl_bin_group_detail.schedule_slot
SELECT tbl_bin_group_detail.content_id, tbl_server_install_library.file_runtime as fruntime, tbl_entertainment.entertainment_type_id, tbl_bin_group_detail.revision_number
FROM tbl_bin_group_detail, tbl_entertainment, tbl_server_install_library
WHERE tbl_bin_group_detail.content_id = tbl_entertainment.content_id
AND tbl_entertainment.content_id = tbl_server_install_library.content_id
AND tbl_server_install_library.server_install_id = 1491
AND tbl_bin_group_detail.bin_group_id = 34
AND tbl_bin_group_detail.library_id = 36
AND tbl_bin_group_detail.version_number = 5
AND tbl_bin_group_detail.revision_number = 86
AND tbl_bin_group_detail.schedule_day = 1
AND tbl_bin_group_detail.schedule_hour = 1
AND tbl_bin_group_detail.schedule_slot IN (0,1,2,3)
ORDER BY tbl_bin_group_detail.schedule_slot
Both of those queries are instant.
So, does anyone have any idea why the second query, when the subquery is in place, would take so long, while the first query which has the same structure bu different data, would be very fast?
Thanks
I have a query, which when given one set of values, executes in less than 1 second.
Give it another set of values, and it take more than 1 minute to complete!
Here is the query that executes fast:
SELECT tbl_bin_group_detail.content_id, tbl_server_install_library.file_runtime as fruntime, tbl_entertainment.entertainment_type_id, tbl_bin_group_detail.revision_number
FROM tbl_bin_group_detail, tbl_entertainment, tbl_server_install_library
WHERE tbl_bin_group_detail.content_id = tbl_entertainment.content_id
AND tbl_entertainment.content_id = tbl_server_install_library.content_id
AND tbl_server_install_library.server_install_id = 1419
AND tbl_bin_group_detail.bin_group_id = 36
AND tbl_bin_group_detail.library_id = 35
AND tbl_bin_group_detail.version_number = 10
AND tbl_bin_group_detail.revision_number =
(SELECT MAX(revision_number) FROM tbl_bin_group_versions
WHERE version_number = 10
AND approved <> 0
AND library_id = 35
AND bin_group_id = 36 )
AND tbl_bin_group_detail.schedule_day = 1
AND tbl_bin_group_detail.schedule_hour = 1
AND tbl_bin_group_detail.schedule_slot IN (0,1,2,3)
ORDER BY tbl_bin_group_detail.schedule_slot
Here is the query that executes slower than dirt!
SELECT tbl_bin_group_detail.content_id, tbl_server_install_library.file_runtime as fruntime, tbl_entertainment.entertainment_type_id, tbl_bin_group_detail.revision_number
FROM tbl_bin_group_detail, tbl_entertainment, tbl_server_install_library
WHERE tbl_bin_group_detail.content_id = tbl_entertainment.content_id
AND tbl_entertainment.content_id = tbl_server_install_library.content_id
AND tbl_server_install_library.server_install_id = 1491
AND tbl_bin_group_detail.bin_group_id = 34
AND tbl_bin_group_detail.library_id = 36
AND tbl_bin_group_detail.version_number = 5
AND tbl_bin_group_detail.revision_number =
(SELECT MAX(revision_number) FROM tbl_bin_group_versions
WHERE version_number = 5
AND approved <> 0
AND library_id = 36
AND bin_group_id = 34 )
AND tbl_bin_group_detail.schedule_day = 1
AND tbl_bin_group_detail.schedule_hour = 1
AND tbl_bin_group_detail.schedule_slot IN (0,1,2,3)
ORDER BY tbl_bin_group_detail.schedule_slot
As you can see, all the syntax is exactly the same, only the values changed. I've never seen a queries performance affected by the criteria values before. I'm really confused.
And here is another oddity with this query.
Notice the subquery to get the max revision number?
SELECT MAX(revision_number) FROM tbl_bin_group_versions
WHERE version_number = 10
AND approved <> 0
AND library_id = 35
AND bin_group_id = 36
If I run this query seperately for either set of values, the results are instantaneous.
Now, here's the odd part. If I remove the subquery, and set the value manually with what I know is returned in each case, then both main queries run instantly!!
SELECT tbl_bin_group_detail.content_id, tbl_server_install_library.file_runtime as fruntime, tbl_entertainment.entertainment_type_id, tbl_bin_group_detail.revision_number
FROM tbl_bin_group_detail, tbl_entertainment, tbl_server_install_library
WHERE tbl_bin_group_detail.content_id = tbl_entertainment.content_id
AND tbl_entertainment.content_id = tbl_server_install_library.content_id
AND tbl_server_install_library.server_install_id = 1419
AND tbl_bin_group_detail.bin_group_id = 36
AND tbl_bin_group_detail.library_id = 35
AND tbl_bin_group_detail.version_number = 10
AND tbl_bin_group_detail.revision_number = 99
AND tbl_bin_group_detail.schedule_day = 1
AND tbl_bin_group_detail.schedule_hour = 1
AND tbl_bin_group_detail.schedule_slot IN (0,1,2,3)
ORDER BY tbl_bin_group_detail.schedule_slot
SELECT tbl_bin_group_detail.content_id, tbl_server_install_library.file_runtime as fruntime, tbl_entertainment.entertainment_type_id, tbl_bin_group_detail.revision_number
FROM tbl_bin_group_detail, tbl_entertainment, tbl_server_install_library
WHERE tbl_bin_group_detail.content_id = tbl_entertainment.content_id
AND tbl_entertainment.content_id = tbl_server_install_library.content_id
AND tbl_server_install_library.server_install_id = 1491
AND tbl_bin_group_detail.bin_group_id = 34
AND tbl_bin_group_detail.library_id = 36
AND tbl_bin_group_detail.version_number = 5
AND tbl_bin_group_detail.revision_number = 86
AND tbl_bin_group_detail.schedule_day = 1
AND tbl_bin_group_detail.schedule_hour = 1
AND tbl_bin_group_detail.schedule_slot IN (0,1,2,3)
ORDER BY tbl_bin_group_detail.schedule_slot
Both of those queries are instant.
So, does anyone have any idea why the second query, when the subquery is in place, would take so long, while the first query which has the same structure bu different data, would be very fast?
Thanks