回答編集履歴
3
推敲
test
CHANGED
@@ -24,7 +24,7 @@
|
|
24
24
|
|
25
25
|
|
26
26
|
|
27
|
-
結果的にサブクエリーをさらに集計するような仕組みが働いて
|
27
|
+
結果的にサブクエリーをさらに集計するような仕組みが働いて、遅いのではないかと思われます。
|
28
28
|
|
29
29
|
基本に忠実に、SQLを組み立てると、必要なインデックスも明確になると思います。
|
30
30
|
|
2
推敲
test
CHANGED
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
|
32
32
|
|
33
|
-
性能が改善するかどうかわかりませんが、素直に組み立てると以下のようなSQLになるのではないかと。
|
33
|
+
性能が改善するかどうかわかりませんが、素直にキーを揃えるように組み立てると以下のようなSQLになるのではないかと。
|
34
34
|
|
35
35
|
```SQL
|
36
36
|
|
1
追記
test
CHANGED
@@ -2,9 +2,29 @@
|
|
2
2
|
|
3
3
|
※他のDBMSなら文法エラー
|
4
4
|
|
5
|
+
説明します。
|
6
|
+
|
7
|
+
先ず集計前の状態の以下のSQLは正しい結果だと思います。
|
8
|
+
|
9
|
+
```SQL
|
10
|
+
|
11
|
+
SELECT location_id, product_id, stock_num
|
12
|
+
|
13
|
+
, IFNULL((SELECT SUM(bst.bought_num) FROM BoughtStock bst WHERE bst.stock_id = stk.stock_id), 0) AS '引当総数'
|
14
|
+
|
15
|
+
, (SELECT SUM(stk2.stock_num) FROM Stock stk2 WHERE stk2.location_id = stk.location_id) AS 'ロケ内総在庫数'
|
16
|
+
|
17
|
+
FROM Stock
|
18
|
+
|
19
|
+
```
|
20
|
+
|
21
|
+
これを、`location_id`, `product_id`単位で集計としていますが、じゃあ、`引当総数`と`ロケ内総在庫数`はどんな集計されているの?って事です。これらは集計されず適当な何れかの値が採用されています。
|
22
|
+
|
23
|
+
相関問い合わせなので、それらの相関内の何れかの値が使用されていますが、何れも同じ値なので、求めたいものと同じになっているに過ぎません。
|
5
24
|
|
6
25
|
|
26
|
+
|
7
|
-
サブクエリーをさらに集計するような仕組みが働いているので、遅いのではないかと思われます。
|
27
|
+
結果的にサブクエリーをさらに集計するような仕組みが働いているので、遅いのではないかと思われます。
|
8
28
|
|
9
29
|
基本に忠実に、SQLを組み立てると、必要なインデックスも明確になると思います。
|
10
30
|
|