我必須遵循表:MySQL的:嵌套查詢速度問題
|ELEMENTS|
------------
|id_element|
|id_catalog|
|value|
|CATALOG|
------------
|id_catalog|
|catalog_name|
|show|
|status|
我嘗試添加不同indecies(幾個變種):
1) ELEMENT: pair(id_element, id_catalog) and id_element and id_catalog
2) ELEMENT: pair(id_element, id_catalog) and id_element
3) ELEMENT: pair(id_element, id_catalog) and id_catalog
4) ELEMENT: id_element and id_catalog
1) CATALOG: pair(show, status) and id_catalog
2) CATALOG: id_catalog and show and status
執行跟隨選擇:
SELECT DISTINCT `id_element` FROM `ELEMENTS`
WHERE (id_catalog IN (SELECT `id_catalog` FROM `CATALOG` WHERE status=1 AND show = 1)) limit 10
如果有一些行,那麼它的工作速度非常快。但如果它是空的 - 需要4秒以上。
同時「SELECT
id_catalog FROM
CATALOG WHERE status=1 AND show = 1
」工作快,既有一些行和空。
在表格元素有100.000記錄 在表類別有15.000記錄
我也試圖「加入」,但它需要更多的時間比以前。
爲什麼空查詢的工作時間如此長,以及我應該如何提高速度?
這裏有解釋的答案:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 | 'PRIMARY', |'ELEMENTS' | 'index' | '' | null | null | null | 270044 | 'Using where; Using temporary'
2 | 'DEPENDENT SUBQUERY' | 'CATALOG' | 'unique_subquery' | 'PRIMARY,pair,id_catalog' | 'PRIMARY' | '4' | 'func' | 1 | 'Using where'
Thx,我在上面添加了問題答案。 – Anthony 2011-06-08 06:00:25