Mengemas kini Jadual MyISAM MySQL Menggunakan CASE WHEN/THEN/ELSE
S: Apabila cuba mengemas kini baris tertentu dalam jadual MyISAM yang besar menggunakan Kenyataan CASE, pertanyaan menggunakan CPU yang berlebihan dan mengemas kini semua baris, termasuk yang tidak dinyatakan. Apakah yang boleh dilakukan untuk mengehadkan kemas kini kepada baris yang dimaksudkan?
J: Isu timbul apabila pernyataan CASE tidak termasuk klausa LAIN. Secara lalai, baris yang tidak disebut secara eksplisit dalam pernyataan CASE diberikan nilai NULL. Ini mengakibatkan kemas kini yang tidak diperlukan merentas keseluruhan jadual.
Untuk menyelesaikan masalah ini, tambahkan klausa ELSE pada pernyataan CASE, memberikan nilai sedia ada lajur uid kepadanya. Ini akan menghalang kemas kini daripada menjejaskan baris yang tidak dinyatakan dalam klausa WHEN.
Selain itu, sertakan klausa WHERE untuk menyatakan secara eksplisit baris yang perlu dikemas kini. Ini memastikan bahawa hanya baris yang dikehendaki disasarkan.
Contoh:
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 MyISAM MySQL Saya MENGEMASKINI dengan CASE BILA Gagal dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!