이 쿼리를 최적화하려고했지만 특정 비즈니스 요구 사항으로 인해 쿼리를 수행 할 수 없습니다.mysql 쿼리가 최적화되지 않았습니다.
테이블 :
b2
: 약 2mil 기록, 저장 비즈니스 기록business_reviews
: 작은 테이블, 기업을위한 저장 리뷰 (각 비즈 여러 리뷰를 가질 수 있습니다)business_feature_item
: 작은 테이블, 저장 비즈니스를위한 기능 (각 비즈는 여러 기능을 가질 수 있습니다.)
결과에 대한 특정 비즈니스 요구 사항은 다음과 같습니다.
- 쇼 비즈니스 기록
- 는 기능도
- b2.starbiz 정렬 및 (MATCH 반대에 의해 생성 된) 점수
현재 쿼리가 임시 테이블, 유니온 모두 및 정렬을 사용하므로 결과가 클 경우 잘 작동하지 않습니다. 더 효율적으로 작동하도록이 쿼리를 다시 작성하는 방법이 있습니까?
SELECT temp.* FROM
(SELECT DISTINCT b.business_id, b.description AS `extra`, '1' AS `type`, 0 as score
FROM b2 as b
LEFT JOIN business_feature_item AS i ON b.business_id = i.business_id
WHERE ((b.cat_id = '93' OR b.cat_id2 = '93' OR b.cat_id3 = '93'))
AND b.city_id = '152262'
AND `approved`=1
UNION ALL SELECT b.business_id, review_desc AS `extra`, '2' AS `type`, ((MATCH `review_desc` AGAINST ('"restaurants"' IN BOOLEAN MODE) * 4) + (MATCH `review_desc` AGAINST ('restaurants' IN BOOLEAN MODE))) AS score
FROM b2 AS b, business_reviews AS r
WHERE b.business_id =r.business_id
AND b.city_id = '152262'
AND (MATCH `review_desc` AGAINST ('"restaurants"' IN BOOLEAN MODE)
OR MATCH `review_desc` AGAINST ('restaurants' IN BOOLEAN MODE)))
AS temp
GROUP BY temp.business_id
ORDER BY starbiz DESC, score DESC
이 읽을 수 있도록 질문의 형식을 시도하십시오. 감사. –
select 문을 단순화 할 수 있습니까? –
선택 필드를 자름 – user2170712