質問編集履歴
3
コード修正
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`テーブルには存在して
|
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
結果の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -28,15 +28,19 @@
|
|
28
28
|
|
29
29
|
で検索すると検索に時間がかかってしまいます。explainで確認したところ
|
30
30
|
|
31
|
-
|
31
|
+
```ここに言語を入力
|
32
32
|
|
33
|
-
|
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
|
-
|
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
命名の修正。解決済みの記載
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
|
-
`
|
13
|
+
`serial_code` char(12) BINARY NOT NULL,
|
14
14
|
|
15
15
|
PRIMARY KEY (`id`),
|
16
16
|
|
17
|
-
UNIQUE KEY `
|
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
|
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 |
|
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
|
-
`
|
61
|
+
`serial_code` char(12) BINARY NOT NULL,
|
62
62
|
|
63
63
|
PRIMARY KEY (`id`),
|
64
64
|
|
65
|
-
UNIQUE KEY `
|
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`.`
|
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 |
|
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文の検索が遅いと言う点は型変換を行って検索を行っているので遅いというのがわかりましたので解決済みです。
|