MySQL: Buang Pendua daripada Pangkalan Data Besar dengan Pantas
Pertemuan dengan pangkalan data MySQL yang luas dicemari oleh entri pendua menuntut penyelesaian segera, terutamanya dalam senario di mana masa adalah pada dasarnya. Dengan kebimbangan mengenai masa pelaksanaan pertanyaan, satu pangkalan data sedemikian, yang terdiri daripada lebih sejuta baris, telah dipenuhi dengan pendua, yang berpotensi menduduki sehingga separuh daripada kapasiti storannya.
Matlamatnya adalah untuk membersihkan pangkalan data dengan pantas, mengenal pasti unik gabungan "text1" dan "text2," sambil mengekalkan satu rekod dengan nilai "text3" bukan nol untuk setiap gabungan unik. Proses ini menghalang kehilangan data dan memastikan integriti data.
Pendekatan konvensional seperti DISTINCT dan GROUP BY, walaupun berkesan pada pangkalan data yang lebih kecil, telah terbukti tidak mencukupi, dengan masa pelaksanaan pertanyaan melebihi ambang 20 minit. Oleh itu, carian sedang dijalankan untuk penyelesaian yang lebih cekap.
Satu penyelesaian sedemikian, memanfaatkan kuasa gabungan "ON DUPLICATE KEY" dan "IFNULL()", menawarkan prestasi luar biasa:
CREATE TABLE tmp LIKE yourtable; ALTER TABLE tmp ADD UNIQUE (text1, text2); INSERT INTO tmp SELECT * FROM yourtable ON DUPLICATE KEY UPDATE text3=IFNULL(text3, VALUES(text3)); RENAME TABLE yourtable TO deleteme, tmp TO yourtable; DROP TABLE deleteme;
Pendekatan ini cemerlang dengan mengelak operasi intensif sumber seperti GROUP BY dan DISTINCT. Ia juga memintas perangkap prestasi yang berkaitan dengan pengisihan fail, halangan utama untuk jadual sementara yang besar. Walaupun imbasan penuh jadual asal masih tidak dapat dielakkan, penyelesaian yang dioptimumkan ini menyediakan pendekatan paling cekap untuk mengalih keluar pendua untuk pangkalan data yang besar.
Atas ialah kandungan terperinci Bagaimana dengan Pantas Mengeluarkan Pendua daripada Pangkalan Data MySQL Besar-besaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!