2010-08-04 2 views
0

"큰"테이블을 가진 필터링 섹션에서 작업 중이며 SELECT를위한 성능은 큰 관심사입니다.3 개의 큰 테이블을 가진 MySQL의 효율적인 (PHP?) 필터링

된 table_1은 710,000 기록을 가지고 있으며, 다음과 같습니다

table_2는 42,218,503 기록을 가지고 있으며, 다음과 같습니다
(PK) game_id 
param_1 
param_2 
param_3 

:

(PK) set_id 
value_1 
value_2  

table_3는 56,312,204 기록을 가지고 있으며, 다음과 같습니다

(PK) relation_id 
game_id 
set_id 
box_1 
box_2 

삽입물은 일반적이지 않지만 (일주일에 한 번) 선택은 (많은, 매일) 있습니다. 검색
3 종류 공통 다음 값 1을 제공하는 전용 (PARAM_1, PARAM_2, param_3 사용) 된 table_1 만 table_3 바이

  • , 바이

    1. 모두
  • 조합을 검색 할

    각 검색은 최대 20 게임을 반환하며, 나는 3d 사건에 대해 우려하고 있습니다. 여기서 그들은 table_1과 table_2에서 param_1, param_2 및 value_1, value_2를 모두 검색합니다. 내가 선택을 사용하고 싶지 않아 ... 시간 테이블의 크기 때문에 조인 (3 테이블 사이의 데이터는 10 기가 바이트 이상)입니다. PHP로 플랫 파일로 콘텐츠를 캐싱 할 수도 있습니다.

    다음과 같이 내가 생각 된 루틴은 다음과 같습니다

    1 단계 : SELECT set_id을

    2 단계 : table_3의 모든 GAME_ID을 선택 WHERE 1 단계

    SETP 3에서 set_id = 값 : table_1에 대한 SELECT를 작성하십시오. where game_id = 2 단계의 값

    이 접근법에 대한 아이디어 나 의견이 있으십니까?

    (임 아니라 3 차원 정규형에 -yet-와 테이블 전용 서버에)

  • +2

    데이터베이스를 사용하도록 설정하려고 했습니까? 너무 느 렸니? DB는 PHP와 같은 상호 침투 된 언어가 일치하기 어려운 몇 가지 최적화를 포함하는 경향이 있습니다. –

    +0

    은 내가 방금 찰칵 소리를 내며 테스트 쿼리를 실행 한 것처럼 느껴졌 고 3 개의 필터 (table_2.value_1, table_1.param_1 및 table_1.param_2)를 사용 했음에도 불구하고 쿼리는 0.0001 초 밖에 걸리지 않았습니다! 이것은 로컬 호스트에 있었지만 쿼리가 25 배 더 많이 걸리더라도 여전히 괜찮습니다. 맞춰 볼 가치가있는 것 같네요 ^^ (어리석은 나를 ...) – Purefan

    +0

    색인은 놀라운 것입니다! –

    답변

    1

    그냥 디자인으로 테이블에 참여하는 SQL을 작성, 데시벨은 어려울 것 몇 가지 최적화를 포함하는 경향이 일치하는 php와 같은 상호 침투 된 언어의 경우.

    쿼리가 느리게 실행되면 WHERE를보고 인덱스가 사용되는지 확인하십시오. 아직 느린 경우 조인을 살펴보십시오 .... 거기에서 더 구체적인 튜닝 질문을 할 수 있습니다.

    +0

    모든 주셔서 감사합니다 :) – Purefan

    관련 문제