回答編集履歴

1

修正

2016/09/18 10:46

投稿

hirohiro
hirohiro

スコア2068

test CHANGED
@@ -1,12 +1,8 @@
1
- EXPLAINすればボトルネックが判明しそうですが、これくらいならsqlを分けて検証してみても良いと思います。
2
-
3
-
4
-
5
1
  **updateが遅いとしたら**
6
2
 
7
- 単純に件数が膨大過ぎる場合でしょう「update master set flag=1 where id」ですからね。更新行が多すぎて遅いのなら改善は難しいです
3
+ masterのレコード数が膨大でidにindexが無いためか、単純に件数が膨大過ぎる場合でしょう「update master set flag=1 where ....」ですからね。基本的にwhere句以前には改善点がありません
8
4
 
9
- でもこれは全行更新でもしていのでない限り考えにくい事、つまりは遅い原因は他にあると考えられます。
5
+ 物理的に更新行が多すぎるなら改善は難しいです。PCスペックを上げるとか?
10
6
 
11
7
 
12
8
 
@@ -30,7 +26,7 @@
30
26
 
31
27
  ```
32
28
 
33
- これが早いなら、in句が遅いか、masterのレコード数が膨大な上indexが適当でないかのどちらかが原因かと思います。EXISTSに変更してみるか、masterのidにindex(プライマリキーにしているなら不要)を作成してみると良いかも知れません。
29
+ これが早いなら、in句が遅いか、冒頭で書いたようにmasterのレコード数が膨大な上indexが適当でないかのどちらかが原因かと思います。EXISTSに変更してみるか、masterのidにindex(プライマリキーにしているなら不要)を作成してみると良いかも知れません。
34
30
 
35
31
 
36
32
 
@@ -43,5 +39,3 @@
43
39
  in句やdistinctはmysql5.1 以前だとやたら遅くなるケースがあったように思います。ただ特定のケースでindexが使えて無いことに起因してたように思うので、そもそもindexを作成していないなら関係無いと思いますし、5.4以降だとそんなことも無い気がします...
44
40
 
45
41
 
46
-
47
- 後は可能性は低いですが、動作させているマシンがいっぱいいっぱいでスワップを繰り返してる可能性も一応。