데이터베이스의 스키마는 다음과 같습니다.
CREATE TABLE `items` (
`id` mediumint( 8 ) unsigned NOT NULL AUTO_INCREMENT ,
`name` varchar( 45 ) NOT NULL ,
`main_type` tinyint( 4 ) NOT NULL ,
`rarity` tinyint( 4 ) NOT NULL ,
`stack_size` smallint( 6 ) NOT NULL ,
`sub_type` tinyint( 4 ) NOT NULL ,
`cost` mediumint( 8 ) unsigned NOT NULL ,
`ilvl` smallint( 6 ) unsigned NOT NULL DEFAULT '0',
`flavor_text` varchar( 250 ) NOT NULL ,
`rlvl` tinyint( 3 ) unsigned NOT NULL ,
`final` tinyint( 4 ) NOT NULL DEFAULT '0',
PRIMARY KEY ( `id` ) ) ENGINE = InnoDB DEFAULT CHARSET = ascii;
이제 이 테이블에 삽입을 수행하는 데 0.22초가 걸립니다. 단일 행 삽입을 수행하는 데 왜 그렇게 오랜 시간이 걸리는지 모르겠습니다. 읽기 속도는 0.005초 정도 정말 빠릅니다. here의 예제 구성을 사용하면개발자 mysql innodb평균은 ~0.002~0.005초입니다. 단일 삽입을 수행하는 데 왜 100배 이상의 시간이 걸리는지 이해가 되지 않습니다. 내 컴퓨터는 다음과 같습니다. OS:Debian Sid x86-x64, Mysql 5.1, RAM:4GB ddr2, CPU 2.0Ghz 듀얼 코어, HDD 7200RPM 32MB 캐시 640GB.
SELECT * FROM 에 시간이 거의 100배나 걸리는 이유 items
; 대 삽입 items
...; 나에게는 전혀 이해가되지 않습니다. 여전히 행이 70개에 불과한 작은 테이블이고, 행이 0개인 경우에도 그만큼 오래 걸렸습니다.
편집: 또한 이 테이블에는 ID를 통해 자체적으로 연결된 꽤 많은 다른 테이블이 있습니다. 그 중 몇 가지가 연결되어 있고 on update=cascade;를 수행합니다. 삭제 시 = 캐스케이드;. 나는 그것이 여기서 가장 큰 문제라고 생각합니다. 그렇다면 아마도 들어가서 변경하고 제거될 때 다양한 작은 항목을 개별적으로 삭제할 수 있습니다. 삽입 속도는 내가 삽입을 수행 items
하든지 아니면 기본 테이블에 대한 외래 키 링크가 있는 다른 테이블에서도 수행하든 상관없이 ~0.2초인 것 같습니다 .
답변1
글쎄, 내 첫 번째 추측은 InnoDB가 아마도 손상되었을 것입니다. 없는지 확인하실 수 있습니다
- 삽입 시 느린 작업을 수행하는 트리거
- 테이블을 잠그는 진행 중인 프로세스
- 이 테이블을 가리키는 외래 키/제약 조건
이러한 문제를 일으킬 수 있는 모든 항목에 대해 데이터베이스를 완전히 감사하는 가장 좋은 방법은 mysqldump 명령에서 스키마 덤프를 읽는 것입니다.