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 |
#2 · Zasláno: 16. 8. 2022, 13:29:10
Jaký je explain?
|
||
Pavel Calta Profil |
#3 · Zasláno: 16. 8. 2022, 13:58:33
Kajman:
Děkzuji za odpověď. |
||
Kajman Profil |
#4 · Zasláno: 16. 8. 2022, 15:10:25
Je tam měřitelný rozdíl, pokud ta id budou seřazená a zapsána jako číslo a ne string?
|
||
Pavel Calta Profil |
#5 · Zasláno: 17. 8. 2022, 08:05:36
Kajman:
Není... Zkouším to předělat ještě jinak, abych se tomu where IN vyhnul. |
||
tttttt Profil * |
#6 · Zasláno: 17. 8. 2022, 11:43:24
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. |
||
Časová prodleva: 2 roky
|
0