1

数日前にこの質問を投稿しましたが、私が何を望んでいるかを正確に説明していませんでした。私は、よりよく定式化された質問をもう一度します。私の問題を明確にするために、いくつかの新しい情報を追加しました。

MyISAM テーブルを含む MySQL DB を取得しました。関連する 2 つのテーブルは次のとおりです。

* orders_products: orders_products_id, orders_id, product_id, product_name, product_price, product_name, product_model, final_price, ...
* products: products_id, manufacturers_id, ...

(テーブルの詳細については、製品のスクリーンショット (スクリーンショット) および製品のスクリーンショット (スクリーンショット) を参照してください)

今私が欲しいのはこれです:-manufacturers_id = 1の製品を注文したすべての注文を取得します。そして、この注文の製品の製品名(manufacturers_id = 1)。注文ごとにグループ化されます。

これまでに行ったことは次のとおりです。

SELECT
op.orders_id,
p.products_id,
op.products_name,
op.products_price,
op.products_quantity
FROM orders_products op , products p 
INNER JOIN products
ON op.products_id = p.products_id
WHERE p.manufacturers_id = 1 AND
p.orders_id > 10000

p.orders_id > 10000 は、少数の order_id のみを取得するためのテスト用です。しかし、このクエリが機能する場合でも、実行に時間がかかります。SQL サーバーが 2 回スタックしました。間違いはどこですか?

4

2 に答える 2

2
SELECT 
op.orders_id, 
p.products_id, 
op.products_name, 
op.products_price, 
op.products_quantity 
FROM orders_products op   
INNER JOIN products p
ON op.products_id = p.products_id 
WHERE p.manufacturers_id = 1 AND 
p.orders_id > 10000 

あなたは製品テーブルに暗黙的結合と明示的結合の両方を持っていました(暗黙的結合構文を二度と使用しないように注意してください。これはプログラムの非常に悪い習慣です)。コードを見ると、クロス結合を取得していると思われます。

于 2010-03-20T20:10:18.043 に答える
1

インデックスがない場合、select は多くのテーブル スキャンを生成している可能性があります。

非常に大きな結果セットを取得している可能性があり、一時領域がいっぱいになる可能性があり、スタックする可能性があります。

于 2010-03-20T20:07:08.447 に答える