2017-08-04 71 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