0
LIKEに一致する最低価格の行をフェッチするために、以下のクエリを使用しています。SQL:LIKEと結合し、min()
Suppliers
id | name
----------------------------------------
1 | sup1
2 | sup2
Prices
id | article_number | price | supplier_id
------------------------------------------------
1 | 12345678 | 312 | 1
2 | 12345678 | 219 | 2
3 | 87654321 | 312 | 1
select prices.* from prices
inner join
(
select min(price) as price,
article_number as article_number from prices group by article_number
)
min_prices on prices.price = min_prices.price
and prices.article_number = min_prices.article_number
WHERE prices.article_number LIKE '".$q."%'
が、今も仕入先テーブルからsuppliers.nameを取得したい:
select prices.*, suppliers.name from prices, suppliers
inner join
(
select min(price) as price,
prices.article_number as article_number from prices group by prices.article_number
)
min_prices on price = min_prices.price
and article_number = min_prices.article_number
WHERE
prices.article_number LIKE '".$q."%' AND
prices.supplier_id = suppliers.id"
これは、それがすることになっている行の18倍の量を返しますか...?
また、テーブルは10億以上の行から成っているため、効率は非常に重要です。
ショー 'からの出力のための撮影ごとに、関連するテーブルのテーブルtablexyz'を作成します。カバーしているインデックスであっても知っているコンポジットインデックスを取得してみてください。もちろん、 'explain'からの出力です。 '(price、article_number)'のコンポジットは 'article_number'の幅に依存して甘くなります – Drew