Autor Zpráva
Pavel Calta
Profil
Dobrý den,
mám takovýto dotaz do MYSQL. Všude mám (snad) dobře udělané indexy, ale i tak odpověď dostanu až třeba za 0,1 - 0,15 sekundy. Jelikož takových dotazů potřebuji pro načtení stránky (je to kategorie na webu) spustit více, tak se dostáváme na nepřijatelnou dobu generování. Problémem bude předpokládám to Where IN, že se ptám na mnoho prvků, ale mě nějak nenapadá, jak toto zmenšit, udělat více efektivní. Ta tabulka bases obsahuje asi 28 000 řádků.

SELECT sklad_dodavatelu.Mnozstvi_Skladem as PocetSklademUdodavatele, bases.Objednaci_nazev, bases.Id_Pohoda,bases.Kod, bases.Dodani,bases.StavSkladem,bases.StavObjednano,bases.Stav_obj_dod, (bases.StavSkladem-bases.StavObjednano) as Count_Free, bases.Nazev, bases.Dodavatel, vyrobci_web.UsualDeliveryTime, bases.Predpoklad_Doruceni, bases.NaseNaskladneni,
bases.CenaInternet, bases.Akce, bases.Text, druhy_zbozi.Vip, druhy_zbozi.Druh, pictures.Url, pictures.Popis, pictures.Barva, rel_zasoby.Kod_hlavicka, sklad_dodavatelu.Naskladneni, hlavicky.Nazev as NazevHlavicky, sklad_dodavatelu.IdDodavatele, (SELECT Datum FROM ppl order by Datum desc limit 1) as PosledniPPL, adb.MaxOdeslaniZbozi, adb.OcekavaneZboziSkladem, (SELECT Hodnota from konstanty where nazev = 'MaxPPL' limit 1) as KonstantaPPL
from bases 
LEFT JOIN sklad_dodavatelu on bases.Objednaci_nazev = sklad_dodavatelu.Id_Produktu
LEFT JOIN rel_zasoby on rel_zasoby.Kod_Pohoda = bases.Id_Pohoda
LEFT JOIN hlavicky on hlavicky.Id_Pohoda = rel_zasoby.Kod_hlavicka
LEFT JOIN vyrobci_web on vyrobci_web.Nazev = hlavicky.Vyrobce
LEFT JOIN hlavicky_druhy on hlavicky_druhy.Id_hlavicky = rel_zasoby.Kod_hlavicka
LEFT JOIN druhy_zbozi on druhy_zbozi.Id =  hlavicky_druhy.Id_druh
LEFT join pictures on pictures.Kod = bases.Kod
LEFT join adb on adb.adb_number_ids = bases.Dodavatel
 where bases.Id_Pohoda in ('42735','13979','43069','61283','64303','61271','56462','41507','31348','60963','62136','69403','43071','13828','43073','61281','64310','64306','64307','71453','64514','79025','79026','44797','77095','77094','55214','76804','76806','76805','35490','16432','15072','10416','15101','7453','13359','16539','16540','34044','44817','61523','45969','45963','71065','73430','73425','73427','73426','73424','73428','73429','73423','30978','32959','33171','30918','33233','66308','66309','44795','55251','76074','76073','67208','67210','67211','49056','49055','49053','49048','49054','49047','49061','49062','49063','49064','49066','49067','49068','49070','55390','55391','55392','55393','55394','62580','62581','62257','60674','80803','56539','79064','79065','79063','79066','81772','81774','81773','81777','52901','52902','52900','52898','60345','54549','76095','76096','76097','67227','67226','67228','53419','53418','73433','73438','73435','73434','73431','73432','73436','73437','72722','72713','56254','56255','56256','56257','56258','56259','56260','56261','56246','56247','56248','56249','56250','56251','56252','56253','56292','69042','69044','69046','69048','69049','57227','57230','57231','57232','57233','57228','57229','57525','62260','62261','80481','80482','80483','80478','80479','80484','80480','57518','57519','57517','57220','57222','58632','58630','58631','58628','58637','58634','58636','58635','58633','58647','58644','58646','58645','58643','58642','58639','58641','58640','58638','60459','60938','60942','60944','60945','77608','60787','60708','60709','62550','76619','76620','76618','60405','60404','66974','80598','80596','80594','80595','80597','60978','60979','60980','60981','60982','60983','60985','60988','60989','60966','60967','60968','60969','60990','60970','60971','60972','60973','60974','60984','61588','61503','61504','55006','55008','55009','55010','55011','55012','55013','55014','55015','55016','55017','55018','61630','61631','61629','61632','61628','61633','61627','61634','61626','61635','61625','61636','61624','61637','61623','61638','61622','61639','61620','61640','61593','61608','61606','61609','61605','61610','61604','61611','61603','61612','61602','61613','61601','61614','61600','61615','61599','61616','61598','61617','61597','61596','61619','61618','61546','61545','61544','61543','61542','61541','61540','61539','61538','61534','61679','61677','61675','67070','67069','61681','62041','62037','62036','62040','62038','62042','69272','69274','69275','81633','81632','81631','76570','76571','76569','76572','76573','62340','62342','62338','62341','62343','62339','70652','70653','70651','64120','64121','64122','64123','64124','64221','64220','64224','64225','64226','64761','64756','76411','76412','76410','76409','79009','79008','79007','79010','79014','79015','79013','79018','79016','79017','79011','79012','71449','66480','66481','66482','66483','66484','66486','73209','79253','79254','66542','66538','66539','66536','66540','74840','79255','79256','66599','72718','72719','73459','73457','77404','66709','66710','66820','66819','66770','66578','67216','67111','67112','67113','67114','67120','67075','67559','73003','68661','81115','81114','68662','81113','81112','67396','67397','67399','67400','67401','72870','72871','67381','67382','67384','67385','67386','72934','72935','67375','67377','67376','67378','67379','67380','72933','72932','67394','67393','67391','67390','67395','72869','72868','68986','68987','68988','76623','68982','68983','76622','76621','69434','74890','64108','70697','70699','70706') order by bases.Nazev, bases.Id_Pohoda

Děkuji za rady....

Moderátor juriad: Zkrácen seznam id asi na polovinu. Odstraněno duplicitní odeslání.
Kajman
Profil
Jaký je explain?
Pavel Calta
Profil
Kajman:
Děkzuji za odpověď.
Kajman
Profil
Je tam měřitelný rozdíl, pokud ta id budou seřazená a zapsána jako číslo a ne string?
Pavel Calta
Profil
Kajman:
Není... Zkouším to předělat ještě jinak, abych se tomu where IN vyhnul.
tttttt
Profil *
Pavel Calta:
Problémem bude předpokládám to Where IN, že se ptám na mnoho prvků, ale mě nějak nenapadá, jak toto zmenšit, udělat více efektivní. Ta tabulka bases obsahuje asi 28 000 řádků.
Nepředpokládej, vyzkoušej to. Jak dlouho trvá dotaz, když bude vracet jen jeden sloupec? Jak dlouho trvá dotaz, když odstraníš JOINy? Jak dlouho trvá dotaz, když ty id načteš z tabulky (třeba dočasné, vytvořené jen pro ten účel). Jak dlouho trvá, když se zeptáš na stejný počet (jiných) záznamů pomocí [pre]id BETWEEN …[pre]? Jak dlouho trvá bez řazení?
Je seznam těch prvků výsledek jiného dotazu? Pokud ano, dalo by se to nahradit poddotazem.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0