Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ускорить запрос в MySQL 4 
:(
    Опции темы
Juggernaut
Дата 17.2.2009, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 4.12.2005

Репутация: нет
Всего: 2



Всем доброго времени суток.
Нужна помощь с ускорением работы запроса:
Собственно таблицы:

1)shops -- справочник магазинов
shop_id | shop_name | ......
     1               shop1
     2               shop2
     3               shop3

2) global_goods -- глобальный список товаров
global_id | good_name | ......
     1               good1
     2               good2
     3               good3
3) local_goods -- список с локальными наименованиями товара в каждом магазине
global_id | local_good_id | shop_id 
     1               'x1'                     1
     2               'b2'                     2
     3               'v3'                     1
     1               'v4'                     2
     3               'r5'                      2
     3               'h6'                     3

Необходимо сделать выборку отражающую соответствия локальных идентификаторов по магазинам для каждого глобального идентификатора, например
global_id | 'in_shop1' | 'in_shop2' | 'in_shop3'
     1                 'x1'             'v4'             null
     2                 null             'b2'             null
     3                 'v3'              'r5'             'h6'

Собственно я делаю так:
Код

select g.global_id, 
(select l.local_good_id from local_goods l where l.global_id=g.global_id and l.shop_id=1) as 'in_shop1'),
(select l.local_good_id from local_goods l where l.global_id=g.global_id and l.shop_id=2) as 'in_shop2'),
(select l.local_good_id from local_goods l where l.global_id=g.global_id and l.shop_id=3) as 'in_shop3')
....
from global_goods g;


Есть два вопроса:
1) Как можно преобразовать запрос, для ускорения его работы? Магазинов около 10, глобальных товаров около 10000, поэтому запрос выполняется очень медленно.
2) Есть ли возможность не "хардкодить" магазины в запросе. Т.е. можно ли как-нибудь записи одной таблицы(магазинов) сделать 
колонками конечной выборки "на автомате". В принципе магазины добавляются редко, можно и переделать запрос, но как-то "не камильфо".




PM MAIL   Вверх
Akina
Дата 17.2.2009, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Если СУБД поддерживает перекрёстные запросы - использовать. А нет - значит нет...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Kbl4AH
Дата 17.2.2009, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 1
Всего: 15



Код

select global_id, 
decode(shop_id, 1, local_good_id) shop1, 
decode(shop_id, 2, local_good_id) shop2, 
..., 
decode(shop_id, 10, local_good_id) shop10 
from local_goods group by global_id;

только аналог decode для mysql не знаю(
PM MAIL ICQ   Вверх
Juggernaut
Дата 18.2.2009, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 4.12.2005

Репутация: нет
Всего: 2



В mysql это называется if().
Получилось вот так:
Код

select global_id, 
if(shop_id=1, local_good_id,null) shop1, 
..., 
if(shop_id=10, local_good_id,null) shop10, 
from local_goods group by global_id;


Самое смешное что, используется всего одна таблица. smile 
Перефразируя старый афоризм: "Все люди делятся на тех, кто мыслит понятиями множеств и остальных".
Kbl4AH - большое спасибо!!
Тема закрыта.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0447 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.