teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

9

追記

2016/08/10 11:28

投稿

Panzer_vor
Panzer_vor

スコア1636

answer CHANGED
@@ -36,22 +36,22 @@
36
36
  もしかしたらPOSTする際に送受信するデータ容量が大きすぎて、
37
37
  画面遷移までに時間がかかっているだけというお話かもしれませんね。
38
38
 
39
- ます。
40
39
 
41
40
  ###追記2
42
41
  更に余談を・・・
43
42
  詳細画面表示時に発行するクエリですが、
44
43
  WHERE句での条件指定、かつORDER BY句でも「year」を指定されてますね。
45
44
 
46
- ちなみに**ORDER BY year ASC**を外したら検索結果が早くなるとかはありませんか?
45
+ ちなみに**ORDER BY year DESC**を外したら検索結果が早くなるとかはありませんか?
47
46
  もしそうであればこの場合の最適解は**yearカラムにインデックスを張ること**です。
48
47
 
49
48
  ORDER BYでソートを行う処理は一時領域を使って処理を行ったりと、
50
49
  予想以上に負荷の高い処理だったりします(一時領域があふれると悲惨)。
51
50
 
52
51
  ですがORDER BY句に指定するカラムにインデックスを張ってあると、
53
- **インデックスとして予めソートされたものを利用**するため処理が高速となります。
52
+ **インデックスとして予めソートされたものを利用**するため処理が高速となります。
54
- また
55
- WHERE条件方でも**インデックスレンジスキャン(インデックス範囲検索)が利用**さるので一石二鳥とります。
53
+ (ソート順DESC指定のインデックスも作たよう記憶がある・・・)
56
54
 
55
+ また、WHERE条件の方でも**インデックスレンジスキャン(インデックス範囲検索)が利用**されるので一石二鳥となります。
56
+
57
57
  ご参考までに・・・

8

表現訂正

2016/08/10 11:28

投稿

Panzer_vor
Panzer_vor

スコア1636

answer CHANGED
@@ -52,6 +52,6 @@
52
52
  ですがORDER BY句に指定するカラムにインデックスを張ってあると、
53
53
  **インデックスとして予めソートされたものを利用**するため処理が高速となります。
54
54
  また
55
- WHERE条件の方でも**インデックススキャンが利用**されるので一石二鳥となります。
55
+ WHERE条件の方でも**インデックスレンジスキャン(インデックス範囲検索)が利用**されるので一石二鳥となります。
56
56
 
57
57
  ご参考までに・・・

7

誤字修正

2016/08/10 11:14

投稿

Panzer_vor
Panzer_vor

スコア1636

answer CHANGED
@@ -50,7 +50,7 @@
50
50
  予想以上に負荷の高い処理だったりします(一時領域があふれると悲惨)。
51
51
 
52
52
  ですがORDER BY句に指定するカラムにインデックスを張ってあると、
53
- **インデックスとして予めソートされたものを基を利用**するため処理が高速となります。
53
+ **インデックスとして予めソートされたものを利用**するため処理が高速となります。
54
54
  また
55
55
  WHERE条件の方でも**インデックススキャンが利用**されるので一石二鳥となります。
56
56
 

6

記載ミス修正

2016/08/10 11:12

投稿

Panzer_vor
Panzer_vor

スコア1636

answer CHANGED
@@ -41,7 +41,7 @@
41
41
  ###追記2
42
42
  更に余談を・・・
43
43
  詳細画面表示時に発行するクエリですが、
44
- WHERE句での条件指定、かつORDER BY句でも指定されてますね。
44
+ WHERE句での条件指定、かつORDER BY句でも「year」を指定されてますね。
45
45
 
46
46
  ちなみに**ORDER BY year ASC**を外したら検索結果が早くなるとかはありませんか?
47
47
  もしそうであればこの場合の最適解は**yearカラムにインデックスを張ること**です。
@@ -51,5 +51,7 @@
51
51
 
52
52
  ですがORDER BY句に指定するカラムにインデックスを張ってあると、
53
53
  **インデックスとして予めソートされたものを基を利用**するため処理が高速となります。
54
+ また
55
+ WHERE条件の方でも**インデックススキャンが利用**されるので一石二鳥となります。
54
56
 
55
57
  ご参考までに・・・

5

追記2

2016/08/10 11:11

投稿

Panzer_vor
Panzer_vor

スコア1636

answer CHANGED
@@ -18,7 +18,7 @@
18
18
  曖昧検索を排除すると、
19
19
  利便性が悪くなるのはもちろんなのて一般的にはPG難易度は上がりますがページングを採用するケースが多いと思われます。
20
20
 
21
- ###追記
21
+ ###追記
22
22
  **ごめんなさい、一覧画面ではなく詳細画面の方が遅いのですね・・・**
23
23
  上記の記載は戯言なので読み飛ばしてください。
24
24
  (ながら作業は良くないですね・・・)
@@ -34,4 +34,22 @@
34
34
  IE等のブラウザの**開発者ツール**というもので送受信などでかかった計測時間を調べることができます。
35
35
 
36
36
  もしかしたらPOSTする際に送受信するデータ容量が大きすぎて、
