powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помощь в оптимизации запроса
27 сообщений из 27, показаны все 2 страниц
Помощь в оптимизации запроса
    #38351039
aleksey_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Написал я, как то, не в духе, запросик к MySQL подобного вида:

Код: sql
1.
2.
3.
4.
SELECT PR.Id, PR.Brand, PR.NamePart, PR.Article, PR.Price  
FROM crosses cr 
INNER JOIN prices PR ON (cr.IndexArticle = PR.IndexArticle) 
WHERE (Uni IN (SELECT Uni FROM crosses AS Crosses_1 WHERE Crosses_1.IndexArticle = 'op525' AND Crosses_1.IndexBrand = 'filtron'))



в самом конце запроса в WHERE я отсеиваю всё, что НЕ является кроссами (аналогами).
Поле Uni - это критерий по которым записи в таблице crosses объединяются в аналоги.
Собсно из-за этого условия в WHERE запрос начинает жутко тормозить, при увеличении числа записей в таблице crosses.
Помогите, люди добрые, оптимизировать данный казус.... Заранее СПАСИБО!
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351137
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksey_sql,

перепишите на джойн и забудьте подселекты в IN() как кошмарный сон. :)
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351173
Фотография Megabyte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksey_sqlНаписал я, как то, не в духе, запросик к MySQL подобного вида:

Код: sql
1.
2.
3.
4.
SELECT PR.Id, PR.Brand, PR.NamePart, PR.Article, PR.Price  
FROM crosses cr 
INNER JOIN prices PR ON (cr.IndexArticle = PR.IndexArticle) 
WHERE (Uni IN (SELECT Uni FROM crosses AS Crosses_1 WHERE Crosses_1.IndexArticle = 'op525' AND Crosses_1.IndexBrand = 'filtron'))



в самом конце запроса в WHERE я отсеиваю всё, что НЕ является кроссами (аналогами).
Поле Uni - это критерий по которым записи в таблице crosses объединяются в аналоги.
Собсно из-за этого условия в WHERE запрос начинает жутко тормозить, при увеличении числа записей в таблице crosses.
Помогите, люди добрые, оптимизировать данный казус.... Заранее СПАСИБО!
У вас двойное обращение к таблице Crosses. И судя по запросу, по-моему излишне...
Либо задача вообще не понятна.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT PR.Id, PR.Brand, PR.NamePart, PR.Article, PR.Price
FROM
(
  SELECT Cr.Uni, cr.IndexArticle 
  FROM crosses AS Cr 
  WHERE Cr.IndexArticle = 'op525' AND Cr.IndexBrand = 'filtron'
) C
INNER JOIN prices PR ON (С.IndexArticle = PR.IndexArticle) 


Я вас правильно понял, вам этот результат нужен?
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351209
aleksey_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Megabytealeksey_sqlНаписал я, как то, не в духе, запросик к MySQL подобного вида:

Код: sql
1.
2.
3.
4.
SELECT PR.Id, PR.Brand, PR.NamePart, PR.Article, PR.Price  
FROM crosses cr 
INNER JOIN prices PR ON (cr.IndexArticle = PR.IndexArticle) 
WHERE (Uni IN (SELECT Uni FROM crosses AS Crosses_1 WHERE Crosses_1.IndexArticle = 'op525' AND Crosses_1.IndexBrand = 'filtron'))



в самом конце запроса в WHERE я отсеиваю всё, что НЕ является кроссами (аналогами).
Поле Uni - это критерий по которым записи в таблице crosses объединяются в аналоги.
Собсно из-за этого условия в WHERE запрос начинает жутко тормозить, при увеличении числа записей в таблице crosses.
Помогите, люди добрые, оптимизировать данный казус.... Заранее СПАСИБО!
У вас двойное обращение к таблице Crosses. И судя по запросу, по-моему излишне...
Либо задача вообще не понятна.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT PR.Id, PR.Brand, PR.NamePart, PR.Article, PR.Price
FROM
(
  SELECT Cr.Uni, cr.IndexArticle 
  FROM crosses AS Cr 
  WHERE Cr.IndexArticle = 'op525' AND Cr.IndexBrand = 'filtron'
) C
INNER JOIN prices PR ON (С.IndexArticle = PR.IndexArticle) 


Я вас правильно понял, вам этот результат нужен?

Нет. Мне не такой результат нужен. Мне нужно в результате получить ВСЕ позиции из таблицы crosses, где Uni равно Uni той позиции, для который указан артикул "op525" и бренд "filtron", ну и сджоиненные с прайсами.
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351211
aleksey_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arhat109aleksey_sql,

перепишите на джойн и забудьте подселекты в IN() как кошмарный сон. :)

