나는 약을 가지고있다. 테이블의 200K 행, 약 5 분마다 약. 10 개의 새로운 인서트.빈번한 삽입 비율로 MySQL 쿼리의 성능을 향상시키는 방법은 무엇입니까?
나는 행을 가져 오기 위해 다음 쿼리를 사용하고 있습니다 - 정렬 방식으로 모든 행을 페치 이상 10 초를 복용
SELECT tb_post.ID, tb_post.USER_ID, tb_post.TEXT, tb_post.RATING, tb_post.CREATED_AT,
tb_user.ID, tb_user.NAME
FROM tb_post, tb_user
WHERE tb_post.USER_ID=tb_user.ID
ORDER BY tb_post.RATING DESC
LIMIT 30
.
id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE tb_user ALL PRIMARY NULL NULL NULL 20950 Using temporary; Using filesort 1 SIMPLE tb_post ref tb_post_FI_1 tb_post_FI_1 4 tb_user.id 4
거의 입력 :
는 다음 쿼리 EXPLAIN의 보고서입니다
tb_post.RATING
이다 플로트 식
사람이 저를 제안 할 수 tb_post.USER_ID
인덱스가 이 방법을 최적화해야하는 몇 가지 지침 질의하고 읽기 성능을 향상시킬 수 있습니까?
추신 : 저는 데이터베이스 스케일링 문제에서 초보자입니다. 따라서 어떤 종류의 제안이라도이 쿼리에만 유용 할 것입니다.
에 의해 SELECT ... ORDER를 EXPLAIN? –
혼란을 드려 죄송합니다. 내 질문을 수정했다. 색인을 생성하려고하는데 USER_ID가 이미 색인 생성되었지만 여전히 도움이되지 않습니다. 질문은 - 다른 컬럼도 인덱스 할 것인가? 그렇다면 어떤 컬럼을 인덱스 할 것인가? – Aditya
Maybee 당신은 JOIN 작업을 사용하고 테이블에 가입하는 순서를 조심해야합니다. 하지만 당신이 사용하는 데이터베이스에 따라 다릅니다 .. 자세한 내용은 http://stackoverflow.com/questions/173726/when-and-why-are-database-joins-expensive/173744#173744 –