2015-05-12 84 views
0

是否有任何優化可以幫助讓下列語句更快地執行並且不被標記爲「慢速」查詢?MySQL UNION語句緩慢查詢

SELECT id FROM equipment_acc_1 WHERE nick='Cutter29' 
    UNION ALL 
SELECT id FROM equipment_acc_2 WHERE nick='Cutter29' 
    UNION ALL 
SELECT id FROM equipment_gloves WHERE nick='Cutter29' 
    UNION ALL 
SELECT id FROM equipment_head WHERE nick='Cutter29' 
    UNION ALL 
SELECT id FROM equipment_pants WHERE nick='Cutter29' 
    UNION ALL 
SELECT id FROM equipment_shoes WHERE nick='Cutter29' 
    UNION ALL 
SELECT id FROM equipment_top WHERE nick='Cutter29' 
    UNION ALL 
SELECT id FROM equipment_donation_skins WHERE nick='Cutter29' 
    UNION ALL 
SELECT id FROM equipment_weapon WHERE nick='Cutter29'; 

所有在此查詢的表是完全一樣的,這裏有一個例子:

mysql> describe equipment_acc_1; 
+----------+----------+------+-----+---------+-------+ 
| Field | Type  | Null | Key | Default | Extra | 
+----------+----------+------+-----+---------+-------+ 
| nick  | char(25) | NO | PRI | NULL |  | 
| id  | int(11) | NO | MUL | NULL |  | 
| cooldown | datetime | NO | MUL | NULL |  | 
+----------+----------+------+-----+---------+-------+ 
3 rows in set (0.00 sec) 

非常感謝提前!

+1

我無法想象通過更改查詢來加速它的任何方式,但是如果您可以修改表定義,它可能有助於在每個表中的「尼克」字段上有一個INDEX ...哦,從不知道,我只是注意到它是主鍵(即已經編入索引) – Uueerdo

+0

用於「id」字段的是什麼? – Uueerdo

+0

@Uueerdo'id'字段在另一個查詢中用於從代碼中的'inventory'表中提取信息。 –

回答

0

沒有多少人能與工會做的 - 但是如果有保證是所有表中的數據,你可以試試這個(使用外連接,如果數據不能保證)

select a.id, b.id, c.id, d.id, e.id, f.id, g.id, h.id 
from equipment_acc_1 a,equipment_acc_2 b, equipment_gloves c, equipment_pants d, equipment_shoes e, equipment_top f, equipment_donation_skins g, equipment_weapon h 
where a.nick='Cutter29' 
and b.nick=a.nick 
and c.nick=a.nick 
and d.nick=a.nick 
and e.nick=a.nick 
and f.nick=a.nick 
and g.nick=a.nick 
and h.nick=a.nick 
+0

您錯過了您想從語句中選擇的內容。我試過選擇''id'',但沒有奏效。 –

+0

請嘗試修改查詢 –

0

你可以改變你設計和合並你所有的小桌子到一個:

Equipment_parts: 
Part_id 
Equipment_id 
Part_type 
Part_name 
Nick 
... 

然後,你可以快速找到「cutter29」使用索引。