37
- 画面遷移までに時間がかかっているだけというお話かもしれませんね。
37
+ 画面遷移までに時間がかかっているだけというお話かもしれませんね。
38
+
39
+ ます。
40
+
41
+ ###追記2
42
+ 更に余談を・・・
43
+ 詳細画面表示時に発行するクエリですが、
44
+ WHERE句での条件指定、かつORDER BY句でも指定されてますね。
45
+
46
+ ちなみに**ORDER BY year ASC**を外したら検索結果が早くなるとかはありませんか?
47
+ もしそうであればこの場合の最適解は**yearカラムにインデックスを張ること**です。
48
+
49
+ ORDER BYでソートを行う処理は一時領域を使って処理を行ったりと、
50
+ 予想以上に負荷の高い処理だったりします(一時領域があふれると悲惨)。
51
+
52
+ ですがORDER BY句に指定するカラムにインデックスを張ってあると、
53
+ **インデックスとして予めソートされたものを基を利用**するため処理が高速となります。
54
+
55
+ ご参考までに・・・

4

ごめんなさい

2016/08/10 11:10

投稿

Panzer_vor
Panzer_vor

スコア1636

answer CHANGED
@@ -19,13 +19,19 @@
19
19
  利便性が悪くなるのはもちろんなのて一般的にはPG難易度は上がりますがページングを採用するケースが多いと思われます。
20
20
 
21
21
  ###追記
22
- ちなみにですが、
23
- DB側のデータ取得(DBが結果を返却するま)さほど遅くかった場合は、
22
+ **ごめんなさい、覧画面ではなく詳細画面の方が遅いのですね・・・**
24
- HTML表示時処理がボトルネックとています
23
+ 上記記載は戯言ので読み飛ばしください。
24
+ (ながら作業は良くないですね・・・)
25
25
 
26
- そのケースと上記で挙げページング以外策として
26
+ 1点気になったの
27
- **最大表示件数に制限**を設ける手段があります。
28
- ソート順固定だと件数を超えたデータはいつまでたっても表示出来ないので、
29
- **ソート順はユーザ選択でき機能を追加**するなどレンジは必要となります
27
+ 検索結果表示されまでが遅いといのは**本当にSQL側のレスポ悪い**のでしょうか?
30
28
 
29
+ 試しに、詳細画面を開く際に発行されるであろうSQLを直接MySQLに投げても30秒とかかりますか?
30
+ もし直接実行して即検索結果が返ってくるのであれば、
31
+ それはDB側ではなくWeb側の構成の問題となります。
31
32
 
33
+ Web側でどの程度時間がかかるか詳しく知りたい場合でしたら、
34
+ IE等のブラウザの**開発者ツール**というもので送受信などでかかった計測時間を調べることができます。
35
+
36
+ もしかしたらPOSTする際に送受信するデータ容量が大きすぎて、
37
+ 画面遷移までに時間がかかっているだけというお話かもしれませんね。

3

誤字修正

2016/08/10 10:52

投稿

Panzer_vor
Panzer_vor

スコア1636

answer CHANGED
@@ -23,9 +23,9 @@
23
23
  万一DB側のデータ取得(DBが結果を返却するまで)はさほど遅くなかった場合は、
24
24
  HTML表示時の処理がボトルネックとなっています。
25
25
 
26
- そのケースだと上記で挙げたページング以外の策として
26
+ そのケースだと上記で挙げたページング以外の策として
27
27
  **最大表示件数に制限**を設ける手段があります。
28
28
  ソート順固定だと件数を超えたデータはいつまでたっても表示出来ないので、
29
- **ソート順はユーザが選択できるよう機能を追加**するなどのアレンジ必要となります。
29
+ **ソート順はユーザが選択できるよう機能を追加**するなどのアレンジ必要となります
30
30
 
31
31
 

2

追記

2016/08/10 10:33

投稿

Panzer_vor
Panzer_vor

スコア1636

answer CHANGED
@@ -15,6 +15,17 @@
15
15
  - 原則前方一致のみの検索に制限する(前方一致はインデックスが利用されます)
16
16
  - 前方一致と後方一致それぞれを設け、後方一致の場合は**関数インデックスを利用**する
17
17
  - 前後曖昧検索が譲れない場合は**LIMITなどで抽出件数を絞りページングを採用**とする
18
+ 曖昧検索を排除すると、
19
+ 利便性が悪くなるのはもちろんなのて一般的にはPG難易度は上がりますがページングを採用するケースが多いと思われます。
18
20
 
21
+ ###追記
19
- 曖昧検索を排除ると
22
+ ちなみにで
23
+ 万一DB側のデータ取得(DBが結果を返却するまで)はさほど遅くなかった場合は、
24
+ HTML表示時の処理がボトルネックとなっています。
25
+
26
+ そのケースだと上記で挙げたページング以外の策として
27
+ **最大表示件数に制限**を設ける手段があります。
28
+ ソート順固定だと件数を超えたデータはいつまでたっても表示出来ないので、
20
- 利便性が悪くなるのもちろんなのて一般的にはPG難易度は上がりますがペジング採用するケース多い思われます。
29
+ **ソート順ザが選択できるよう機能追加**するなどのアレンジ必要なります。
30
+
31
+

1

追記

2016/08/10 10:32

投稿

Panzer_vor
Panzer_vor

スコア1636

answer CHANGED
@@ -10,7 +10,8 @@
10
10
  もしかしたらDBMS側で最適化されるかもしれませんが、
11
11
  念のため検索条件の名前が省略された際は検索条件に加えないほうがいいでしょう。
12
12
 
13
+ さて本題ですが、パフォーマンス悪化の回避策ですが、
13
- 対策としては以下のような案があります。
14
+ 一般的には以下のような案があります。
14
15
  - 原則前方一致のみの検索に制限する(前方一致はインデックスが利用されます)
15
16
  - 前方一致と後方一致それぞれを設け、後方一致の場合は**関数インデックスを利用**する
16
17
  - 前後曖昧検索が譲れない場合は**LIMITなどで抽出件数を絞りページングを採用**とする