質問編集履歴

8

解決したため

2016/09/15 02:56

投稿

shin_tera
shin_tera

スコア27

test CHANGED
File without changes
test CHANGED
@@ -255,3 +255,23 @@
255
255
 
256
256
 
257
257
  MySQL5.6.22のバグなんじゃないかと思い始めてます。。
258
+
259
+
260
+
261
+ ###追記6
262
+
263
+ AkiraPenguin 様の回答により、解決いたしました!
264
+
265
+ ありがとうございます!!!!!
266
+
267
+
268
+
269
+ なお、追記5の問題も、ちょうど50文字目が「_」となっておりました。
270
+
271
+ 「_」を含むURLは300万件存在するため、「_」の後に存在しないURLを置いていても、
272
+
273
+ それはINDEXが効きません。。。当然ですね。。。
274
+
275
+
276
+
277
+ たくさんの閲覧・回答ありがとうございました!

7

追記

2016/09/15 02:56

投稿

shin_tera
shin_tera

スコア27

test CHANGED
File without changes
test CHANGED
@@ -241,3 +241,17 @@
241
241
  (MyISAMであれば、300万の登録に7分で終わります)
242
242
 
243
243
  InnoDBは統計情報がきれいなはずなので、InnoDBであれば、確かに効く気はしています。
244
+
245
+
246
+
247
+ ###追記5
248
+
249
+ INDEXが効いたSQLと効かないSQLがありましたので、情報共有いたします。
250
+
251
+ ”存在しないURL”を指定すると、基本的に、INDEXが効きいて、1秒以内のレスポンスになりました。
252
+
253
+ ただし、"存在しないURL"が50文字以上となると、INDEXが効かず、300秒くらいのレスポンスになってしまいました。。
254
+
255
+
256
+
257
+ MySQL5.6.22のバグなんじゃないかと思い始めてます。。

6

追記

2016/09/09 19:45

投稿

shin_tera
shin_tera

スコア27

test CHANGED
File without changes
test CHANGED
@@ -222,8 +222,22 @@
222
222
 
223
223
 
224
224
 
225
-
226
-
227
225
  INDEXさえ効けば、検索結果が1件の場合、即終わるハズなのですが、
228
226
 
229
227
  実行計画の時点で効かない原因を知りたいです。。
228
+
229
+
230
+
231
+ ###追記4
232
+
233
+ InnoDBについて
234
+
235
+
236
+
237
+ InnoDB化した場合、300万の登録に60分経っても終わらなかったため、INDEXが効くかどうかは分かりません。
238
+
239
+ 別の仕様(毎秒100件の削除・登録)が不可であるため、InnoDB化はできません。
240
+
241
+ (MyISAMであれば、300万の登録に7分で終わります)
242
+
243
+ InnoDBは統計情報がきれいなはずなので、InnoDBであれば、確かに効く気はしています。

5

微修正

2016/09/07 15:10

投稿

shin_tera
shin_tera

スコア27

test CHANGED
File without changes
test CHANGED
@@ -218,4 +218,12 @@
218
218
 
219
219
 
220
220
 
221
- なお、上記2つの時に、URLのINDEXには届かないため、効かないです。
221
+ なお、上記2つのINDEXでは、URLのINDEXには届かないため、1件抽出する場合、即レスポンスにらないです。
222
+
223
+
224
+
225
+
226
+
227
+ INDEXさえ効けば、検索結果が1件の場合、即終わるハズなのですが、
228
+
229
+ 実行計画の時点で効かない原因を知りたいです。。

4

追記3

2016/09/06 09:30

投稿

shin_tera
shin_tera

スコア27

test CHANGED
File without changes
test CHANGED
@@ -193,3 +193,29 @@
193
193
  検索用URL(100文字等)を作ってINDEXを貼って検索するのは、個人的には良いのですが、
194
194
 
195
195
  仕様決定者的にはNGでした。。
196
+
197
+
198
+
199
+ ###追記3
200
+
201
+ index(col7,col1,url(200))の追加案については、
202
+
203
+ col7での絞込件数≒実際の絞込件数(urlによる絞り込みがほとんどない)
204
+
205
+ であれば、Limitが効くため、性能は良いですが、
206
+
207
+ 検索結果が「1件」の場合、Limitの効果がないため、性能遅延が発生してしまいます。
208
+
209
+
210
+
211
+ index(col1,col7,url(200))の追加案については、
212
+
213
+ 全体の件数≒col7での絞込件数≒実際の絞込件数(col7,urlによる絞り込みがほとんどない)
214
+
215
+ であれば、Limitが効くため、性能は良いですが、
216
+
217
+ 検索結果が「1件」の場合、Limitの効果がないため、性能遅延が発生してしまいます。
218
+
219
+
220
+
221
+ なお、上記2つの時に、URLのINDEXには届かないため、効かないです。

3

仕様条件の追加

2016/09/06 09:08

投稿

shin_tera
shin_tera

スコア27

test CHANGED
File without changes
test CHANGED
@@ -185,3 +185,11 @@
185
185
  にて、断片化は確認をしていて、0.6%程度の断片化率です。
186
186
 
187
187
  (該当テーブルのURL以外の指定における性能劣化は見られていません。)
188
+
189
+
190
+
191
+ ###追記2
192
+
193
+ 検索用URL(100文字等)を作ってINDEXを貼って検索するのは、個人的には良いのですが、
194
+
195
+ 仕様決定者的にはNGでした。。

2

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

2016/09/06 05:17

投稿

shin_tera
shin_tera

スコア27

test CHANGED
File without changes
test CHANGED
@@ -159,3 +159,29 @@
159
159
  実行計画や速度が遅く感じると判断した際の動作環境は
160
160
 
161
161
  phpMyAdmin上での実行結果になります。
162
+
163
+
164
+
165
+
166
+
167
+ ###追記
168
+
169
+ check table tb_test_data;
170
+
171
+ を実行した場合、2時間経っても終わらないため、実施していません。
172
+
173
+
174
+
175
+ check table tb_test_data fast quick;
176
+
177
+ にて、テーブルの状態を確認していますが、
178
+
179
+ statusは「Table is already up to date」の状態で、問題ない認識です。
180
+
181
+
182
+
183
+ show table status like 'tb_test_data%';
184
+
185
+ にて、断片化は確認をしていて、0.6%程度の断片化率です。
186
+
187
+ (該当テーブルのURL以外の指定における性能劣化は見られていません。)

1

微修正

2016/09/06 04:30

投稿

shin_tera
shin_tera

スコア27

test CHANGED
File without changes
test CHANGED
@@ -98,7 +98,7 @@
98
98
 
99
99
  id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
100
100
 
101
- 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
101
+ 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
102
102
 
103
103
  ```
104
104