質問編集履歴
5
間違いの訂正
title
CHANGED
File without changes
|
body
CHANGED
@@ -44,7 +44,7 @@
|
|
44
44
|
クエリは、**「趣味別で飼っているペットの名前の種類数を表示」**です。
|
45
45
|
|
46
46
|
```SQL
|
47
|
-
SELECT syumi_id,syumi_name,COUNT(DISTINCT(
|
47
|
+
SELECT syumi_id,syumi_name,COUNT(DISTINCT(pet_name)) AS cnt
|
48
48
|
FROM t_petlist
|
49
49
|
INNER JOIN t_setting ON t_petlist.user_id = t_setting.user_id
|
50
50
|
INNER JOIN t_syumi ON t_syumi.syumi_id = t_setting.syumi_id
|
4
誤字
title
CHANGED
File without changes
|
body
CHANGED
@@ -66,7 +66,7 @@
|
|
66
66
|
|
67
67
|
|
68
68
|
重くしている部分は、COUNT(DISTINCT(pet_id))で、DISTINCTを外すと0.5秒もかからないほど早くなります。
|
69
|
-
ただ、今回カウントしたいのは、「その趣味の人が飼っているペット名付けた名前の種類数」なので、
|
69
|
+
ただ、今回カウントしたいのは、「その趣味の人が飼っているペットに名付けた名前の種類数」なので、
|
70
70
|
スポーツが趣味の人で、その中の5人がペットに「ポチ」と名付けた場合は、その重複は除かなくてはいけません。
|
71
71
|
|
72
72
|
いろいろインデックスをつけたり外したり試してみましたが、どれも大体3秒ほどかかってしまいます。
|
3
誤字の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -59,6 +59,7 @@
|
|
59
59
|
4,音楽,4398
|
60
60
|
...といった結果が出力されます。
|
61
61
|
このクエリが約3秒ほどかかってしまいます。
|
62
|
+
目標は1秒を切りたいと考えています。
|
62
63
|
|
63
64
|
**EXPLAIN実行結果**
|
64
65
|

|
2
EXPLAIN結果追加、インデックスすべて表示
title
CHANGED
File without changes
|
body
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
MySQLバージョン:5.6.22
|
8
8
|
|
9
9
|
**t_syumi[InnoDB] 趣味テーブル**
|
10
|
-
syumi_id(autoincrement),syumi_name データ数約2000件
|
10
|
+
syumi_id(autoincrement),syumi_name データ数約2000件 ※syumi_idがプライマリキー
|
11
11
|
1,スポーツ
|
12
12
|
2,読書
|
13
13
|
3,映画鑑賞
|
@@ -15,7 +15,7 @@
|
|
15
15
|
…………等
|
16
16
|
|
17
17
|
**t_user[InnoDB] ユーザーテーブル** データ数約6000件
|
18
|
-
user_id(autoincrement),user_name
|
18
|
+
user_id(autoincrement),user_name ※user_idがプライマリキー
|
19
19
|
1,田中一郎
|
20
20
|
2,山口明子
|
21
21
|
3,佐藤俊哉
|
@@ -24,7 +24,7 @@
|
|
24
24
|
|
25
25
|
**t_setting[InnoDB] 趣味設定テーブル ** データ数約6000件
|
26
26
|
※一人で複数の趣味を持っている場合もあります
|
27
|
-
set_id(autoincrement),user_id,syumi_id **※user_id,syumi_idに複合ユニークキー制約があります**
|
27
|
+
set_id(autoincrement),user_id,syumi_id **※set_idがプライマリキー,user_id,syumi_idに複合ユニークキー制約があります**
|
28
28
|
1,1,4
|
29
29
|
2,1,2
|
30
30
|
3,2,1
|
@@ -33,7 +33,7 @@
|
|
33
33
|
|
34
34
|
**t_petlist[InnoDB] ユーザーの飼っているペットの名前テーブル** データ数約150000件
|
35
35
|
※一人で複数のペットを飼っている場合もあるため、一人で複数登録されている場合もあります
|
36
|
-
pet_id(autoincrement),user_id,pet_name **※user_id,pet_nameに複合ユニークキー制約があります**
|
36
|
+
pet_id(autoincrement),user_id,pet_name **※pet_idがプライマリキー,user_id,pet_nameに複合ユニークキー制約があります**
|
37
37
|
1,1,ポチ
|
38
38
|
2,1,ハチ
|
39
39
|
3,2,まろ
|
@@ -60,6 +60,10 @@
|
|
60
60
|
...といった結果が出力されます。
|
61
61
|
このクエリが約3秒ほどかかってしまいます。
|
62
62
|
|
63
|
+
**EXPLAIN実行結果**
|
64
|
+

|
65
|
+
|
66
|
+
|
63
67
|
重くしている部分は、COUNT(DISTINCT(pet_id))で、DISTINCTを外すと0.5秒もかからないほど早くなります。
|
64
68
|
ただ、今回カウントしたいのは、「その趣味の人が飼っているペット名付けた名前の種類数」なので、
|
65
69
|
スポーツが趣味の人で、その中の5人がペットに「ポチ」と名付けた場合は、その重複は除かなくてはいけません。
|
1
タイトルの変更
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
【MySQL】約15万件のテーブルになってからクエリが遅くなりました。アドバイスお願いしたいです。
|
1
|
+
【MySQL】約15万件のテーブルになってからクエリが遅くなりました。テーブル設計とクエリを公開しますのでアドバイスお願いしたいです。
|
body
CHANGED
File without changes
|