質問編集履歴

1

訂正

2020/07/01 04:31

投稿

yakan
yakan

スコア19

test CHANGED
File without changes
test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  ```
10
10
 
11
- CREATE TABLE fruits (
11
+ CREATE TABLE search_cache (
12
12
 
13
13
  ID INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
14
14
 
@@ -18,7 +18,7 @@
18
18
 
19
19
  color VARCHAR(10),
20
20
 
21
- updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
21
+ updated_at DATETIME(6) NOT NULL,
22
22
 
23
23
  PRIMARY KEY (ID),
24
24
 
@@ -26,11 +26,11 @@
26
26
 
27
27
  # インデックスをセット
28
28
 
29
- INDEX idx_fruits_01(service_id),
29
+ INDEX idx_search_cache_01(service_id),
30
30
 
31
- INDEX idx_fruits_02(q),
31
+ INDEX idx_search_cache_02(q),
32
32
 
33
- INDEX idx_fruits_03(color)
33
+ INDEX idx_search_cache_03(color)
34
34
 
35
35
  );
36
36
 
@@ -42,7 +42,7 @@
42
42
 
43
43
  SELECT *
44
44
 
45
- FROM fruits
45
+ FROM cache_datas
46
46
 
47
47
  WHERE service_id=1 AND q='りんご いちご' AND color='red'
48
48
 
@@ -52,29 +52,29 @@
52
52
 
53
53
  インデックスは
54
54
 
55
- `idx_fruits_01` (`service_id`が対象カラム)
55
+ `idx_search_cache_01` (`service_id`が対象カラム)
56
56
 
57
- `idx_fruits_02` (`q`が対象カラム )
57
+ `idx_search_cache_02` (`q`が対象カラム )
58
58
 
59
- `idx_fruits_03` (`color`が対象カラム)
59
+ `idx_search_cache_03` (`color`が対象カラム)
60
60
 
61
61
  という3つでセットしています。
62
62
 
63
63
 
64
64
 
65
- `WHERE`の最初に`service_id`を指定した場合、その時点でまず、検索対象データは`idx_fruits_01`となりますよね。
65
+ `WHERE`の最初に`service_id`を指定した場合、その時点でまず、検索対象データは`idx_search_cache_01`となりますよね。
66
66
 
67
67
 
68
68
 
69
- この`idx_fruits_01`に対しさらに`AND q='りんご いちご'`と指定していますが、`idx_fruits_01`のインデックスの中には`q`に対するインデックスはありませんから、`idx_fruits_01`の中では`q`の並び順は不明瞭ですよね。
69
+ この`idx_search_cache_01`に対しさらに`AND q='りんご いちご'`と指定していますが、`idx_search_cache_01`のインデックスの中には`q`に対するインデックスはありませんから、`idx_search_cache_01`の中では`q`の並び順は不明瞭ですよね。
70
70
 
71
71
 
72
72
 
73
- そうであれば、`q`に対してセットした`idx_fruits_02`は、上記`SELECT`のように
73
+ そうであれば、`q`に対してセットした`idx_search_cache_02`は、上記`SELECT`のように
74
74
 
75
75
 
76
76
 
77
- 一番目に`idx_fruits_01`を指定した`SELECT`
77
+ 一番目に`idx_search_cache_01`を指定した`SELECT`
78
78
 
79
79
  (つまり一番目に`WHERE service_id=1`と指定した`SELECT`)
80
80
 
@@ -94,7 +94,7 @@
94
94
 
95
95
  つまりインデックスは3つでなく次のように1つに複合して、
96
96
 
97
- `INDEX idx_fruits_01(service_id,q,color)`
97
+ `INDEX idx_search_cache_01(service_id,q,color)`
98
98
 
99
99
  こうすることではじめて、上記`SELECT`でもインデックスが効くという仕組みですか?
100
100
 
@@ -114,7 +114,7 @@
114
114
 
115
115
  SELECT *
116
116
 
117
- FROM fruits
117
+ FROM search_cache
118
118
 
119
119
  WHERE service_id=1 AND q='りんご いちご' AND color='red'
120
120
 
@@ -124,7 +124,7 @@
124
124
 
125
125
  SELECT *
126
126
 
127
- FROM fruits
127
+ FROM search_cache
128
128
 
129
129
  WHERE service_id=1 AND color='red'
130
130
 
@@ -132,6 +132,6 @@
132
132
 
133
133
  この場合は複合インデックスも次のように貼るということになるのでしょうか?
134
134
 
135
- 【A】のためのインデックス → `INDEX idx_fruits_01(service_id,q,color)`
135
+ 【A】のためのインデックス → `INDEX idx_search_cache_01(service_id,q,color)`
136
136
 
137
- 【B】のためのインデックス → `INDEX idx_fruits_02(service_id,color)`
137
+ 【B】のためのインデックス → `INDEX idx_search_cache_02(service_id,color)`