2011-01-14 3 views
3

Wordpress 자체 호스팅 CMS로 웹 사이트를 개발 중입니다.수백만 행이있는 테이블에서 선택 쿼리 선택

페이지 중 하나에서 나는 게시물이 이미 게시되었는지 여부를 확인하기 위해 WordPress 데이터베이스에 쿼리를 실행하는 기능을 실행했습니다. 제목을 비교하여 확인하고 있습니다. 여기

내 쿼리입니다 :

$wpdb->get_row("SELECT id FROM wp_posts WHERE post_title = '" . $title . "'", 'ARRAY_A'); 

그래서 내가 $ 제목이 게시 여부 체크하고 있지만,하자 자랍니다 게시물의 수는 1 개 백만 게시물을 말한다면 나는 두렵다, 두려워 그것은 그 매우 느릴 것입니다 ..

이 쿼리를 더 빠르게 만드는 방법에 대한 제안이 있으십니까? CREATE INDEX 및 MySQL 캐싱에 대해 들었지만 그것을 구현하는 방법을 이해하지 못합니다. 모든 설명과 참조 제안은 높이 평가 될 것입니다.

+1

와우, Wordpress 블로그에 백만 편의 게시물이 있습니까? 앞서 큰 블로깅 계획이 있어야합니다. –

+0

글쎄, 당신은 웹의 많은 종류뿐만 아니라 블로그, 예를 들어 웹 블로그에 가까운하지만 실제로 많은 게시물을 가지고있는 뉴스 사이트입니다 자신을 호스팅 할 수 있습니다. 그래, 아마도 유연성을 최대한 발휘할 수 있도록 CMS없이 구축하는 것이 나을 것입니다. D – ayublin

답변

1

이 시도 :

CREATE INDEX IX_wp_posts_post_title ON wp_posts (post_title) 

인덱스의 생성 시간이 오래 걸릴 것입니다하지만 이후 쿼리는 즉시 가까운해야합니다.

+0

감사 마크, 그리고 일단 인덱스를 만들면 새로운 인덱스가 생성 된 후에 삽입 된 인덱스가 자동으로 인덱스를 가질 것입니다. – ayublin

+0

네, 맞습니다. –

1

post_title을 찾고있는 곳과 같이 데이터를 쿼리하는 데 사용되는 가장 일반적인 열을 기반으로 테이블에 색인을 만듭니다.

또한 SQL-Select 문을 직접 작성하는 것처럼 SQL 주입 공격을 광범위하게 수행 할 수 있으므로 문자열을 이스케이프 처리해야하며 매개 변수화 된 쿼리 호출과 함께 사용해야합니다.

+0

DRapp에 감사드립니다. 매개 변수화 된 쿼리에 대해 읽고 코드를 수정합니다. – ayublin

0

여기에서 달성하려는 내용이 확실하지 않습니다. 같은 제목의 두 개의 게시물이있는 것은 세계의 끝처럼 보이지 않습니다.

자세한 내용은 귀하의 코드가 완전히 SQL 주입 할 수 있습니다. 그것을 읽고 매개 변수화 된 쿼리를 사용하십시오.

색인 만들기가 쉽습니다.

색인 만들기 mytex에서 mytable (columnname);

이렇게하면 선택하는 데 도움이되지만 수백만 개의 행이 인 경우 적절한 데이터베이스 조언을 얻는 것이 좋습니다. 데이터를 파티션해야 할 수 있습니다.

+0

글쎄, 난 구글에 의해 싫어하는 중복 된 콘텐츠를 두려워 .. – ayublin

0

특정 게시물이 이미 데이터베이스에 있는지 확인하려면 게시물의 ID 대신 해당 제목을 테스트해야합니다. 하나는 고유 한 식별자 (기본 키라고 가정 함)이므로 쿼리가 훨씬 빠르게 검색 할 수 있기 때문에 하나입니다.