2009-02-05 3 views
1

MySql에 로그를 저장하는 데 필요한 테이블을 가지고 있습니다. 테이블에 자동 증가 시퀀스가 ​​있고 다른 모든 열의 참조 무결성이 다른 테이블에 있습니다. 모든 열에 고유 키 또는 색인이 없습니다. 자동 증가가있는 열이 기본 키입니다.동시 SQL을 동일한 테이블에 트랜잭션 적으로 안전하게 삽입합니까?

동시 INSERT가 서로 충돌합니까? 나는 간섭을으로 정의하여 데이터를 잃는 것을 의미합니다.

이 삽입물에 autocommit = true를 사용하고 있습니다.

+0

어떤 스토리지 엔진을 사용 하시겠습니까? –

+0

Innodb를 사용하고 있습니다 – ashitaka

+0

MyISAM에서 작동하는 경우 Innodb에서 작동해야 함을 알았습니다 :) – ashitaka

답변

2

의 경우 :

"MyISAM supports concurrent inserts..." 
+0

+1 우리 둘 사이에, 나는 지금 질문을 덮친다고 생각한다. :) – Learning

3

당신은 당신이 동시 삽입을해서 데이터를 잃어 버릴 염려가 없습니다. 거래를 사용하면 일부 ID를 "잃을"수 있습니다. 그러나 실제 데이터는 없습니다. (트랜잭션을 시작하고 몇 개의 행을 삽입 한 다음 롤백을 수행한다고 가정하면 InnoDB는 auto_increment ID를 할당했지만 롤백을했기 때문에이 ID가있는 행이 없습니다).

인덱스가 필요하지 않으므로 ARCHIVE 테이블 엔진을 살펴 봐야합니다. 놀라 울 정도로 놀라 울 정도로 빠릅니다. 테이블이 훨씬 작아지고 나중에 테이블을 더 빨리 읽을 때 테이블이 스캔됩니다.

+0

엔진에서 지원되는 인덱스가 없기 때문에 아카이브 테이블 엔진이 다른 엔진보다 훨씬 느린 것을 느꼈다. –

+0

Cassy - 맞습니다. 인덱스를 효과적으로 사용할 수 있다면 인덱스가있는 테이블 유형이 더 빠를 것입니다. 종종 당신은 할 수 없습니다. 아카이브 테이블에 대한 전체 스캔은 최대한 빨리 수행됩니다. 그런 다음 "주문형"테이블은 관련 데이터를 요약 테이블 (인덱스 포함)로 스캔하고 그 데이터를 쿼리합니다. –

관련 문제