MySQL: počasen NOT IN query
9 naročnikov
9 naročnikov
Zdravo,
imam dve tabeli.
Product
in
visitstat
SELECT id, name FROM Product ORDER BY name ASC LIMIT 100
100 rows in set (0.05 sec)
SELECT DISTINCT refId FROM visitstat WHERE type='P' AND date > '2010-10-02'
9 rows in set (0.08 sec)
SELECT id, name FROM Product WHERE id NOT IN (SELECT DISTINCT refId FROM visitstat WHERE type='P' AND date > '2010-10-02') ORDER BY name ASC LIMIT 100
100 rows in set (4 min 15.10 sec)
Ve kdo, v čem bi lahko bil problem?
15 odgovorov
kot je ze omenil blackmamba, vcasih se bolj splaca narediti dva querya :)
na strani imamo 200k+ slik in pri listanju galerij se je izkazalo za manj pozresno, ce na zacetku nafilam counte in idje slik, kot pa da bi jih iskal sproti v kaksnih joinih ali subqueryih
kelvan:
kot je ze omenil blackmamba, vcasih se bolj splaca narediti dva querya :)
na strani imamo 200k+ slik in pri listanju galerij se je izkazalo za manj pozresno, ce na zacetku nafilam counte in idje slik, kot pa da bi jih iskal sproti v kaksnih joinih ali subqueryih
V takem primeru ko računaš neko statistiko in ne rabi biti vsak query up to date pridejo zelo dobro tudi materialized view v uporabo :)
Evo ozko grlo je bilo z vašo pomočjo najdeno :)
ALTER TABLE visitstat ADD INDEX ref_id (refId);
In zdaj:
SELECT id, name FROM Product WHERE id NOT IN (SELECT DISTINCT refId FROM visitstat WHERE type='P' AND date > '2010-10-02') ORDER BY name ASC LIMIT 100;
100 rows in set (0.07 sec)
Bom moral najti kakšno literaturo o MySQL, v stilu "best practices".