Optimalizace výkonu – 1 nebo raději 2 DB dotazy?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
omachala
Člen | 20
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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‘)