powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Долгий Left Join ускорить или делать временную таблицу?
7 сообщений из 7, страница 1 из 1
Долгий Left Join ускорить или делать временную таблицу?
    #38797608
AlexSSSS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даны справочник товаров, свойства товаров и цены товаров, остаток утром, проданно:
Код: plsql
1.
2.
3.
create table TOVARY(id integer,kod char(20),name char (120))PRIMARY KEY  (id);
create table TOVARY_sv(id integer,kod char(20),name_sv chare (120),znach char(12)) PRIMARY KEY  (id);
create table chena(id integer,kod char(20),chena numeric(9,2));


Причем на один товар может быть несколько свойств, так и не одного:
таблица TOVARY
Код: plaintext
1.
2.
3.
id    kod    name
1     12     Штука
2     45     Фиговина
3     123    Что-то
Таблица TOVARY_sv
Код: plaintext
1.
2.
3.
id kod  name_sv znach
1  12   Цвет    20_БУКОВ Синий 20БУКОВ</const>ЕЩЕ_КУЧА_БУКОВ
2  12   Вес     20_БУКОВ Тяжолый 20БУКОВ</const>ЕЩЕ_КУЧА_БУКОВ
3  123  Цвет    20_БУКОВ Красный 20БУКОВ</const>ЕЩЕ_КУЧА_БУКОВ
Ну и цены: один товар - одна цена.
"Вяжу" их:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select tii.kod as KOD_TOVARA,tii.`name` as NAZVANIE,
TRIM(MID(tiip.`znach `,20,locate("</const>",tiip.`znach `)-20)) as CVET,
TRIM(MID(tiip1.`znach `,20,locate("</const>",tiip1.`znach `)-20)) as VES
from TOVARY tii
left join TOVARY_sv tiip on (tiip.`kod`=tii.`kod`)
left join TOVARY_sv tiip1 on (tiip1.`kod`=tii.`kod`)
where tii.name like "%ЧТО-ТО%"
and tiip.`name_sv` like "%ЦВЕТ%"
and tiip1.`name_sv` like "%ВЕС%" limit 100


На тестовых табличках все летает со свистом!
Но на реальной БД (TOVARY - более 17 тыс записей, TOVARY_sv -34 с гаком) - время выполнения запроса более минуты. И это я еще не подцепил цены и остатки :-(
Вопрос:
ковырять запрос для его оптимизации? если да - то в каком направлении
или сделать в своем приложении кнопочку "обновить справочник" которую буду нажимать и будет создаваться табличка в которой вся инфа (кроме остатков) сведена в одну "плоскую" таблицу вида:
Код: plaintext
код товара-цена-вес-цвет

и вязать эту таблицу с таблицами остатков?

З.Ы. Аналогичная по функционалу программа писана на фоксе, работает за доли секунды, но это после того как эту БД обработал "конвертер данных". Недостатки: дрневняя как .... мамонта, нет исходников, под линем работает с "бубном", да и надо добавить функционала. Проще переписать заново...
...
Рейтинг: 0 / 0
Долгий Left Join ускорить или делать временную таблицу?
    #38797761
Фотография Станислав Клевцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexSSSS,
получается у вас в одной таблице "TOVARY_sv" хранится информация по весу и цвету товара ?
...
Рейтинг: 0 / 0
Долгий Left Join ускорить или делать временную таблицу?
    #38797802
AlexSSSS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Станислав Клевцов, Все верно. Причем по замыслу разработчика тут может храниться скольугодное число свойств товара. Но меня интересуют только два.
...
Рейтинг: 0 / 0
Долгий Left Join ускорить или делать временную таблицу?
    #38797811
Фотография Станислав Клевцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexSSSSСтанислав Клевцов, Все верно. Причем по замыслу разработчика тут может храниться скольугодное число свойств товара. Но меня интересуют только два.

Можно попробовать для "свойства" создать отдельный столбец '***' (числовой) в этой же таблице и его использовать для выборки нужных 2 свойств. Таким образом не будет использоваться в запросе "дорогая" операции like по тексту.
...
Рейтинг: 0 / 0
Долгий Left Join ускорить или делать временную таблицу?
    #38797854
AlexSSSS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том-то и дело что эти таблицы формируются программой от поставщика. По идее - к этой БД доступа вообще нет: для "общения" с внешними системами используются иные БД. Но бяда в том, что ВСЯ необходимая инфа в одном месте есть только тут...
Но направление изысканий понятно: есть возможность заменть LIKE на равно: будет весьма "массивно", но должно сработать.
Спасибо за наводку...
...
Рейтинг: 0 / 0
Долгий Left Join ускорить или делать временную таблицу?
    #38797901
Фотография Станислав Клевцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexSSSSВ том-то и дело что эти таблицы формируются программой от поставщика. По идее - к этой БД доступа вообще нет: для "общения" с внешними системами используются иные БД. Но бяда в том, что ВСЯ необходимая инфа в одном месте есть только тут...
Но направление изысканий понятно: есть возможность заменть LIKE на равно: будет весьма "массивно", но должно сработать.
Спасибо за наводку...

Если нет доступа - это печально (
...
Рейтинг: 0 / 0
Долгий Left Join ускорить или делать временную таблицу?
    #38798064
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Станислав Клевцовполучается у вас в одной таблице "TOVARY_sv" хранится информация по весу и цвету товара ?обычный еав, что тут такого?
AlexSSSSНо направление изысканий понятно: есть возможность заменть LIKE на равно: будет весьма "массивно", но должно сработать.+1
лайк (такой, как тут) в принципе не даст вам воспользоваться индексами
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Долгий Left Join ускорить или делать временную таблицу?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]