2014-12-10 2 views
0

방문자를위한 데이터 관리PHP와 MySQL. 광고 광고 웹 사이트

/transport/cars/audi/a6

또는

/real-estate/flats/some-city/city-district

내가 carsreal-estate에 대해 별도의 테이블을 계획 예를 들어, URL을 엽니 다 (별도의 테이블에 각 최상위 범주) . URL을 기반으로

(php explode 만들 배열)

$array[0] - 값에 따라 테이블에 SELECT

그래서 예를 들어

$array[1], $array[2] ...에 알고 RealEstate 표처럼 보일 수 있습니다 :

IdOfAd | RealEstateType | Location1 | Location2 | TextOfAd | and so on 
---------------------------------------------------------------------- 
1  | flat   | City1  | CityDistric1 | text.. | 
2  | land   | City2  | CityDistric2 | text.. | 

그리고 광고를 표시하는 mysql 쿼리는 같이 :

SELECT `TextOfAd`, `and so on...` 
WHERE RealEstateType = ? AND Location1 =? AND Location2 = ? 
// and possibly additional AND .. AND 
LIMIT $start, $limit 

성능에 대해 생각해보십시오. 다행히도 활성 광고 수가 길어지기를 바랍니다. (또한 만료 된 광고를 삭제하지 않으려 고하고, 열 값을 0으로 변경하여 SELECT로 표시하지 않고 검색 엔진에서 직접 방문하면 표시합니다.)

예를 들어 테이블의 행 수가 100 000이나 수백만이면 (데이터베이스 디자인을 변경하거나 SELECT을 다른 방법으로)해야합니까?

성능이 중요하지 않은 다른 테이블로 만료 된 광고를 이동하는 것에 대해 생각해보십시오. 예를 들어, 검색 엔진 사용자는 만료 된 광고가있는 URL로 이동합니다. 먼저 주 테이블을 선택하고 찾지 못하면 테이블에서 만료 된 광고를 선택하십시오. 이것은 어떤 종류의 해결책입니까?

+0

큰 테이블에서는 무료 mysql에서 다른 db로 DB 유형을 변경할 수 있습니다. MySQL은 수십만 개의 레코드로도 잘 작동합니다. –

+0

각 테이블에 수십만 개를 의미합니다 (전체 데이터베이스가 아님)? 확실하지 않으면 mysql에서 변경 ... 아니 지식과 나는 그것이 오랜 시간이 걸릴 것이라고 기대하는 광고의 높은 숫자입니다. 하지만 처음부터 데이터베이스 디자인과 코딩을위한 최적의 솔루션을 선택하고 싶습니다. – user2118559

+1

저는 mysql에서 db로 프로젝트를 진행했습니다. 한 테이블 (하나만)에 300.000 개가 넘는 행이 있습니다. 데이터베이스는 정상적으로 작동하지만 250K 레코드에 도달하면 사람들에게보다 안정적인 데이터베이스를 요청할 수 있습니다. –

답변

1

두 힌트 :

  1. 사용 ENGINE=InnoDB 테이블을 생성. InnoDB는 큰 테이블의 경우 행 레벨 잠금을 사용합니다.이 옵션을 사용하면 행의 일부를 업데이트 할 때조차도 훨씬 빠르게 읽을 수 있습니다.

  2. ADD INDEX 적절한 열에. 큰 테이블을 인덱싱하면 검색 시간이 몇 배 정도 줄어 듭니다. 잊기 쉽고 디버깅하는 데 어려움이 있습니다! 한 번 이상 느린 쿼리를 조사 해본 결과 적절한 문자 인 INDEX을 잊어 버리고 15 초 동안 실행하는 쿼리에 즉각적인 결과가 나타났습니다.

+0

간단히'ALTER TABLE categories ADD INDEX (CategoriesUrl)'? 이것이 충분하나요? 여기 정보처럼 http://stackoverflow.com/a/708508/2118559? – user2118559

+0

'CategoriesUrl' 열로 검색 하시겠습니까? –

+0

검색은 사용자의 입력에 따라 'SELECT ... WHERE'와 같을까요? 추가 텍스트를 범주 이름별로 검색 할 계획을 세웁니다. 그러나 사용자가 범주/하위 범주를 탐색하면 쿼리도 'SELECT'가됩니다. – user2118559

관련 문제