[ jmarko2002 @ 15.08.2011. 17:05 ] @
Imam dve tabele sa istim karakteristikama, samo sa razlicitim imenima kolona, svaka tabela ima oko 20000 zapisa
kada formiram izvestaj o redovima koje ima tabela1, a nema tabela2 izvestaj dobijam odma:
Select * from tabela1 where id_t1 not in (select id_t2 from t2)

Ali, kada formiram izvestaj o redovima koje ima tabela2, a nema tabela1 izvestaj cekam dosta dugo.
select * from tabela2 where id_t2 not in (select id_t1 from t1)

tabela1:
id_t1 - varchar(4), PK
naslov - varchar(80)

tabela2:
id_t2 - varchar(4), PK
naslov - varchar(80)

U cemu moze da bude problem?

Koristim MySQL 5.5, InnoDB

Hvala!
[ vbbojan @ 15.08.2011. 18:56 ] @
Problem je sa WHERE IN i treba ga zaobilaziti kad god se može.

Mnogo efikasnije rešenje ti je sa JOIN.
Ovaj će ti vratiti sve što ima u t1 a nema u t2:
Code:

SELECT 
  t1.Id
FROM
  t1
  LEFT OUTER JOIN t2 ON (t1.Id = t2.Id)
WHERE
  t2.Id IS NULL

Pozdrav
[ jmarko2002 @ 15.08.2011. 19:54 ] @
Probao sam upit sa JOIN, ali on je jos sporiji od WHERE IN!

Kad trazim sta nedostaje u t2 uradi za 0.05sec, a obrnuto oko 2min. Stvarno mi nije jasno u cemu je problem...
[ bogdan.kecman @ 15.08.2011. 20:04 ] @
uradi explain extended za oba upita pa uporedi
[ jmarko2002 @ 15.08.2011. 20:47 ] @
Pokazao je razlike u polju type. Obrisao sam tabelu2, kreirao je ponovo, napunio zapisima i sad sljaka odlicno!

Hvala puno!!