質問編集履歴

3

コード修正

2019/08/30 08:17

投稿

test_87097
test_87097

スコア45

test CHANGED
File without changes
test CHANGED
@@ -24,11 +24,15 @@
24
24
 
25
25
  普通に
26
26
 
27
+ ```SQL
28
+
27
29
  SELECT * FROM `serials` where serial_code=1111111111111;
30
+
31
+ ```
28
32
 
29
33
  で検索すると検索に時間がかかってしまいます。explainで確認したところ
30
34
 
31
- ```ここに言語を入力
35
+ ```
32
36
 
33
37
  +----+-------------+---------+-------+---------------+------------+---------+------+----------+--------------------------+
34
38
 
@@ -90,9 +94,15 @@
90
94
 
91
95
  ```
92
96
 
93
- このテーブルに`serials`テーブルにはデータを流し込み、`serial_registration_histories`には`serials`テーブルには存在して`serial_registration_histories`にはないシリアル情報を格納するデータが存在しているのですが、この複数のテーブルに対して
97
+ このテーブルに`serials`テーブルにはデータを流し込み、`serial_registration_histories`には`serials`テーブルには存在して
98
+
99
+ ```SELECT文
100
+
101
+ `serial_registration_histories`にはないシリアル情報を格納するデータが存在しているのですが、この複数のテーブルに対して
94
102
 
95
103
  SELECT `Serial`.`id`, `SerialRegistrationHistory`.`id` FROM `テーブル名`.`serials` AS `Serial` LEFT JOIN `テーブル名`.`serial_registration_histories` AS `SerialRegistrationHistory` ON (`Serial`.`id` = `SerialRegistrationHistory`.`serial_id`) WHERE `Serial`.`serial_code` = '719653552612' LIMIT 1
104
+
105
+ ```
96
106
 
97
107
  このSQLを投げています。このSQLが遅くならなければいいのですが、これをexplainをつけると
98
108
 

2

結果の修正

2019/08/30 08:17

投稿

test_87097
test_87097

スコア45

test CHANGED
File without changes
test CHANGED
@@ -28,15 +28,19 @@
28
28
 
29
29
  で検索すると検索に時間がかかってしまいます。explainで確認したところ
30
30
 
31
- +----+-------------+---------+-------+---------------+--------+---------+------+----------+--------------------------+
31
+ ```ここに言語を入力
32
32
 
33
- | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
33
+ +----+-------------+---------+-------+---------------+------------+---------+------+----------+--------------------------+
34
34
 
35
+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
36
+
35
- +----+-------------+---------+-------+---------------+--------+---------+------+----------+--------------------------+
37
+ +----+-------------+---------+-------+---------------+------------+---------+------+----------+--------------------------+
36
38
 
37
39
  | 1 | SIMPLE | serials | index | serial_code |serial_code | 36 | NULL | 40413015 | Using where; Using index |
38
40
 
39
- +----+-------------+---------+-------+---------------+--------+---------+------+----------+--------------------------+
41
+ +----+-------------+---------+-------+---------------+------------+---------+------+----------+--------------------------+
42
+
43
+ ```
40
44
 
41
45
  typeがindexとなりフルスキャンではないですがやはり遅くはなってしまいます。
42
46
 
@@ -92,17 +96,21 @@
92
96
 
93
97
  このSQLを投げています。このSQLが遅くならなければいいのですが、これをexplainをつけると
94
98
 
95
- +----+-------------+---------------------------+-------+---------------+-----------+---------+-------+------+----------------------+
99
+ ```ここに言語を入力
96
100
 
97
- | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
101
+ +----+-------------+---------------------------+-------+---------------+------------+---------+-------+------+----------------------+
98
102
 
103
+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
104
+
99
- +----+-------------+---------------------------+-------+---------------+-----------+---------+-------+------+----------------------+
105
+ +----+-------------+---------------------------+-------+---------------+------------+---------+-------+------+----------------------+
100
106
 
101
107
  | 1 | SIMPLE | Serial | const | serial_code | serial_code| 36 | const | 1 | Using index |
102
108
 
103
- | 1 | SIMPLE | SerialRegistrationHistory | const | serial_id | serial_id | 4 | const | 0 | unique row not found |
109
+ | 1 | SIMPLE | SerialRegistrationHistory | const | serial_id | serial_id | 4 | const | 0 | unique row not found |
104
110
 
