MariaDB 데이터베이스에서 대규모 데이터 세트로 작업합니다. 두 개의 테이블이 있습니다. 테이블 A에는 5,700만 개의 행이 있고 테이블 B에는 약 500개의 행이 있습니다. 테이블 B는 테이블 A의 열과 관련된 ID의 하위 집합입니다. A 테이블 B의 모든 행을 삭제하고 싶습니다.
예제 표 A:
분류_ID | 이름 |
---|---|
20 | 메르세데스 |
30 | 가와사키 |
80 | 라이츠 |
70 | HP |
예제 표 B:
분류_ID | 유형 |
---|---|
20 | 자동차 |
30 | 자전거 |
40 | 버스 |
50 | 보트 |
따라서 이 예에서는 테이블 A의 마지막 두 행이 삭제됩니다(또는 처음 두 행만 포함하는 미러링된 테이블이 생성되며 이 역시 작동합니다).
내부 조인을 사용하여 두 번째 쿼리를 실행하려고 시도했지만 이 쿼리는 메모리 부족 예외가 발생하기까지 몇 분 정도 걸렸습니다.
이 문제를 해결하는 방법에 대한 제안이 있으십니까?
P粉2580834322023-09-08 09:32:15
필터링된 테이블에 상대적으로 적은 수의 행이 포함되어 있다고 말씀하셨으므로 가장 좋은 옵션은 조인 대신 원본 테이블로 별도의 테이블을 만드는 것입니다A
相同的列以及与您的匹配的行criteria,然后替换原始表并删除它。另外,对于如此数量的 ID,您可能希望使用 WHERE IN ()
. 거기에서 사용하는 필드가 인덱싱되어 있는 한 일반적으로 way em>가 더 빠릅니다. 종합해보면:
주의사항:
A
有任何索引或外键,这些将不会被复制 - 因此您必须手动重新创建它们。我建议首先运行 SHOW CREATE TABLE A
并记下其结构。或者,您可以考虑使用 SHOW CREATE TABLE A
的输出作为模板显式创建表 new_A
,然后执行 INSERT INTO new_A SELECT ... code> 而不是 CREATE TABLE new_A AS SELECT ...
이후에는 동일한 쿼리를 사용합니다.