с джойнами переписать проблемно для мозга) не получается) помогите.
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351256
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может, так?
Код: sql
1.
2.
3.
4.
SELECT PR.Id, PR.Brand, PR.NamePart, PR.Article, PR.Price  
FROM prices pr 
WHERE pr.IndexArticle = 'op525' 
  AND exists(select NULL from crosses cr where cr.IndexArticle = pr.IndexArticle and cr.IndexBrand = 'filtron')
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351274
aleksey_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007может, так?
Код: sql
1.
2.
3.
4.
SELECT PR.Id, PR.Brand, PR.NamePart, PR.Article, PR.Price  
FROM prices pr 
WHERE pr.IndexArticle = 'op525' 
  AND exists(select NULL from crosses cr where cr.IndexArticle = pr.IndexArticle and cr.IndexBrand = 'filtron')



неа. не то. нужны все кроссы, у которых поле Uni равно полю Uni строки у которой article='blabla' и brand='ioio'
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351285
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksey_sqlнужны все кроссы, у которых поле Uni равно полю Uni строки у которой article='blabla' и brand='ioio'Ну и? в чём затруднения?

селект к1.*
фром кроссы к1
джойн кроссы к2 он к1.юни=к2.юни
вере к2.артикле="блабла" энд к2.брэнд="ололо"
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351303
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleksey_sqlCygapb-007может, так?
Код: sql
1.
2.
3.
4.
SELECT PR.Id, PR.Brand, PR.NamePart, PR.Article, PR.Price  
FROM prices pr 
WHERE pr.IndexArticle = 'op525' 
  AND exists(select NULL from crosses cr where cr.IndexArticle = pr.IndexArticle and cr.IndexBrand = 'filtron')



неа. не то. нужны все кроссы, у которых поле Uni равно полю Uni строки у которой article='blabla' и brand='ioio'
какие кроссы ? ты же ничего из таб.crosses в результате не "выбираешь" - нет в селекте ничего из crosses

исходный запрос, так можно переделать,
только это ничем не отличается от запроса Cygapb-007 , только дубли строк, возможно, появятся ...
Код: sql
1.
2.
3.
4.
SELECT PR.Id, PR.Brand, PR.NamePart, PR.Article, PR.Price  
FROM crosses cr 
INNER JOIN prices PR ON (cr.IndexArticle = PR.IndexArticle) 
WHERE exists (SELECT 1 FROM crosses AS Crosses_1 WHERE cr.Uni=Crosses_1.Uni and Crosses_1.IndexArticle = 'op525' AND Crosses_1.IndexBrand = 'filtron'))
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351319
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksey_sqlCygapb-007может, так?
Код: sql
1.
2.
3.
4.
SELECT PR.Id, PR.Brand, PR.NamePart, PR.Article, PR.Price  
FROM prices pr 
WHERE pr.IndexArticle = 'op525' 
  AND exists(select NULL from crosses cr where cr.IndexArticle = pr.IndexArticle and cr.IndexBrand = 'filtron')



неа. не то. нужны все кроссы, у которых поле Uni равно полю Uni строки у которой article='blabla' и brand='ioio'Результаты запросов совпадают? тогда что именно "не то" ??
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351371
aleksey_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty112,

Да, дествительно, проверил. Ваш запрос работает. Но дело в том, что он также как и мой по времени выполняется около 3 секунд при кол-ве записей в crosses - 30 тысяч.
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351379
aleksey_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007aleksey_sqlпропущено...


неа. не то. нужны все кроссы, у которых поле Uni равно полю Uni строки у которой article='blabla' и brand='ioio'Результаты запросов совпадают? тогда что именно "не то" ??

Был не прав. Ваш запрос работает быстро! Спасибо! Буду тестить.
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351388
aleksey_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleksey_sqlCygapb-007пропущено...
Результаты запросов совпадают? тогда что именно "не то" ??

Был не прав. Ваш запрос работает быстро! Спасибо! Буду тестить.

Поспешил я.
Запрос:
Код: sql
1.
2.
3.
4.
SELECT PR.Id, PR.Brand, PR.NamePart, PR.Article, PR.Price  
FROM crosses cr 
INNER JOIN prices PR ON (cr.IndexArticle = PR.IndexArticle) 
WHERE exists (SELECT 1 FROM crosses AS Crosses_1 WHERE cr.Uni=Crosses_1.Uni and Crosses_1.IndexArticle = 'op525' AND Crosses_1.IndexBrand = 'filtron'))

работает, но долго. секунды 3.

А запрос:
Код: sql
1.
2.
3.
4.
SELECT PR.Id, PR.Brand, PR.NamePart, PR.Article, PR.Price  
FROM prices pr 
WHERE pr.IndexArticle = 'op525' 
  AND exists(select NULL from crosses cr where cr.IndexArticle = pr.IndexArticle and cr.IndexBrand = 'filtron')

