이 기사를 통해 나를 도울 수 있기를 바랍니다. 트위터 서비스 (http://foller.me)가 공개 베타 2로 업데이트 될 예정이지만 적어도 2 ~ 3 초 내에 페이지를 제공 할 수있을 때까지이 작업을 수행하고 싶지 않습니다. 현재 버전은 충분히 간단하지만 내가 개발중인 개발 버전은 상당히 복잡합니다.MySQL 최적화 및 미세 조정 팁 찾기
둘 다 2 백만 행을 포함하는 내 관계 및 프로필 테이블에 관한 것입니다. 프로필 테이블에는 일반 트위터 사용자 정보가 포함되어 있으며 관계 테이블에는 UNIQUE 인덱스에 모두 [twitter_id
, followed_by
] 개의 항목이 있습니다. 가끔씩 실행되는 cron 작업이 있으며 Twitter API에 사용자 추종자를 묻고 데이터를 관계 데이터베이스에 삽입합니다.
InnoDB를 사용하고있어 테이블이 잠겨 있지 않지만 자주 업데이트되므로 쿼리 캐시가 특히 cron 작업이 실행될 때 충분한 히트를 얻지 못합니다.
SELECT screen_name FROM profiles WHERE twitter_id IN (SELECT followed_by FROM relations WHERE twitter_id = 'kovshenin')
과 같은 문구가 있습니다. 나는 그것을 할 아주 좋은 방법이 아니라고 확신한다. 그리고 이것들을 켜면 mysql-slow 로그에 올라온 것들이 (플러스 다른 많은 것들이다).
어쨌든, 내 프로젝트를 위해 훌륭한 런타임을 수행하는 방법에 대한 일반적인 팁이 필요합니다.
고마워요.
SELECT p.screen_name
FROM relations r
JOIN profiles p
ON p.twitter_id = r.followed_by
WHERE r.twitter_id = 'kovshenin'
당신은 할 수있다 :
SELECT screen_name
FROM profiles p
WHERE EXISTS
(
SELECT 1
FROM relations r
WHERE r.twitter_id = 'kovshenin'
AND r.followed_by = p.twitter_id
)
을 또한 당신이 UNIQUE
인덱스가 있기 때문에, 당신은 대부분의 아마 JOIN
로 쿼리를 다시 작성 도움이됩니다, 다음과 같이
TagCloud를 확장하는 동안 발견 한 몇 가지 문제점과 솔루션을 알려 드리겠습니다. com에 직접 연락하고 싶습니다. 연락처 정보는 http://blog.gahooa.com/about을 참조하십시오. – gahooa
제이슨, 이메일을 떨어 뜨 렸습니다. 감사 – kovshenin