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

質問編集履歴

8

解決したため

2016/09/15 02:56

投稿

shin_tera
shin_tera

スコア27

title CHANGED
File without changes
body CHANGED
@@ -126,4 +126,14 @@
126
126
  ”存在しないURL”を指定すると、基本的に、INDEXが効きいて、1秒以内のレスポンスになりました。
127
127
  ただし、"存在しないURL"が50文字以上となると、INDEXが効かず、300秒くらいのレスポンスになってしまいました。。
128
128
 
129
- MySQL5.6.22のバグなんじゃないかと思い始めてます。。
129
+ MySQL5.6.22のバグなんじゃないかと思い始めてます。。
130
+
131
+ ###追記6
132
+ AkiraPenguin 様の回答により、解決いたしました!
133
+ ありがとうございます!!!!!
134
+
135
+ なお、追記5の問題も、ちょうど50文字目が「_」となっておりました。
136
+ 「_」を含むURLは300万件存在するため、「_」の後に存在しないURLを置いていても、
137
+ それはINDEXが効きません。。。当然ですね。。。
138
+
139
+ たくさんの閲覧・回答ありがとうございました!

7

追記

2016/09/15 02:56

投稿

shin_tera
shin_tera

スコア27

title CHANGED
File without changes
body CHANGED
@@ -119,4 +119,11 @@
119
119
  InnoDB化した場合、300万の登録に60分経っても終わらなかったため、INDEXが効くかどうかは分かりません。
120
120
  別の仕様(毎秒100件の削除・登録)が不可であるため、InnoDB化はできません。
121
121
  (MyISAMであれば、300万の登録に7分で終わります)
122
- InnoDBは統計情報がきれいなはずなので、InnoDBであれば、確かに効く気はしています。
122
+ InnoDBは統計情報がきれいなはずなので、InnoDBであれば、確かに効く気はしています。
123
+
124
+ ###追記5
125
+ INDEXが効いたSQLと効かないSQLがありましたので、情報共有いたします。
126
+ ”存在しないURL”を指定すると、基本的に、INDEXが効きいて、1秒以内のレスポンスになりました。
127
+ ただし、"存在しないURL"が50文字以上となると、INDEXが効かず、300秒くらいのレスポンスになってしまいました。。
128
+
129
+ MySQL5.6.22のバグなんじゃないかと思い始めてます。。

6

追記

2016/09/09 19:45

投稿

shin_tera
shin_tera

スコア27

title CHANGED
File without changes
body CHANGED
@@ -110,6 +110,13 @@
110
110
 
111
111
  なお、上記2つのINDEXでは、URLのINDEXには届かないため、1件抽出する場合、即レスポンスにならないです。
112
112
 
113
+ INDEXさえ効けば、検索結果が1件の場合、即終わるハズなのですが、
114
+ 実行計画の時点で効かない原因を知りたいです。。
113
115
 
