Performance update-query (MySQL)

Uit De Vliegende Brigade
Ga naar: navigatie, zoeken

Het probleem

Deze query is zo traag, dat ik 'm na 10 minuten heb onderbroken:

update ean_code
inner join ean_code_tmp on ean_code.ean_id = ean_code_tmp.ean_id
set 

    ean_code.sku = ean_code_tmp.sku,
    ean_code.note = ean_code_tmp.note;
  • Tabel ean_code heeft 100.000 regels
  • Tabel ean_code_tmp heeft 13.997 regels

Aanvullende gegevens

  • Ik heb ooit ergens opgepikt dat sommige soorten query's onthutsend traag zijn, omdat de engine daarbij per record van de ene tabel, alle records van de andere tabel moet langslopen (full table scan). Wellicht speelt dat hier een rol
  • Geen indexen gebruikt, terwijl dit waarschijnlijk precies een situatie is, waarin dat helpt om full table scans te voorkomen

De oplossing

-- Indexes aanmaken
-- ================
--
alter table ean_code     add index ean_id (ean_id);
alter table ean_code_tmp add index ean_id (ean_id);

update ean_code
inner join ean_code_tmp on ean_code.ean_id = ean_code_tmp.ean_id
set 

    ean_code.sku = ean_code_tmp.sku,
    ean_code.note = ean_code_tmp.note;

... Executietijd was nu nihil!

Zie ook