CREATE TABLE "test1"(
"test1_id" integer,
"test2_id" integer NOT NULL,
"test3_id" integer NOT NULL,
CONSTRAINT pk_test1_test1_id PRIMARY KEY("test1_id"),
FOREIGN KEY ("test2_id") REFERENCES "test2"("test2_id") ON DELETE RESTRICT ON UPDATE RESTRICT,
FOREIGN KEY ("test3_id") REFERENCES "test3"("test3_id") ON DELETE RESTRICT ON UPDATE RESTRICT
);
CREATE TABLE "test2"(
"test2_id" integer,
CONSTRAINT pk_test1_test2_id PRIMARY KEY("test2")
);
CREATE TABLE "test3"(
"test3_id" integer,
CONSTRAINT pk_test3_test3_id PRIMARY KEY("test3")
);
select * from test1 a
INNER JOIN test2 b on a.test2_id = b.test2_id
INNER JOIN test3 c on a.test3_id = c.test3_id
limit 52000,500
test1의 데이터가 6만개
test2의 데이터가 120개
test3의 데이터가 5만개
test2_id, test3_id는 PK이고요 test1에 FK 되있는 상태인데요
mysql에서는 0.1초 정도가 걸리는데 이렇게 쿼리를 하면 1.9초 정도가 걸리는데요.
쿼리 속도가 문제가 돼서 그러는데요 이 쿼리를 좀더 빠르게 할려면 어떻게 해야하는지 좀 알려 주세요.
답변이 늦어 죄송합니다.
올려 주신 query는 6만건의 test1 table 전체을 스캔하면서 test2 table과 조인하고, 그 결과를 가지고 다시 test3 테이블과 조인한 후 결과 중 52000번 부터 500건을 가져오는 상당히 비용이 큰 query입니다.
실제 사용되는 사용되는 query는 아닌것 같고 테스트를 위한 query인 것 같습니다.
현재 상태로의 튜닝 포인트는 없어 보입니다.
outer에 해당하는 test1 table에 조건을 주어 조인 대상을 줄여주지 않는 다면 query 성능 개선은 힘들 것 같습니다.