sql >> Databáze >  >> RDS >> Mysql

počet za každé spojení - optimalizace

Pro účely optimalizace je dobrým pravidlem připojit méně, ne více. Ve skutečnosti byste se měli pokusit spojit co nejmenší počet řádků s co nejmenším počtem řádků. S jakýmkoli dalším připojením znásobíte náklady místo toho, abyste náklady přidávali. Protože mysql v podstatě jen vygeneruje velkou násobenou matici. Mnoho z toho se však optimalizuje pomocí indexů a dalších věcí.

Ale abych odpověděl na vaši otázku:ve skutečnosti je možné počítat pouze s jedním velkým spojením, za předpokladu, že stoly mají jedinečné klíče a idalb je jedinečný klíč pro album. Pak a teprve potom to můžete udělat podobně jako váš kód:

select alb.titreAlb as "Titre",
       count(distinct payalb.idAlb, payalb.PrimaryKeyFields) "Pays",
       count(distinct peralb.idAlb, peralb.PrimaryKeyFields) "Personnages",
       count(distinct juralb.idAlb, juralb.PrimaryKeyFields) "Jurons"
from album alb
left join pays_album payalb using ( idAlb )
left join pers_album peralb using ( idAlb )
left join juron_album juralb using ( idAlb )
where alb.titreAlb = "LES CIGARES DU PHARAON"
group by alb.titreAlb

kde PrimaryKeyFields znamená pole primárního klíče spojených tabulek (musíte je vyhledat).

Distinct odstraní vliv ostatních spojení na počet. Ale bohužel obecně distinct neodstraní vliv spojení na cenu.

Pokud však máte indexy, které pokrývají všechna pole (idAlb + PrimaryKeyFields) vašich tabulek, může to být stejně rychlé jako původní řešení (protože dokáže optimalizovat distinct abyste neprováděli třídění) a přiblížíte se tomu, na co jste mysleli (prostě jednou projdete každou tabulku/index). Ale v normálním nebo nejhorším případě szenario by to mělo fungovat hůř než rozumné řešení (jako to SlimGhost) - protože je pochybné, že najde optimální strategii. Ale pohrajte si s tím a zkontrolujte vysvětlení (a zveřejněte zjištění), možná mysql udělá něco šíleného.



  1. Pět nejlepších softwarových aplikací pro přístup k serverům MySQL/MariaDB

  2. Jak vytvořit menu v SQLPlus nebo PL/SQL

  3. Jak získat zřetelný seznam slov používaných ve všech záznamech pole pomocí MS SQL?

  4. Jak nainstalovat Cassandra v3 na CentOS 6