나는 매우 큰 테이블을 가지고 있으며 id look ups와 같은 매우 간단한 쿼리를 수행합니다. 테이블 행이 증가하여 쿼리가 시간이 지남에 따라 느려집니다. 두 번째로 약 300 개의 쿼리를 수행하면 내 스크립트가 느리게 실행되고 내 메모리가 99 % (메모리가 DB 크기보다 작음)가됩니다. 최대 성능을 위해 테이블을 분할하고 하위 분할하려면 여기를 클릭하십시오. (그것을 좋아하는 30 개의 테이블 중에서), 나는 파티셔닝에 매우 익숙하고 많은 것을 알지 못하기 때문에 코드를 추가하십시오. select 쿼리는 id lookup 및 간단한 삽입을위한 절이있는 곳입니다. RAM을 업그레이드하여 DB 크기보다 더 늘리고 싶지만 문제가 해결되지 않으면 파티션을 더 잘 처리 할 수 있을지 모르겠다.분할 및 서브 분할 기본 키 및 성능을 높이기 위해 2 개의 인덱스에 의한 mysql 테이블
이SELECT id FROM books WHERE url = 'blabla';
INSERT INTO user_books SET book_id = '3', user_id = '10';
각 쿼리는 약 0.05-0.2 초
내가 각 테이블의 주위 5-10000000 행을 가지고 취 여기
CREATE TABLE `books` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(200) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`picture` VARCHAR(500) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`url` VARCHAR(500) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
`created` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `url` (`url`(333)),
INDEX `name` (`name`)
)
COLLATE='utf8_unicode_ci'
ENGINE=MyISAM
ROW_FORMAT=DEFAULT
AUTO_INCREMENT=937
내 쿼리의 몇 가지 예입니다.
DB 크기는 내가 방금 파티션을 추가하려고 할 경우에, 나는 키 파티션을 사용하는 것이 좋습니다 것 16기가바이트
"매우 큰"행은 몇 개입니까? 실행하는 쿼리의 예는 무엇입니까? 설명 계획은 어떻게 생겼습니까? 각 쿼리에는 어느 정도의 기간이 소요됩니까? –
@Derek 내가 질문 한 내용으로 질문을 편집했습니다. – Ben
innodb를 사용하고 가능한 경우 클러스터 된 인덱스 활용 http://stackoverflow.com/questions/4419499/mysql-nosql-help-me-to-choose-the-right-one-on-a/4421601#4421601 –