SQLクエリを最適化しようとしていますが、GROUP BYとORDER BYを組み合わせる最善の方法についての専門家の意見がありますMYSQLの+グループ別の注文...最速の方法ですか?
基本的に私は製品表から最低価格を選択し、商人の名前で
これは私の元のクエリた:
select p.*, m.*, d.* from datafeeds as d, products as p left outer join meta as m on p.mykey = m.mykey where p.datafeed_id = d.id and (match(p.name) against ('+asics +"gel" -women*' in boolean mode)) and p.datafeed_id = '35' and p.is_custom = 0 group by d.merchant_name order by d.merchant_name limit 50
そして、ORDER BYが働いていなかった、私は、グループ化された製品ではなく、最低の価格を持つものを得ていました。
他の議論を読んだ後、私は改善し、クエリを思い付いた:
SELECT p . * , m . * , d . *
FROM datafeeds AS d, products AS p
INNER JOIN (
SELECT MIN(display_price) AS MinPrice
FROM products AS p
WHERE 1 =1
AND (
MATCH (
p.name
)
AGAINST (
'+asics +"gel" -women*'
IN BOOLEAN
MODE
)
)
AND p.datafeed_id = '35'
AND p.is_custom =0
GROUP BY merchant_name
) AS p2 ON p.display_price = p2.MinPrice
LEFT OUTER JOIN meta AS m ON p.mykey = m.mykey
WHERE p.datafeed_id = d.id
AND (
MATCH (
p.name
)
AGAINST (
'+asics +"gel" -women*'
IN BOOLEAN
MODE
)
)
AND p.datafeed_id = '35'
AND p.is_custom =0
GROUP BY d.merchant_name
ORDER BY d.merchant_name
LIMIT 50`
クエリは、正しい結果を取得しますが、それはかなり遅いです。 より良い方法がありますか?事前に
おかげ
はあなたチュン感謝試みることができる...スピードは多かれ少なかれ同じですが、SQLは、あなたがどのように多くのレコードを持っています – giulio
たくさんきれいに見えますテーブル製品?あなたがp - (....)AS pとしてエイリアスされたサブクエリを実行するだけであれば、それは速いか遅いですか? –
約300.000件レコード...クエリ実行に0.0536秒かかりました... 0.0593 – giulio