0

このクエリを最適化しようとしましたが、特定のビジネス要件のために実行できません。

テーブル:

  • b2:約200万件、店舗業務記録
  • business_reviews: 小さな表、ビジネスのストア レビュー (各ビジネスには複数のレビューを含めることができます)
  • business_feature_item: 小さなテーブル、ビジネス向けのストア機能 (各ビジネスには複数の機能を含めることができます)

結果に対する特定のビジネス要件:

  • 業務実績を表示
  • 関連するビジネスのレビューも表示する
  • 機能の検索も許可する
  • b2.starbizとスコア(MATCH AGAINSTによって生成された)でソート

私の現在のクエリは一時テーブル、ユニオンオール、ソートを使用しているため、結果が大きい場合はうまく機能しません。このクエリを書き直して、より効率的に機能させる方法はありますか?

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 
4

1 に答える 1