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

質問編集履歴

5

間違いの訂正

2016/04/14 07:36

投稿

sanset
sanset

スコア186

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(pet_id)) AS cnt
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

誤字

2016/04/14 07:36

投稿

sanset
sanset

スコア186

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

誤字の修正

2016/04/14 06:58

投稿

sanset
sanset

スコア186

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
  ![イメージ説明](276c873480929a313895f7654fec115b.jpeg)

2

EXPLAIN結果追加、インデックスすべて表示

2016/04/14 05:58

投稿

sanset
sanset

スコア186

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
+ ![イメージ説明](276c873480929a313895f7654fec115b.jpeg)
65
+
66
+
63
67
  重くしている部分は、COUNT(DISTINCT(pet_id))で、DISTINCTを外すと0.5秒もかからないほど早くなります。
64
68
  ただ、今回カウントしたいのは、「その趣味の人が飼っているペット名付けた名前の種類数」なので、
65
69
  スポーツが趣味の人で、その中の5人がペットに「ポチ」と名付けた場合は、その重複は除かなくてはいけません。

1

タイトルの変更

2016/04/14 03:59

投稿

sanset
sanset

スコア186

title CHANGED
@@ -1,1 +1,1 @@
1
- 【MySQL】約15万件のテーブルになってからクエリが遅くなりました。アドバイスお願いしたいです。
1
+ 【MySQL】約15万件のテーブルになってからクエリが遅くなりました。テーブル設計とクエリを公開しますのでアドバイスお願いしたいです。
body CHANGED
File without changes