Rumah >pangkalan data >tutorial mysql >Mengapa My MySQL CASE BILA Kemas Kini Lambat dan Menjejaskan Semua Baris?

Mengapa My MySQL CASE BILA Kemas Kini Lambat dan Menjejaskan Semua Baris?

Susan Sarandon
Susan Sarandonasal
2024-11-25 11:21:11891semak imbas

Why is My MySQL CASE WHEN Update Slow and Affecting All Rows?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn