【发布时间】:2011-06-08 05:36:34
【问题描述】:
我有以下表格:
|ELEMENTS|
------------
|id_element|
|id_catalog|
|value|
|CATALOG|
------------
|id_catalog|
|catalog_name|
|show|
|status|
我尝试添加不同的缺陷(几种变体):
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 秒。
同时“SELECTid_catalogFROMCATALOGWHERE status=1 AND show = 1”在有一些行和空的情况下都能快速工作。
在表 ELEMENTS 中有 100.000 条记录 在表 CATALOG 中有 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'
【问题讨论】:
标签: mysql database select join