2012-04-27 2 views
0

질문에 혼란 스럽습니다. 어떤 질문이라면 알려주세요. 나는 그것을 묻는 법을 모른다.MySQL 쿼리 최적화 및 정렬

나는 90000 이상의 호텔리스트를 MYSQL 데이터베이스에 가지고 있습니다. 특정 도시의 호텔을 검색하면 일반적으로 90000 개의 검색 결과 목록이 나옵니다. 특정 도시와 비교해 호텔을 분류하고 싶습니다. 이런 이유로 일반적으로 필터링 쿼리를 사용하지만, 이제는 90000 목록에서 결과를 추출하는 데 많은 시간이 걸리는 것으로 나타났습니다. 뉴욕시 내의 호텔을 검색하면 90000 목록에서 56 개 호텔을 검색하고 가격, 등급 등의 필터링을하면 56 개의 목록에서만 검색 할 수 있다고 생각합니다. MYSQL에 호텔을 끌기위한 방법이 있습니까? 가상 테이블 또는 뷰라고 할 수 있습니다. 모르겠습니다. 해결하도록 도와주세요.

+0

귀하의 호텔 테이블이 도시에 색인되어 있습니까? – geoB

+0

테이블 구조와 인덱스 목록을 작성하는 것이 매우 좋은 방법입니다. "보기"를 만드는 것이 최선의 대답은 아니며 위치와 가격별로 쿼리를 결합하는 것은 mysql이 처리 할 수있는 것이 아닙니다. – DRapp

답변

1

하나의 쿼리에서 모든 필터링과 정렬을 수행 할 수 있지만 기반에 인덱스를 추가해야합니다.

http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

90 000 행 : 그 작은 테이블입니다. 열 번 더 처리하고 결과는 10ms입니다.

CREATE VIEW ny_hotels AS 
SELECT price, range, etc FROM hotels WHERE city = 'NY' 

가 ... 다음 일반 테이블처럼이 뷰를 쿼리 :

+0

+1. 90K 행은 실제로 작은 테이블이며, 파티션을 나누면 잔인한 것처럼 보입니다.) – raina77ow

+0

더 커질 것입니다. 나는 그것에 관한 연구를하고 있으며 약 10,000,000 개의 호텔로 갈 것입니다. – user1361160

+0

1M 또는 10M을 가정 할 때 색인을 사용하는 것은 여전히 ​​방법입니다. where 또는 sort by 절에 나타나는 모든 열에 인덱스를 추가하면 괜찮을 것입니다. 오늘의 기지는 크다. –

0

글쎄, 당신은 항상 같은 뷰를 사용할 수 있습니다

SELECT price, rating FROM ny_hotels WHERE hotel_id = @some_hotel_id 

하지만 난 city 열을 인덱싱 제안 할 수 있습니다 대신 메인 테이블에?