2014-03-28 5 views
0

테이블 검색을 위해 SELECT 쿼리 성능을 향상시켜야합니다. 나는 약 5 백만 행의 테이블을 가지고있다. 이 표에서 검색하고 싶을 때 많은 시간이 걸리므로 받아 들일 수 없습니다. 색인을 사용하려고했지만 색인도 도움이되지 않습니다. 이 테이블을 검색하는 효율적인 방법을 제안 해주십시오. 그것은 나의 2 일 노력 그러나 운 없음을 투옥했다. 어떤 도움이 많이 ... 감사합니다큰 테이블에서 약 5 백만 레코드의 mysql 검색

편집 :

이하여 TABLE 문 내가 지금까지 가지고 CREATE :

CREATE TABLE marketing_emails_data ( 
    id int(11) NOT NULL, 
    name varchar(11) NOT NULL, 
    city varchar(105) DEFAULT NULL, 
    state varchar(40) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

그리고 이것은 내 쿼리입니다 :

SELECT DISTINCT marketing_emails_data.city 
FROM marketing_emails_data 
USE INDEX (state_index) ; 
+2

정상화 ..... – vamsi

+2

이 우리에게 테이블 레이아웃 및 – luksch

+0

은 CREATE TABLE을 수행 할 쿼리'marketing_emails_data' ( 'id'의 INT (11) NULL NOT을 보여 'name'의 VARCHAR (11) NULL NOT , 'city' varchar (105) DEFAULT NULL, 'state' varchar (40) DEFAULT NULL ) ENGINE = InnoDB DEFAULT CHARSET = latin1; 는 \t \t \t marketing_emails_data 사용 INDEX (state_index)는 도시의 테이블을 만들고 당신이 인덱스 그것을 할 수 있도록 여기에 ID를 저장 – user3427967

답변

0

하는 경우를 marketing_emails_data 테이블의 구별되는 도시를 선택하려면 해당 필드에 INDEX을 만들 수 있습니다.

ALTER TABLE marketing_emails_data ADD INDEX (city); 

그러면 쿼리가 훨씬 빨라야합니다. 그런데 쿼리에서 인덱스를 명시 할 필요는 없습니다. mysql은 쿼리에서 사용할 인덱스를 파악할만큼 똑똑하다.

tntu의 의견에서 제안한대로 더 좋은 방법은 도시 표를 만들고 marketing_emails_data 표에 도시 항목에 대한 참조 만 저장하는 것입니다. 이렇게하면 많은 공간을 절약 할 수 있습니다. 이것은 데이터베이스 정규화의 일부입니다.

+0

이 문제와 관련하여 도움을 주셔서 감사하지만시를 위해 5 백만 건의 레코드를 업데이트 할 수 있습니까? 실용적이지는 않을 것입니다. 실제로 많은 공간을 절약 할 것입니다. – user3427967

+0

테이블에 5 백만 개의 항목이 실제로 많지는 않습니다. MySQL은 쉽게 더 많은 항목을 처리 할 수 ​​ – luksch

+0

당신이 제발이 문제에 다른 해결책을 제안하시기 바랍니다 수 있습니다. ? – user3427967