Bekerja dengan set data yang besar dalam pangkalan data mariaDB saya. Saya mempunyai dua jadual, Jadual A mengandungi 57 juta baris dan Jadual B mengandungi kira-kira 500 baris. Jadual B ialah subset id yang berkaitan dengan lajur dalam Jadual A. Saya mahu memadamkan semua baris dalam A jadual B.
Contoh Jadual A:
classification_id | Nama |
---|---|
20 | Mercedes |
30 | Kawasaki |
80 | Leitz |
70 | HP |
Contoh Jadual B:
classification_id | Taip |
---|---|
20 | Kereta |
30 | Basikal |
40 | Bas |
50 | Boat |
Jadi dalam contoh ini, dua baris terakhir dalam jadual A akan dipadamkan (atau jadual bercermin akan dibuat hanya mengandungi dua baris pertama, yang juga akan berfungsi).
Saya cuba melaksanakan pertanyaan kedua menggunakan inner join tetapi pertanyaan ini mengambil masa beberapa minit sebelum memberikan pengecualian memori.
Ada cadangan bagaimana untuk menyelesaikan masalah ini?
Memandangkan anda mengatakan jadual yang ditapis mengandungi bilangan baris yang agak kecil, pilihan terbaik anda ialah membuat jadual berasingan dengan jadual asal
A
相同的列以及与您的匹配的行criteria,然后替换原始表并删除它。另外,对于如此数量的 ID,您可能希望使用WHERE IN ()
dan bukannya gabungan - selagi medan yang anda gunakan di sana diindeks, ia biasanya akan cara em> lebih pantas. Menyatukan semuanya:Perkara yang perlu diambil perhatian:
A
有任何索引或外键,这些将不会被复制 - 因此您必须手动重新创建它们。我建议首先运行SHOW CREATE TABLE A
并记下其结构。或者,您可以考虑使用SHOW CREATE TABLE A
的输出作为模板显式创建表new_A
,然后执行INSERT INTO new_A SELECT ... code> 而不是
CREATE TABLE new_A AS SELECT ...
dan gunakan pertanyaan yang sama selepas itu.Cuba ini: