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의 마지막 두 행이 삭제됩니다(또는 처음 두 행만 포함하는 미러링된 테이블이 생성되며 이 역시 작동합니다).
내부 조인을 사용하여 두 번째 쿼리를 실행하려고 시도했지만 이 쿼리는 메모리 부족 예외가 발생하기까지 몇 분 정도 걸렸습니다.
이 문제를 해결하는 방법에 대한 제안이 있으십니까?
필터링된 테이블에 상대적으로 적은 수의 행이 포함되어 있다고 말씀하셨으므로 가장 좋은 옵션은 조인 대신 원본 테이블로 별도의 테이블을 만드는 것입니다
으아악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 ...
이후에는 동일한 쿼리를 사용합니다.이것을 시도해 보세요:
으아악