SQLite 3을 사용하고 있습니다. 테이블이 forums
, 150 행, 테이블이 posts
, ~ 440 만입니다. 각 게시물은 포럼에 속합니다.1을 선택하려면 40ms가 걸리고 150을 선택하려면 500 초가 걸리는 이유는 무엇입니까?
각 포럼에서 최신 게시물의 타임 스탬프를 선택하고 싶습니다. 최신 게시물 하나를 묻는다면 SELECT MAX(timestamp) FROM posts WHERE forum_id = 5
으로 평균 40ms가 걸립니다.
나는
SELECT forums.name, max(posts.timestamp)
FROM posts
JOIN forums ON posts.forum_id = forums.id
GROUP BY forums.name
의미가 있습니다 모든 포럼 및 최신 게시물의 목록을 요청하지만, 500S한다 - 단지 150 배 많은 선택, 더 오래 12,000x보다. 응용 프로그램에 루프를 작성하여 150 개의 개별 선택 쿼리를 실행하면 훨씬 빠릅니다.
나는 posts.timestamp
에 색인을 만들고 posts.timestamp, posts.forum_id
의 색인을 만들었습니다. 도움이되지 않았다.
내가 뭘 잘못하고 있니?
색인은 어떻게 생겼습니까? – negacao
'forum_id'별로 직접 그룹화하지 않는 이유는 무엇입니까? – Sirko
내 인덱스는'CREATE INDEX forums_name ON posts (forum_id ASC)'및'CREATE INDEX time_and_forum ON posts (타임 스탬프 DESC, forum_id ASC)'입니다. – GreenTriangle