2017-08-04 68 views
-2

使用零件號的號碼,我有一個表,庫存高效的方式來獲得MYSQL

id | part_number 
---------------- 
1 | R101 
2 | E763 
3 | H293 
4 | N837 
5 | Y121 
6 | U837 

表訂單項

id | order_id | quantity | price 
-------------------------------- 
1 | 1  | 3  | 45 
2 | 1  | 6  | 20 
3 | 1  | 10  | 10 
4 | 2  | 3  | 22 
5 | 2  | 8  | 10 
6 | 3  | 87  | 98 

和訂單項部件號的表

id | order_items_id | inventory_id 
---------------------------------- 
1 |  1   |  1 
2 |  1   |  3 
3 |  2   |  2 
4 |  2   |  3 
5 |  2   |  1 
6 |  3   |  4 
7 |  3   |  5 
8 |  3   |  1 
9 |  4   |  2 
10 |  4   |  3 
11 |  5   |  1 
12 |  5   |  4 
13 |  6   |  2 
14 |  6   |  4 
15 |  6   |  5 

我有一個程序,將獲得每個零件號和使用次數,但它需要很長時間一旦這些表變得非常大,就運行。我想提出一個能夠實時返回這些信息的高效程序。

part_number | number_of_times_used 
---------------------------------- 
R101  |  27 
E763  |  96 
H293  |  12 
N837  |  105 
Y121  |  97 
U837  |  0 
+0

好了,沒有看到你的查詢(或程序),以及哪些領域可能(或可能不是)索引,我們需要更多的信息。 –

+0

哪些part_number_id擁有哪部分表格。我的意思是它的外鍵。 –

+0

訂購商品零件編號中沒有零件編號 - 它在您所在的位置存儲價格是非同尋常的(但可能並非前所未有) – Strawberry

回答

0

首先從你應該擁有的東西開始。這些表格應適當編入索引。假設order_items_id是對order_items.id的引用,並且order_id是對parts.id的引用,那麼您應該在表上使用主索引 - 對於部分,id上的主索引以及id上的order_items索引。

然後,您可以在您的order_item_part_numbers - 索引order_items_part_number.order_items_id上創建外鍵給外鍵order_items.id,並將索引order_items_part_number.inventory_id索引到外鍵parts.id。

一旦你的表適當索引,你應該在你的查詢獲得相當不錯的表現:

select part_number, sum(quantity) as numnber_of_items_used 
from order_items 
join order_items_part_number on order_item.id=order_items_part_number.order_items_id 
join parts on parts.id=order_items_part_number.inventory_id 
group by part_number