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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> замена left join? замена left join на условие в where 
V
    Опции темы
yezh
Дата 29.11.2007, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Народ, а вы не знаете как можно заменить left join на конструкцию в where? А то left join оч сильно тормозит, и единственный способ оптимизировать время аботы запроса это убрать его
PM MAIL ICQ   Вверх
boevik
Дата 29.11.2007, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 6
Всего: 35



в общем случае JOIN нельзя заменить через WHERE, ведь по какому то признаку таблицы должны соединяться.
Возможно улучшить производительность использованием PK и соотвествующх индексов. Копай в эту сторону.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
yezh
Дата 29.11.2007, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Накопано все что можно. Дальше просто некуда. А left join используется для связи двух таблиц, т.е. примерно такая конструкция:
Код

FROM table1 t1 left join table2 t2 on t1.column1 = t2.column1 and t1.column2=t2.column2

Я полагал что такая конструкция может быть заменена на что то другое...
PM MAIL ICQ   Вверх
skyboy
Дата 29.11.2007, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



yezh, посмотри то, что тебе выдает explain. Скорее всего, у тебя в присоединении не используются ключи(индексы), или же у тебя происходит сортировка/группировка большого количества строк.
сделай explain запросу и приведи здесь, что оно возвращает.
PM MAIL   Вверх
yezh
Дата 29.11.2007, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



дело в том, что column1 и column2 - это ключи. А база данных - Pervasive, ключи же используемые нулевые (аля примари). Просто именно эта субд страдает тормознутостью при использовании джоинов, и лучше их на больших таблицах (а в данном случае размер одной таблицы превышает 300 мб) не юзать. 
PM MAIL ICQ   Вверх
skyboy
Дата 29.11.2007, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



Цитата(yezh @  29.11.2007,  09:41 Найти цитируемый пост)
то column1 и column2 - это ключи

один составной ключ или два "простых"?
PM MAIL   Вверх
yezh
Дата 29.11.2007, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



один составной
PM MAIL ICQ   Вверх
skyboy
Дата 29.11.2007, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



Цитата(yezh @  29.11.2007,  09:41 Найти цитируемый пост)
 Pervasive

это СУБД такая? насчет explain'a - извини, это для mysql.

Добавлено @ 11:46
смотрю, там только query plan доступен, и то - в очень урезанном виде информация выдается...

Добавлено @ 11:48
впрочем, даже у такой скромной штуковины, как query plan analyzer есть скрытый потенциал smile

Это сообщение отредактировал(а) skyboy - 29.11.2007, 11:48
PM MAIL   Вверх
yezh
Дата 29.11.2007, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Мде :(. Так то 10 версия, а у нас 8-ка. ПО 8-ке же инфы такой не вижу...
Но это пока ладно, меня больше интересует вопрос, нет ли какого способа переделать запрос? Т.е. можно ли в общем случае отказаться от лефт джоин в пользу условий, и как это может выглядеть?
PM MAIL ICQ   Вверх
skyboy
Дата 29.11.2007, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



yezh, потенциально возможно только INNER JOIN "свернуть" до WHERE, да и то - скорость должна быть такая же. 
а запрос,  который ты привел, он и есть полный?
PM MAIL   Вверх
yezh
Дата 29.11.2007, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(skyboy @ 29.11.2007,  13:42)
yezh, потенциально возможно только INNER JOIN "свернуть" до WHERE, да и то - скорость должна быть такая же. 
а запрос,  который ты привел, он и есть полный?

Насчет скорости ты не прав: без INNER JOIN запрос работает гораздо быстрее (я так сократил время выполнения запроса с 8 мин до 10 сек)
Почти полный. Используется еще одно поле в left join, но это не ключ.

PM MAIL ICQ   Вверх
skyboy
Дата 29.11.2007, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



Цитата(yezh @  29.11.2007,  12:07 Найти цитируемый пост)
без INNER JOIN запрос работает гораздо быстрее (я так сократил время выполнения запроса с 8 мин до 10 сек)

ого! оптимизатор этой СУБД, видать, в полном НЕпорядке.
PM MAIL   Вверх
Deniz
Дата 29.11.2007, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 7
Всего: 44



Цитата(yezh @  29.11.2007,  16:07 Найти цитируемый пост)
Используется еще одно поле в left join, но это не ключ.
Вот об этом поподробнее...

Добавлено через 2 минуты и 49 секунд
skyboy, раньше (давно было, еще на версии 6.15) Btrieve отличался приличной скоростью.
Может что в филармонии не так? Это вопрос к автору.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
yezh
Дата 30.11.2007, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Нате вам запрос полный.

Код

SELECT t1.*, t2.*
FROM table1 t1 LEFT JOIN  table2 t2 ON
  t2.c1=t1.c1 And
  t2.c2=t1.c2 AND
  t2.RefValue = 0 AND t2.AttrID = ''
WHERE t1.Referenc = :id AND t1.Date_Document = :date AND t1.NumDay = :dayNumber

ключи - поля с1 и с2
PM MAIL ICQ   Вверх
skyboy
Дата 30.11.2007, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



попробуй убрать констатнтые выражения 
Цитата

t2.RefValue = 0 AND t2.AttrID = ''

быстрее? намного?
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




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


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

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