Zadejte hledaný výraz...

Optimalizace pro vyhledávání záznamu podle vlastností z jiné tabulky

Mám tabulku Shops ve které jsou různé informace o obchodech.
Řekněme, že obsahuje:
id (INT-U, PK, AI),
name (VAR(255), NN), ...
Pak mám tabulku Flag_types, která obsahuje různé vlastnosti, které tyto obchody mohou mít (např. platby kartou, klimatizace, bezbariérový přístup... atd.). Sloupce tabulky:
id (INT-U, PK, AI),
name (VAR(255), NN), ...
A nakonec třetí tabulku Flags, která tyto dvě spojuje jako cizí klíče, takže se tím řekne, které vlastnosti daný obchod má.
shop_id (INT-U, PK),
flag_id (INT-U, PK)
Problém je, že nejčastější dotaz bude muset najít všechny obchody které mají určité příznaky. Vzhledem k tomu, že tabulka Shops bude obsahovat 5000 záznamů a každý obchod bude moci mít kolem 200 různých flagů není možné pro tyto flagy připravit vlastní sloupce.
Situace je snažší tím, že v době vyhledávání už budu znát ID požadovaného flagu, takže vyhledání mi postačuje hledat daná ID.
Napadlo mě jen dát dotaz:
SELECT s.id, s.name FROM shops s
JOIN flags f ON f.shop_id = s.id AND flag_id IN (2,12,65,67,82,83,84,150,151,170,190)
GROUP BY s.id
HAVING count(f.id) = 11;
Kde 11 je počet vyhledávaných flagů.
Ale efektivita tohoto dotazu asi nebude závratná - zejména v MySQL.
Jak tuto situaci nejlépe vyřešit?
13. 3. 2009 03:04:28
https://webtrh.cz/diskuse/optimalizace-pro-vyhledavani-zaznamu-podle-vlastnosti-z-jine-tabulky#reply257890
Pro odpověď se přihlašte.
Přihlásit