105
- +----+-------------+---------------------------+-------+---------------+-----------+---------+-------+------+----------------------+
111
+ +----+-------------+---------------------------+-------+---------------+------------+---------+-------+------+----------------------+
112
+
113
+ ```
106
114
 
107
115
  このような結果になってtypeがconstになっているのでそこまで遅くならないとは思うのですが正直なんで単純なsqlはindexでこれがconstになっているのか不明です。
108
116
 

1

命名の修正。解決済みの記載

2019/08/30 08:01

投稿

test_87097
test_87097

スコア45

test CHANGED
File without changes
test CHANGED
@@ -10,11 +10,11 @@
10
10
 
11
11
  `id` int(11) NOT NULL auto_increment,
12
12
 
13
- `number` char(12) BINARY NOT NULL,
13
+ `serial_code` char(12) BINARY NOT NULL,
14
14
 
15
15
  PRIMARY KEY (`id`),
16
16
 
17
- UNIQUE KEY `number` (`number`)
17
+ UNIQUE KEY `serial_code` (`serial_code`)
18
18
 
19
19
  ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
20
20
 
@@ -24,7 +24,7 @@
24
24
 
25
25
  普通に
26
26
 
27
- SELECT * FROM `serials` where number=1111111111111;
27
+ SELECT * FROM `serials` where serial_code=1111111111111;
28
28
 
29
29
  で検索すると検索に時間がかかってしまいます。explainで確認したところ
30
30
 
@@ -34,7 +34,7 @@
34
34
 
35
35
  +----+-------------+---------+-------+---------------+--------+---------+------+----------+--------------------------+
36
36
 
37
- | 1 | SIMPLE | serials | index | number | number | 36 | NULL | 40413015 | Using where; Using index |
37
+ | 1 | SIMPLE | serials | index | serial_code |serial_code | 36 | NULL | 40413015 | Using where; Using index |
38
38
 
39
39
  +----+-------------+---------+-------+---------------+--------+---------+------+----------+--------------------------+
40
40
 
@@ -58,11 +58,11 @@
58
58
 
59
59
  `id` int(11) NOT NULL auto_increment,
60
60
 
61
- `number` char(12) BINARY NOT NULL,
61
+ `serial_code` char(12) BINARY NOT NULL,
62
62
 
63
63
  PRIMARY KEY (`id`),
64
64
 
65
- UNIQUE KEY `number` (`number`)
65
+ UNIQUE KEY `serial_code` (`serial_code`)
66
66
 
67
67
  ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
68
68
 
@@ -88,7 +88,7 @@
88
88
 
89
89
  このテーブルに`serials`テーブルにはデータを流し込み、`serial_registration_histories`には`serials`テーブルには存在して`serial_registration_histories`にはないシリアル情報を格納するデータが存在しているのですが、この複数のテーブルに対して
90
90
 
91
- SELECT `Serial`.`id`, `SerialRegistrationHistory`.`id` FROM `テーブル名`.`serials` AS `Serial` LEFT JOIN `テーブル名`.`serial_registration_histories` AS `SerialRegistrationHistory` ON (`Serial`.`id` = `SerialRegistrationHistory`.`serial_id`) WHERE `Serial`.`number` = '719653552612' LIMIT 1
91
+ SELECT `Serial`.`id`, `SerialRegistrationHistory`.`id` FROM `テーブル名`.`serials` AS `Serial` LEFT JOIN `テーブル名`.`serial_registration_histories` AS `SerialRegistrationHistory` ON (`Serial`.`id` = `SerialRegistrationHistory`.`serial_id`) WHERE `Serial`.`serial_code` = '719653552612' LIMIT 1
92
92
 
93
93
  このSQLを投げています。このSQLが遅くならなければいいのですが、これをexplainをつけると
94
94
 
@@ -98,7 +98,7 @@
98
98
 
99
99
  +----+-------------+---------------------------+-------+---------------+-----------+---------+-------+------+----------------------+
100
100
 
101
- | 1 | SIMPLE | Serial | const | number | number | 36 | const | 1 | Using index |
101
+ | 1 | SIMPLE | Serial | const | serial_code | serial_code| 36 | const | 1 | Using index |
102
102
 
103
103
  | 1 | SIMPLE | SerialRegistrationHistory | const | serial_id | serial_id | 4 | const | 0 | unique row not found |
104
104
 
@@ -109,3 +109,13 @@
109
109
 
110
110
 
111
111
  質問が多くなって申し訳ありませんが、よろしくお願いします
112
+
113
+
114
+
115
+
116
+
117
+ ※修正点
118
+
119
+ 命名が良くないと指摘を受けたので修正しました。(number→serial_code)
120
+
121
+ 頂いた回答から上半分の単純なSELECT文の検索が遅いと言う点は型変換を行って検索を行っているので遅いというのがわかりましたので解決済みです。