Kemas Kini MySQL Menggunakan CASE WHEN/THEN/ELSE
Masalah:
Apabila cuba untuk kemas kini jadual MyISAM yang besar menggunakan pernyataan CASE WHEN/THEN/ELSE, pertanyaan memonopoli CPU dan mengambil masa yang berlebihan untuk disiapkan. Selain itu, ia mengemas kini semua baris dalam jadual, walaupun yang tidak dinyatakan dalam pertanyaan.
Penjelasan:
Sebab bagi tingkah laku ini ialah MySQL mentafsir pernyataan CASE sebagai mengemas kini semua baris dalam jadual. Baris yang tidak sepadan dengan mana-mana syarat WHEN diberikan nilai NULL.
Penyelesaian:
Untuk mengelakkan isu ini, pertanyaan harus diubah suai untuk memasukkan ELSE pernyataan yang memberikan nilai sedia ada kepada baris yang tidak sepadan dengan mana-mana syarat WHEN. Selain itu, klausa WHERE boleh digunakan untuk mengehadkan kemas kini kepada baris yang ditentukan sahaja.
Pertanyaan yang dibetulkan:
UPDATE `table` SET `uid` = CASE WHEN id = 1 THEN 2952 WHEN id = 2 THEN 4925 WHEN id = 3 THEN 1592 ELSE `uid` END WHERE id IN (1, 2, 3);
Atas ialah kandungan terperinci Mengapa My MySQL CASE BILA Kemas Kini Lambat dan Menjejaskan Semua Baris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!