質問編集履歴
2
ご指摘のあった通り、CREATE TABLE文と実行計画を記載しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -3,6 +3,36 @@
|
|
3
3
|
|
4
4
|
|
5
5
|
Stock(在庫テーブル)
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
```SQL
|
10
|
+
|
11
|
+
CREATE TABLE `Stock` (
|
12
|
+
|
13
|
+
`stock_id` INT(11) NOT NULL AUTO_INCREMENT,
|
14
|
+
|
15
|
+
`location_id` INT(11) NULL DEFAULT NULL,
|
16
|
+
|
17
|
+
`product_id` INT(11) NULL DEFAULT NULL,
|
18
|
+
|
19
|
+
`stock_num` INT(11) NULL DEFAULT NULL,
|
20
|
+
|
21
|
+
PRIMARY KEY (`stock_id`),
|
22
|
+
|
23
|
+
INDEX `location_id` (`location_id`, `product_id`)
|
24
|
+
|
25
|
+
)
|
26
|
+
|
27
|
+
COLLATE='utf8_general_ci'
|
28
|
+
|
29
|
+
ENGINE=InnoDB
|
30
|
+
|
31
|
+
;
|
32
|
+
|
33
|
+
```
|
34
|
+
|
35
|
+
|
6
36
|
|
7
37
|
|stock_id|location_id|product_id|stock_num|
|
8
38
|
|
@@ -27,6 +57,28 @@
|
|
27
57
|
|
28
58
|
|
29
59
|
BoughtStock(購入在庫)
|
60
|
+
|
61
|
+
```SQL
|
62
|
+
|
63
|
+
CREATE TABLE `BoughtStock` (
|
64
|
+
|
65
|
+
`stock_id` INT(11) NULL DEFAULT NULL,
|
66
|
+
|
67
|
+
`bought_num` INT(11) NULL DEFAULT NULL,
|
68
|
+
|
69
|
+
INDEX `stock_id` (`stock_id`)
|
70
|
+
|
71
|
+
)
|
72
|
+
|
73
|
+
COLLATE='utf8_general_ci'
|
74
|
+
|
75
|
+
ENGINE=InnoDB
|
76
|
+
|
77
|
+
ROW_FORMAT=COMPACT
|
78
|
+
|
79
|
+
;
|
80
|
+
|
81
|
+
```
|
30
82
|
|
31
83
|
※購入されるたびにレコードが挿入される(stock_idは重複する)
|
32
84
|
|
@@ -106,6 +158,22 @@
|
|
106
158
|
|
107
159
|
|
108
160
|
|
161
|
+
実行計画
|
162
|
+
|
163
|
+
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|
|
164
|
+
|
165
|
+
|:--|:--:|--:|
|
166
|
+
|
167
|
+
|1|PRIMARY|stk|index||location_id|10||8||
|
168
|
+
|
169
|
+
|3|DEPENDENT SUBQUERY|stk2|ref|location_id|location_id|5|func|1|Using where|
|
170
|
+
|
171
|
+
|2|DEPENDENT SUBQUERY|bst|ref|stock_id|stock_id|5|func|1|Using where|
|
172
|
+
|
173
|
+
|
174
|
+
|
175
|
+
|
176
|
+
|
109
177
|
上記のSQLで**結果自体は問題ありません**し、EXPLAINで実行計画を取得しても**インデックスも効いている**のですが
|
110
178
|
|
111
179
|
実際何千行の大量データで抽出すると**著しく速度が低下**します。
|
1
ご指摘のありました点修正させていただきました。まだ不足していればお手数ですが再度ご指摘くださいませ。
test
CHANGED
File without changes
|
test
CHANGED
@@ -28,6 +28,8 @@
|
|
28
28
|
|
29
29
|
BoughtStock(購入在庫)
|
30
30
|
|
31
|
+
※購入されるたびにレコードが挿入される(stock_idは重複する)
|
32
|
+
|
31
33
|
|stock_id|bought_num|
|
32
34
|
|
33
35
|
|:--|--:|
|
@@ -49,6 +51,12 @@
|
|
49
51
|
|
50
52
|
|
51
53
|
このデータから↓のような結果を抽出しようとしています。
|
54
|
+
|
55
|
+
・ロケ、商品ごとの在庫総数
|
56
|
+
|
57
|
+
・引当総数(購入点数):そのロケのその商品が何点購入されているのかを抽出
|
58
|
+
|
59
|
+
・ロケ内総在庫数(商品問わず):ロケ内の在庫を全商品ですべて合算する
|
52
60
|
|
53
61
|
|
54
62
|
|