Autor | Zpráva | ||
---|---|---|---|
JosPol Profil |
Ahojte,
pokouším se z jedné tabulky doplnit do druhé tabulky data pomocí INNER JOIN. Dotaz se spustí, ale trvá do nekonečna. TabulkaA (ta, kterou chci doplnit) adresa_psc | adresa_okres_id | adresa_kraj_id | + dalších x index nad PSČ, tabulka obsahuje 1 mio. záznamů, vč. duplicitních TabulkaB (ta, z které doplňuji) psč | okres_id | kraj_id index nad všemi, tabulka obsahuje pouze unikátní PSČ = cca 3k záznamů Páruji podle PSČ a doplňuji okres a kraj do TabulkaA Použil jsem následující query: UPDATE tabulkaA INNER JOIN tabulkaB ON tabulkaA.adresa_psc = tabulkaB.psc SET tabulkaA.adresa_kraj_id = tabulkaB.kraj_id; Jednou se mi to povedlo (nevím proč a jak), ale u záznamů v tabulceA byly místy zapsány špatné hodnoty. Dělám to localhostu, mám INNODB. Nevíte jak z toho? Doplňující dotazy: 1. Jak při používání JOIN nastavovat správně indexy? Stačí pouze nad párovanými nebo i nad doplňovanými sloupci? 2. Mohu kombinovat v jednom query vícekrát "SET" - tzn. aktualizovat více sloupců najednou nebo je lepší postupně? 3. Má smysl mít čísla v obou tabulkách seřazena vzestupně? Děkuji mnohokrát. JP Částečně se podařilo pomocí: - sjednocením datových typů u PSČ - omezení rozsahu (WHERE BETWEEN x AND y), které radil KAJMAN v předchozím dotazu - a zaindexováním se seřazením ASC |
||
Kajman Profil |
#2 · Zasláno: 28. 11. 2017, 12:43:46
Více sloupců jedním update měnit lze...
SET tabulkaA.adresa_kraj_id = tabulkaB.kraj_id, tabulkaA.adresa_okres_id = tabulkaB.okres_id U mysql je volba ASC a DESC u indexu ignorována. Tahle databáze umí stejný index číst zepředu i zezadu. Je možné, že na locale máte pomalé disky nebo jste dal databázi k dispozici v konfiguraci méně paměti. Upravit jeden sloupec v milionu záznamů by nemělo dělat problémy. Při hromadné úpravě může být lepší zrušit případné indexy nad sloupci adresa_okres_id a adresa_kraj_id v tabulceA a po úpravě je zase vytvořit. |
||
JosPol Profil |
#3 · Zasláno: 28. 11. 2017, 12:48:52
Kajman:
Děkuji. Tedy indexovat pouze to, co se "páruje" nikoli to, co se doplňuje. Z hlediska výpočetní náročnosti je úprava více sloupců v jednom query totožná / nižší / vyšší? |
||
Keeehi Profil |
#4 · Zasláno: 28. 11. 2017, 16:21:54
JosPol:
Update více sloupců v jednom dotazu bude efektivnější než postupný update více dotazy, kde se mění vždy jen jeden sloupec. To spojování a vyhledání záznamů se totiž provede jen jednou. Samozřejmě, že update více sloupců je o něco náročnější než update jednoho sloupce, ale samotné přepsání hodnot je řádově jednodušší než ten join. |
||
JosPol Profil |
#5 · Zasláno: 28. 11. 2017, 16:24:47
Keeehi:
Díky za doplnění. Otestoval jsem a máte pravdu :) |
||
Časová prodleva: 6 let
|
0