powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Можно ли оптимизировать запрос?
4 сообщений из 4, страница 1 из 1
Можно ли оптимизировать запрос?
    #39365171
dr00g
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
select distinct
    kt.id,
    tdl.article_id as tecdoclink,
    kt.kod,
    kt.proizvod,
    kt.descr,
    kt.clearkod,
    kt.tovar_type,
    kt.tovar_tip,
    kt.info_base,
    kt.internalkod,
    pr.pvaluta as valuta,
    pr.pprice as price,
    po.name as p_name,
    po.ishideall as ishide,
    po.ishide as hide_client,
    po.mainmark,
	po.clientshow,
    pr.pvimir as vimir,
    va.valutakurs,
    os.ostatok as ostatok,
    pr.base_id,
    pr.pdescr as descr2,
    pr.pkod as kod_p,
    pr.pproizvod as prproizvod,
    UNIX_TIMESTAMP(po.updated) as po_upd,
    po.clientshow,
    zm.an_src,
    sk.sname as sklad_name,
    sk.sid as sklad_id,

	CASE 1 
		WHEN 0 THEN sk.d0 
		WHEN 1 THEN sk.d1 
		WHEN 2 THEN sk.d2 
		WHEN 3 THEN sk.d3 
		WHEN 4 THEN sk.d4 
		WHEN 5 THEN sk.d5 
		WHEN 6 THEN sk.d6 
	END as waituntil,

	CASE 1 
		WHEN 0 THEN sk.nd0 
		WHEN 1 THEN sk.nd1 
		WHEN 2 THEN sk.nd2 
		WHEN 3 THEN sk.nd3 
		WHEN 4 THEN sk.nd4 
		WHEN 5 THEN sk.nd5 
		WHEN 6 THEN sk.nd6 
	END as waituntilnext,    sk.timme,
    po.koef_dostavka,
    if(pr.base_id = '909090',
        1,
        1 + pol.prozn / 100) as koef_rozn,
    if(pr.base_id = '909090'
            and nm.NomenklaturaIsDiscount = 1,
        0,
        pol.pskidka) as skidkaa,
    nm.NomenklaturaIsDiscount as discount,
    0 as altered_price,
	IF( EXISTS( SELECT 1 FROM vozvrat WHERE codepost=pr.base_id ), 1, 0 ) AS rtn,
	CASE WHEN pr.base_id='909090' THEN 1 ELSE COALESCE(spp.canReturn) END AS rtn2,
	IF( pr.base_id='909090' AND nm.NomenklaturaIsDiscount=0, 
		ROUND(caches.getDiscountFn( kt.id, '03275'),2), 
		NULL ) AS mtechno_discount
from
    (select 
        id_ktovar, id_ktovar2, min(src) as an_src
    from
        (select 
        zm1.id_ktovar, zm1.id_ktovar2, 0 as src
    from
        base.zamena as zm1
    where
        zm1.id_ktovar = 2076248
            and zm1.id_ktovar2 <> 2076248 union SELECT
  zm1.id_ktovar,
  zm2.id_ktovar2,
  1 AS src
FROM base.zamena zm1
  LEFT OUTER JOIN base.ktovar zmk
    ON zmk.id = zm1.id_ktovar2
  LEFT OUTER JOIN base.zamena zm2
    ON zm2.id_ktovar = zm1.id_ktovar2
WHERE zm1.id_ktovar = 2076248
AND zm2.id_ktovar2 <> 2076248
AND (NOT 0
OR zmk.id IS NOT NULL
AND zmk.tovar_type = 1) 
	) as zzm
    group by zzm.id_ktovar , zzm.id_ktovar2) as zm
        left outer join
    base.tecdoc_link as tdl ON tdl.id_ktovar = zm.id_ktovar2
        and tdl.catalog_id = 201304
        left outer join
    base.ktovar as kt ON kt.id = zm.id_ktovar2
        left outer join
    base.tvariant as tv ON tv.id_ktovar = kt.id
        left outer join
    base.tovar_koef as tk ON tk.id_ktovar = kt.id
        left outer join
    base.pprices as pr ON pr.idkt = tv.id_ktovar
        left outer join
    base.ktovar_price_policy as ppol ON ppol.id_ktovar = pr.idkt
        left outer join
    base.price_policy as pol ON if(ppol.policy_id is null,
        pol.policy_id = 1,
        pol.policy_id = ppol.policy_id)
        and if(pr.base_id = 909090,
        pol.tu_id = 297,
        pol.tu_id = 297)
        left outer join
    mtechno.valuta as va ON va.valutaname = rtrim(pr.pvaluta)
        left outer join
    base.postatok as os ON os.idkt = pr.idkt
        and os.obase_id = pr.base_id
        and os.okod = pr.pkod
        left outer join
    base.psklad as sk ON sk.sbase_id = pr.base_id
        and sk.sid = os.osklad
        left outer join
    mtechno.nomenklatura as nm ON nm.id_ktovar = kt.id
        and pr.base_id = 909090
        left outer join
    mtechno.postavshiki as po ON po.id = pr.base_id
		left join
	mtechno.suppliers spp ON pr.base_id=spp.Code
where
    zm.id_ktovar = 2076248

	AND ( ( (ishideall is null) OR (ishideall = 0) )  
		AND ( (( ishide is null) OR (ishide = 0) ) 
			OR '1' ) )

    and ( NOT '1' OR pr.base_id='909090' )
	and( NOT '0' OR ostatok>0 )
ORDER BY price*valutakurs;



В профилировщике 90% на Copying to tmp table 0,004687 90,99, подскажите если можно где я упускаю что то
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос?
    #39365231
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dr00g,

Вряд ли в этой мешанине возможно помочь. Но, на всякий случай, покажите план запроса.
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос?
    #39365232
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот то есть Вы серьёзно ожидаете, что, не видя ни структур, ни плана, не понимая ни смысла, ни логики происходящего, кто-то так вот прям сразу поймёт, что в этой портянке сделано не по уму, и предложит супер-улучшение? зря имхо...
...
Рейтинг: 0 / 0
Можно ли оптимизировать запрос?
    #39365511
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dr00g,

Можно ли оптимизировать запрос?

Вероятнее, можно, но для начала надо его переписать нормально.

Хотя бы. А то в огороде бузина, а в Киеве -- дядька, и всё вместе практически непостижимо.

Также нужны структуры таблиц и расклады данных.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Можно ли оптимизировать запрос?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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