116
+ ###追記4
117
+ InnoDBについて
118
+
119
+ InnoDB化した場合、300万の登録に60分経っても終わらなかったため、INDEXが効くかどうかは分かりません。
120
+ 別の仕様(毎秒100件の削除・登録)が不可であるため、InnoDB化はできません。
114
- INDEXさえ効けば、検索結果が1件場合、即終わるハズなのでが、
121
+ (MyISAMであれば、300万登録に7分で終わりま
115
- 実行時点原因を知りたいです。
122
+ InnoDBは統情報がきれいなはずなので、InnoDBであれば、確に効く気はしてす。

5

微修正

2016/09/07 15:10

投稿

shin_tera
shin_tera

スコア27

title CHANGED
File without changes
body CHANGED
@@ -108,4 +108,8 @@
108
108
  であれば、Limitが効くため、性能は良いですが、
109
109
  検索結果が「1件」の場合、Limitの効果がないため、性能遅延が発生してしまいます。
110
110
 
111
- なお、上記2つの時に、URLのINDEXには届かないため、効かないです。
111
+ なお、上記2つのINDEXでは、URLのINDEXには届かないため、1件抽出する場合、即レスポンスにらないです。
112
+
113
+
114
+ INDEXさえ効けば、検索結果が1件の場合、即終わるハズなのですが、
115
+ 実行計画の時点で効かない原因を知りたいです。。

4

追記3

2016/09/06 09:30

投稿

shin_tera
shin_tera

スコア27

title CHANGED
File without changes
body CHANGED
@@ -95,4 +95,17 @@
95
95
 
96
96
  ###追記2
97
97
  検索用URL(100文字等)を作ってINDEXを貼って検索するのは、個人的には良いのですが、
98
- 仕様決定者的にはNGでした。。
98
+ 仕様決定者的にはNGでした。。
99
+
100
+ ###追記3
101
+ index(col7,col1,url(200))の追加案については、
102
+ col7での絞込件数≒実際の絞込件数(urlによる絞り込みがほとんどない)
103
+ であれば、Limitが効くため、性能は良いですが、
104
+ 検索結果が「1件」の場合、Limitの効果がないため、性能遅延が発生してしまいます。
105
+
106
+ index(col1,col7,url(200))の追加案については、
107
+ 全体の件数≒col7での絞込件数≒実際の絞込件数(col7,urlによる絞り込みがほとんどない)
108
+ であれば、Limitが効くため、性能は良いですが、
109
+ 検索結果が「1件」の場合、Limitの効果がないため、性能遅延が発生してしまいます。
110
+
111
+ なお、上記2つの時に、URLのINDEXには届かないため、効かないです。

3

仕様条件の追加

2016/09/06 09:08

投稿

shin_tera
shin_tera

スコア27

title CHANGED
File without changes
body CHANGED
@@ -91,4 +91,8 @@
91
91
 
92
92
  show table status like 'tb_test_data%';
93
93
  にて、断片化は確認をしていて、0.6%程度の断片化率です。
94
- (該当テーブルのURL以外の指定における性能劣化は見られていません。)
94
+ (該当テーブルのURL以外の指定における性能劣化は見られていません。)
95
+
96
+ ###追記2
97
+ 検索用URL(100文字等)を作ってINDEXを貼って検索するのは、個人的には良いのですが、
98
+ 仕様決定者的にはNGでした。。

2

断片化とCHECK TABLEについて、追記済。

2016/09/06 05:17

投稿

shin_tera
shin_tera

スコア27

title CHANGED
File without changes
body CHANGED
@@ -78,4 +78,17 @@
78
78
  phpMyAdminのバージョンは4.5.1(ちょっと古い)
79
79
 
80
80
  実行計画や速度が遅く感じると判断した際の動作環境は
81
- phpMyAdmin上での実行結果になります。
81
+ phpMyAdmin上での実行結果になります。
82
+
83
+
84
+ ###追記
85
+ check table tb_test_data;
86
+ を実行した場合、2時間経っても終わらないため、実施していません。
87
+
88
+ check table tb_test_data fast quick;
89
+ にて、テーブルの状態を確認していますが、
90
+ statusは「Table is already up to date」の状態で、問題ない認識です。
91
+
92
+ show table status like 'tb_test_data%';
93
+ にて、断片化は確認をしていて、0.6%程度の断片化率です。
94
+ (該当テーブルのURL以外の指定における性能劣化は見られていません。)

1

微修正

2016/09/06 04:30

投稿

shin_tera
shin_tera

スコア27

title CHANGED
File without changes
body CHANGED
@@ -48,7 +48,7 @@
48
48
  5:実行計画
49
49
  ```SQL
50
50
  id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
51
- 1 | SIMPLE | T1 | range | IX_col7_col1,IX_col7_col2,IX_col7_col3,IX_col7_col5_col1,IX_col7_col6,IX_col7_col1_col5,IX_col7_date,IX_url | IX_col7_col5_col1 | 8 | NULL | 1157468 | Using index condition; Using where
51
+ 1 | SIMPLE | T1 | range | IX_col1,IX_col2,IX_col3,IX_col5_col1,IX_col6,IX_col1_col5,IX_date,IX_url | IX_col1_col5 | 8 | NULL | 1157468 | Using index condition; Using where
52
52
  ```
53
53
  ※上記の実行計画は「http://abc.jp/xxx/xxxx/xxx%」の部分を68文字のURLを指定し、このURLだけで1件の表示になる値で実行計画を出しています。そのため、理想の実行計画としては、
54
54
  refに「IX_url」が表示され、rows項目も1となる事を想定していました。