Witam,
Próbuję zoptymalizować zapytanie
select COUNT(*) from L where LID IN
(select LID from L_status where LSCID < 3 AND LSCID > 0) AND LID NOT IN
(select LID from L_status where LSCID > 3 AND LSCID < 6) ;
Jego celem jest selecja rekordow z tabeli
L uzalezniona od istnienia okreslonych
statusów.
Np wszystkie rekordy z L które posiadaja
status 1 lub 2 ale nie posiadaja statusu
5 lub 6.
Są 2 tabelki
1)
CREATE TABLE `L` (
`LID` int(10) NOT NULL auto_increment,
.
.
.
KEY `LID` (`LID`)
)
2)
CREATE TABLE `L_status` (
`LSID` int(10) NOT NULL auto_increment,
`LSCID` int(10) NOT NULL default '0',
`LID` int(10) NOT NULL default '0',
KEY `LSID` (`LSID`),
KEY `LID` (`LID`),
KEY `LSCID` (`LSCID`)
)
Tabelka 2 zawiera statusy do tabelki 1
w tabelce 1 jest ok 16K rekordow
w tabelce 2 tez jest ok 16 K rekordow.
Przy tej liczbie rekordów stanowi to waskie gardło systemu.
Usiluje zoptymalizować to zapytanie i dochodze do wniosku
iż jedynym rozwiazniem jest
1) Dodanie tabelki ze statusami i JOIN na nich
2) Alternatywa dla zapytania z MINUS ktorego nie obsluguje
mysql
(select LID from L_status where LSCID < 3 AND LSCID > 0)
MINUS
(select LID from L_status where LSCID > 3 AND LSCID < 6)
Dziekuję za sugestie.
Pozdrawiam
Grzegorz