回答編集履歴

14

推敲

2021/10/31 06:23

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -54,6 +54,6 @@
54
54
 
55
55
  この例での主なチューニングは条件部分のSQLになります。
56
56
 
57
- 状況によって相関によるExistsを使用するなどもありますが、条件として分離できていますから、
57
+ 状況によって相関によるExistsを使用するなどもありますが、条件として分離できていますから、
58
58
 
59
59
  駆動表が団体であるので、サブクエリーではなく、join してwhere条件とする方が良いかと思います。

13

訂正

2021/10/31 06:23

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -26,17 +26,15 @@
26
26
 
27
27
  質問の内容で考えると以下の様になります。
28
28
 
29
- ※団体IDが団体のプライマリーだと想定。冗長さの例として取得部分に作品も追加しています。
29
+ ※団体IDが団体のプライマリーだと想定。
30
30
 
31
31
  ```SQL
32
32
 
33
33
  SELECT 出したい項目1, 出したい項目2,・・・
34
34
 
35
- FROM 団体 t1 left join 作品 t2
35
+ FROM 団体
36
36
 
37
- on t1.団体ID=t2.団体ID
38
-
39
- WHERE t1.団体ID IN ( -- 条件用SQL
37
+ WHERE 団体ID IN ( -- 条件用SQL
40
38
 
41
39
  SELECT distinct t1.団体ID
42
40
 

12

追記

2021/10/31 06:19

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -56,4 +56,6 @@
56
56
 
57
57
  この例での主なチューニングは条件部分のSQLになります。
58
58
 
59
- 状況によって相関によるExistsを使用するなど
59
+ 状況によって相関によるExistsを使用するなどもありますが、条件として分離できているますから、
60
+
61
+ 駆動表が団体であるので、サブクエリーではなく、join してwhere条件とする方が良いかと思います。

11

追記

2021/10/31 06:17

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -24,7 +24,9 @@
24
24
 
25
25
 
26
26
 
27
- 質問の内容で考えると以下の様になります。(団体IDが団体のプライマリーだと想定)
27
+ 質問の内容で考えると以下の様になります。
28
+
29
+ ※団体IDが団体のプライマリーだと想定。冗長さの例として取得部分に作品も追加しています。
28
30
 
29
31
  ```SQL
30
32
 

10

追記

2021/10/31 06:11

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
  on t1.団体ID=t2.団体ID
36
36
 
37
- WHERE t1.団体ID IN (
37
+ WHERE t1.団体ID IN ( -- 条件用SQL
38
38
 
39
39
  SELECT distinct t1.団体ID
40
40
 

9

推敲

2021/10/31 06:09

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -1,4 +1,4 @@
1
- 表示を目的とする場合に、お薦めしたいSQLの組み立て方は、
1
+ **表示を目的**とする場合に、お薦めしたいSQLの組み立て方は、
2
2
 
3
3
  ・条件は取得したい集合の駆動表のプライマリーキーだけにする
4
4
 

8

追記

2021/10/31 06:01

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -51,3 +51,7 @@
51
51
  ORDER BY 好きな並び順を記載
52
52
 
53
53
  ```
54
+
55
+ この例での主なチューニングは条件部分のSQLになります。
56
+
57
+ 状況によって相関によるExistsを使用するなど。

7

追記

2021/10/31 05:58

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  とはいえ、これが最速になる場合もあります。
22
22
 
23
- 取得と条件を分離する事によって、変更があっても極端な性能劣化となりにくいのです。
23
+ 取得と条件を分離する事によって、取得や条件一方のみでのテーブル参照なども可能で、変更があっても極端な性能劣化となりにくいのです。
24
24
 
25
25
 
26
26
 

6

推敲

2021/10/31 05:49

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -18,7 +18,9 @@
18
18
 
19
19
  これは、苦労してチューニングを行った後の変更で、また苦労のやり直しになる事を改善する目的で行き着いた、**最速ではなく安定を目的**としたものです。
20
20
 
21
+ とはいえ、これが最速になる場合もあります。
22
+
21
- はいえこれが最速になる場合もあります。変更があっても極端な性能劣化となりにくいのです。
23
+ 取得条件を分離する事によって、変更があっても極端な性能劣化となりにくいのです。
22
24
 
23
25
 
24
26
 

5

追記

2021/10/31 05:38

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
  これは、苦労してチューニングを行った後の変更で、また苦労のやり直しになる事を改善する目的で行き着いた、**最速ではなく安定を目的**としたものです。
20
20
 
21
- ※とはいえ、MySQL以外ではこれが最速になるものもありますが。
21
+ ※とはいえ、これが最速になる場合もあります。変更あっても極端な性能劣化となりにくいのです
22
22
 
23
23
 
24
24
 

4

推敲

2021/10/31 05:32

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -17,6 +17,8 @@
17
17
 
18
18
 
19
19
  これは、苦労してチューニングを行った後の変更で、また苦労のやり直しになる事を改善する目的で行き着いた、**最速ではなく安定を目的**としたものです。
20
+
21
+ ※とはいえ、MySQL以外ではこれが最速になるものもありますが。
20
22
 
21
23
 
22
24
 

3

追記

2021/10/31 05:28

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -13,6 +13,10 @@
13
13
  また、条件をプライマリーキーのみとする事により、取得したい集合と条件の集合に分離されるので、チューニングも施しやすくなります。
14
14
 
15
15
  勿論、取得する集合と条件の集合を分離するので、冗長さを感じる記述にはなりますが、安定した抽出速度を得る事が出来ます。
16
+
17
+
18
+
19
+ これは、苦労してチューニングを行った後の変更で、また苦労のやり直しになる事を改善する目的で行き着いた、**最速ではなく安定を目的**としたものです。
16
20
 
17
21
 
18
22
 

2

加筆

2021/10/31 05:05

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -22,13 +22,15 @@
22
22
 
23
23
  SELECT 出したい項目1, 出したい項目2,・・・
24
24
 
25
- FROM 団体
25
+ FROM 団体 t1 left join 作品 t2
26
26
 
27
+ on t1.団体ID=t2.団体ID
28
+
27
- WHERE 団体ID IN (
29
+ WHERE t1.団体ID IN (
28
30
 
29
31
  SELECT distinct t1.団体ID
30
32
 
31
- FROM 団体 t1 inner join 作品 t2
33
+ FROM 団体 t1 left join 作品 t2
32
34
 
33
35
  on t1.団体ID=t2.団体ID
34
36
 

1

推敲

2021/10/31 03:52

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -1,8 +1,10 @@
1
- お薦めしたいSQLの組み立て方は、
1
+ 表示を目的とする場合に、お薦めしたいSQLの組み立て方は、
2
2
 
3
3
  ・条件は取得したい集合の駆動表のプライマリーキーだけにする
4
4
 
5
5
  です。
6
+
7
+
6
8
 
7
9
 
8
10