2011-10-07 6 views
1

지금 문제가되는 것은 실제로이 테이블 (datekeyword_id, website_id, occurrence, percentage)

다섯 개의 열이 있습니다 웹 사이트의 키워드 분석을위한 관계 테이블

일정 기간 동안 웹 사이트에 대한 키워드 통계를 허용하고 웹 사이트 소유자에게 시각적 그래프 표현을 허용합니다.

이제는 웹 사이트 당 평균 약 57 개의 고유 키워드를 색인하는 것이 문제입니다. 그리고 우리는 매일 약 12000 개의 웹 사이트를 색인화합니다. 이것은 우리가 이미 성능 문제를 겪고 있기 때문입니다. 따라서이 테이블 크기가 매우 빠르게 증가하고 있다는 사진을 얻을 수 있습니다.

는 지금은 keyword_id, website id, occurrence, percentagedate)에 인덱스를 가지고있다. 그래서 그들 각각에는 색인이 있습니다. 그러나 나는 여전히 선택에 문제가 있습니다.

PHP로 MySQL에서이 성능 문제를 어떻게 해결할 수 있습니까?

NOTE: The indexes are for each field and 1 for all of them combined as well. 

SQL QUERY 1: SELECT * FROM table WHERE keyword_id = "323242" 
SQL QUERY 2: SELECT * FROM table WHERE website_id = "232" 
SQL QUERY 3: SELECT * FROM table WHERE keyword_id = "323242" ORDER by percentage 
SQL QUERY 4: SELECT * FROM table WHERE website_id = "232" ORDER by occurence 
SQL QUERY 5: SELECT * FROM table WHERE keyword_id = "323242" ORDER by occurrence 
SQL QUERY 6: SELECT * FROM table WHERE website_id = "232" ORDER BY date 
+2

문제가있는 쿼리 나 쿼리의 SQL을 게시 할 수 있습니까? – webbiedave

+2

5 개의 필드 모두 또는 5 개의 개별 인덱스가있는 단일 인덱스가 있습니까? 샘플 결과 세트를 표시하면 SELECT 또는 INSERT 데이터에 문제가 있습니까? – Sparky

+1

천천히 실행되는 쿼리의'EXPLAIN'을 게시 할 수 있습니까? – philwinkle

답변

4

키워드의 배포 및 확률은 무엇입니까? 예를 들어, 모든 사이트에서 사용하는 키워드가있는 경우 매일 6mos 후 단일 키워드에 대해 2.1M 행을 사용합니다. 그게 아니라고 확신하지만 인기있는 단어는 빠르게 커질 것입니다.

website_id는 너무 나쁘지 않고 수천 줄에 지나지 않습니다.

keyword_id 및 website_id로만 쿼리를 수행하는 경우 다른 인덱스는 시간과 공간을 필요로합니다 (읽기는 제외).

이상적으로 keyword_id의 인덱스는 다른 키워드와 마찬가지로 keyword_id가 백분율로 정렬 된 쿼리에서 다소 빠른 결과를 반환하지만 데이터의 레이아웃에 따라 달라질 수 있습니다.

얼마나 많은 메모리가 들어 있고 얼마나 빠릅니까? 이러한 쿼리를 수행 할 때 초당 IO Ops를 살펴볼 것입니다. 당신은 쉽게 드라이브를 쓰러 뜨릴 수 있습니다.

괜찮은 양의 메모리를 사용하면 order by 절은 디스크에서 무작위로 많은 양의 읽기를 수행하는 것보다 정렬 비용이 상당히 저렴해야하지만 인덱스와 관련이 있으며 정렬 방식은 디스크의 페이지

또한 모든 통계를 최신 상태로 유지해야합니다. 나쁜 통계로 인해 질의가 해독됩니다.

+0

5GB 램 ......... – Vish