2010-03-20 98 views
1

前幾天我遇到了這個問題,但我沒有完全解釋我想要什麼。 我問這個問題再次提出更好: 爲了澄清我的問題,我添加了一些新的信息:SQL內部加入:數據庫卡住

我有一個MySQL數據庫與MyISAM表。這兩個相關的表是:

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

(有關表格的完整信息見截圖的產品(Screenshot)和截圖orders_products(Screenshot))

現在,我想是這樣的: - 獲取誰下令所有訂單與manufacturer_id = 1的產品。以及此訂單的產品的產品名稱(與manufacturer_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服務器陷入困境。錯誤在哪裏?

+0

小彩鑽對任何不瞭解該工具的人都沒有任何意義。確切的DDL語句會更好地顯示。 – 2010-03-20 20:02:53

回答

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 

你有隱式和顯式聯接Products表(記永遠不會再使用隱式連接語法,這是一個非常糟糕的編程與實踐),並查看代碼,我懷疑你都拿到交叉連接。

+0

非常感謝。而已。 =) – SurfingCat 2010-03-20 20:14:19

1

如果您沒有任何索引,那麼select可能會生成許多表掃描。

這可能是你回來了一個非常大的結果集,可能會填補臨時區域,這可能會解釋卡住。