2015-05-12 7 views
0

Есть ли какие-либо оптимизации, которые можно сделать, чтобы помочь быстрее выполнить следующий оператор и не быть помеченным как «медленный» запрос?Заявление MySQL UNION Slow Query

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

Я не могу представить способ ускорить его, изменив запрос, но если вы можете изменить определения таблиц, это, вероятно, поможет иметь ИНДЕКС в поле «ник» в каждой таблице ... oh, nevermind , Я просто заметил, что это первичный ключ (т. Е. Уже проиндексированный) – 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» быстро, используя индекс.