Optimalizace výkonu – 1 nebo raději 2 DB dotazy?
- omachala
- Člen | 20
Předem se omlouvám, že nejde přímo o dotaz na Nette ale obecně databáze.
Mám dvě tabulky přičemž uvažujme řádově statisíce záznamů v T1 a desítky záznamů v T2
T1 [id, sekce_id] //MyISAM
T2 [id, url] // InnoDB
a vyhledávám se zadanou hodnotou url.
Která varianta vyhledávání je rychlejší?
1. select * from T1 left join T2 on T1.sekce_id = T2.id where url = 'string'
2. nebo položit dva dotazy:
a) select id as idsekce from T2 where url = 'string'
b) select * from T1 where sekce_id = idsekce
Zároveň mám v úmyslu více než jeden JOIN a obávám se, že joinování tak velkého počtu řádku bude pomalé. Předem děkuji za každý Váš postřeh.
- iNviNho
- Člen | 352
Už len kvoli čistote, resp. prehladnosti kodu, alebo SQL dotazu by som mal pre jeden vypis = jeden SQL dotaz nech je velký aký chce …
Možno by bola sranda vyskúšať napríklad v jave túto problematiku, kde by sme mohli porovnávať doslova v nanosekundách, ale ak ťa to naozaj trápi tak → http://docs.oracle.com/…optimops.htm
- enumag
- Člen | 2118
Koukám že Google dnes opět nefungoval…
http://stackoverflow.com/…iple-queries
http://stackoverflow.com/…iple-queries#…
Editoval enumag (15. 10. 2013 0:18)
- Jiří Nápravník
- Člen | 710
Když se ptáš co je rychlejší, tak si to zkus na reálných datech a přeměř si to ne? Jinak já používám join obyčejně i přes několik tabulek za sebou a nemám žádné problémy. Nakonfiguruj si správně index hlavně.
Jinak jestliže máš v T1 statisíce záznamů a v T1 nebylo by lepší obrátit ten dotaz a dávat select * na T2 a přijoinout teprve t1 ?
přpadně taky můžeš použít dotaz v dotazu či-li něco na způsob:
select * from T1 where sekce_id = (select id from T2 where url = ‚string‘)