回答編集履歴
7
追記
answer
CHANGED
@@ -33,5 +33,11 @@
|
|
33
33
|
※既存ので間にあう気もしますが。
|
34
34
|
追記
|
35
35
|
--
|
36
|
+
```SQL
|
37
|
+
select asin from asin
|
38
|
+
where MonorateBuyNum >= 15
|
39
|
+
and SettingProductItem=1
|
40
|
+
and (FlagSer&20)=0
|
41
|
+
```
|
36
|
-
[FlagSer&20]について、式インデックスを追加
|
42
|
+
結局のところ、上記のクエリーが早くなれば解決すると思いますので、[FlagSer&20]について、式インデックスを追加されてはどうでしょうか。
|
37
43
|
[MySQL 5.7で生成カラムを使って関数INDEXを作成する](https://qiita.com/hmatsu47/items/128ece7276e4deac1477)
|
6
追記
answer
CHANGED
@@ -30,4 +30,8 @@
|
|
30
30
|
上記の場合のインデックスは、
|
31
31
|
asin:(MonorateBuyNum, SettingProductItem, FlagSer, asin)
|
32
32
|
analyzetime:(asin, SiteName, Tick)
|
33
|
-
※既存ので間にあう気もしますが。
|
33
|
+
※既存ので間にあう気もしますが。
|
34
|
+
追記
|
35
|
+
--
|
36
|
+
[FlagSer&20]について、式インデックスを追加すればインデックスによる検索が行われると思いますので、追加されてはどうでしょうか。
|
37
|
+
[MySQL 5.7で生成カラムを使って関数INDEXを作成する](https://qiita.com/hmatsu47/items/128ece7276e4deac1477)
|
5
追記
answer
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
+
そもそもですが、[FlagSer&20]についてのインデックスが無いので、検索でインデックスのみにはならないと思います。
|
1
|
-
|
2
|
+
ただ、インデックスだけで解決できるように、先ずは以下の複合インデックスを追加してみてはどうでしょうか。
|
2
3
|
※データ分布などが良く分かりませんので効率的なものとは言えませんが。
|
3
4
|
asin:(asin, MonorateBuyNum, SettingProductItem, FlagSer)
|
4
5
|
analyzetime:(asin, Tick, SiteName)
|
4
推敲
answer
CHANGED
@@ -28,4 +28,5 @@
|
|
28
28
|
```
|
29
29
|
上記の場合のインデックスは、
|
30
30
|
asin:(MonorateBuyNum, SettingProductItem, FlagSer, asin)
|
31
|
-
analyzetime:(asin, SiteName, Tick)
|
31
|
+
analyzetime:(asin, SiteName, Tick)
|
32
|
+
※既存ので間にあう気もしますが。
|
3
推敲
answer
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
and asin.SettingProductItem=1
|
14
14
|
and (asin.FlagSer&20)=0
|
15
15
|
```
|
16
|
-
後は主キーinを使用するとか
|
16
|
+
後は主キーを条件にしたinを使用するとか
|
17
17
|
```SQL
|
18
18
|
select asin
|
19
19
|
from analyzetime
|
2
追記
answer
CHANGED
@@ -12,4 +12,20 @@
|
|
12
12
|
and asin.MonorateBuyNum >= 15
|
13
13
|
and asin.SettingProductItem=1
|
14
14
|
and (asin.FlagSer&20)=0
|
15
|
-
```
|
15
|
+
```
|
16
|
+
後は主キーinを使用するとか
|
17
|
+
```SQL
|
18
|
+
select asin
|
19
|
+
from analyzetime
|
20
|
+
where Tick < 637433317810371056
|
21
|
+
and SiteName='サウンドハウス'
|
22
|
+
and asian in (
|
23
|
+
select asin from asin
|
24
|
+
where MonorateBuyNum >= 15
|
25
|
+
and SettingProductItem=1
|
26
|
+
and (FlagSer&20)=0
|
27
|
+
)
|
28
|
+
```
|
29
|
+
上記の場合のインデックスは、
|
30
|
+
asin:(MonorateBuyNum, SettingProductItem, FlagSer, asin)
|
31
|
+
analyzetime:(asin, SiteName, Tick)
|
1
訂正
answer
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
少なくともインデックスだけで解決できるように、先ずは以下の複合インデックスを追加してみてはどうでしょうか。
|
2
2
|
※データ分布などが良く分かりませんので効率的なものとは言えませんが。
|
3
|
-
|
3
|
+
asin:(asin, MonorateBuyNum, SettingProductItem, FlagSer)
|
4
|
-
analyzetime:(
|
4
|
+
analyzetime:(asin, Tick, SiteName)
|
5
5
|
|
6
6
|
それから目的がキーを求めるという事であれば、サブクエリーでのorder byは不要だと思います。
|
7
7
|
```SQL
|
8
|
-
select analyzetime.
|
8
|
+
select analyzetime.asin
|
9
9
|
from analyzetime inner join asin using(asin)
|
10
10
|
where analyzetime.Tick < 637433317810371056
|
11
11
|
and analyzetime.SiteName='サウンドハウス'
|