неверно работает. не выдает кроссы.
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351401
aleksey_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде бы написал. Работает достаточно шустро! :)

Код: sql
1.
2.
3.
4.
5.
select c1.*
from crosses c1
inner join crosses c2 on c1.Uni=c2.Uni
inner join prices p on p.IndexBrand = c1.IndexBrand and p.IndexArticle = c1.IndexArticle
where c2.IndexArticle="93743424" and c2.IndexBrand="chevrolet"



по советам tanglir !
Всем огромное спасибо!
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351526
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksey_sql,

А зачем тут таблица prices ? для фильтрации?
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351581
aleksey_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Ну я в таблице кроссов держу связки, а в таблице прайсов держу цену, кол-во и т.д.
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351585
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksey_sqlmiksoft,

Ну я в таблице кроссов держу связки, а в таблице прайсов держу цену, кол-во и т.д.А в запросе-то зачем ее упоминать?
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351688
aleksey_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

для наглядности
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351735
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksey_sqlmiksoft,

для наглядностиКакая же наглядность, если из нее полей не выводится? На что глядеть?
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351779
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доктор Ливси сказал "Что-то становится скушновато" и автор решил его повеселить:

from crosses c1
inner join crosses c2 on c1.Uni=c2.Uni

если ее выкинуть и вычесать запрос исходя из него самого, то получается вот так

select crosses.*, prices where prices.IndexBrand = crosses.IndexBrand and prices.IndexArticle = crosses.IndexArticle and crosses.IndexArticle="93743424" and crosses.IndexBrand="chevrolet";

Однако для join'а специально есть кляуза using подразумевающий одинаковые идентификаторы полей адгезии.

автор dev.mysql.com The USING(column_list) clause names a list of columns that must exist in both tables. If tables a and b both contain columns c1, c2, and c3, the following join compares corresponding columns from the two tables:

a LEFT JOIN b USING (c1,c2,c3)

То есть вместо

prices.IndexBrand = crosses.IndexBrand and prices.IndexArticle = crosses.IndexArticle

USING(IndexBrand, IndexArticle)

Значит должно быть примерно так

SELECT crosses.* FROM crosses INNER JOIN prices USING(IndexBrand, IndexArticle) WHERE crosses.IndexArticle="93743424" AND crosses.IndexBrand="chevrolet";

ПротеститЕ, расскажИте.
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351786
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deblogger,
не, там другая засада:) по образчику получить UNI и вытянуть все остальные детальки с тем же UNI, а уж для них вытянуть цену.
Я сначала тоже не въехал)
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351791
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Существует ровно единственная реальная проблема это иерархические таблицы, то есть которые сами с собой, чих-пых. Существует вторая реальная проблема - кривое проектирование. Если не то и не другое, значит надо соображать где ядро запроса, начинать с него и наращивать и все должно получиться как максимум за 10 минут.

Честно говоря мне трудно соображать глядя на цитаты которые соблаговоляют постить юзеры. Расшифровывать структуру и все остальное ради чего?

В этом случае я лишь хотел отметить сакраментальное. Если в запросе только иннеры и нет возможности юзать юзинг - меняйте синтаксис на каноничный. Чтобы лишним жбан не забивать.
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351812
aleksey_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftaleksey_sqlmiksoft,

для наглядностиКакая же наглядность, если из нее полей не выводится? На что глядеть?

См. первый мой пост в данной теме. Там только эти поля и выводятся. Т.е. только они по сути и нужны.
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351818
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksey_sqlmiksoftпропущено...
Какая же наглядность, если из нее полей не выводится? На что глядеть?

См. первый мой пост в данной теме. Там только эти поля и выводятся. Т.е. только они по сути и нужны.А тут - 14647836 - нет. Это разные запросы, в т.ч. могут оказаться сильно разными и по быстродействию.
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351823
aleksey_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftaleksey_sqlпропущено...


См. первый мой пост в данной теме. Там только эти поля и выводятся. Т.е. только они по сути и нужны.А тут - 14647836 - нет. Это разные запросы, в т.ч. могут оказаться сильно разными и по быстродействию.

Тут я лишь протестировал запрос, который для меня написал пользователь tanglir , за что ему большое спасибо. Быстродействие не изменилось, после того, как я вместе c.* указал поля из таблицы prices.
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351831
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а индексы-то есть?
...
Рейтинг: 0 / 0
Помощь в оптимизации запроса
    #38351835
aleksey_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007а индексы-то есть?

Всё есть. Уже вопрос решен:)
Этот остаточное))
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помощь в оптимизации запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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