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

回答編集履歴

7

追記

2020/12/12 03:45

投稿

sazi
sazi

スコア25430

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

追記

2020/12/12 03:45

投稿

sazi
sazi

スコア25430

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

追記

2020/12/12 03:35

投稿

sazi
sazi

スコア25430

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

推敲

2020/12/12 03:32

投稿

sazi
sazi

スコア25430

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

推敲

2020/12/12 03:23

投稿

sazi
sazi

スコア25430

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

追記

2020/12/12 03:22

投稿

sazi
sazi

スコア25430

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

訂正

2020/12/12 03:21

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -1,11 +1,11 @@
1
1
  少なくともインデックスだけで解決できるように、先ずは以下の複合インデックスを追加してみてはどうでしょうか。
2
2
  ※データ分布などが良く分かりませんので効率的なものとは言えませんが。
3
- asian:(asian, MonorateBuyNum, SettingProductItem, FlagSer)
3
+ asin:(asin, MonorateBuyNum, SettingProductItem, FlagSer)
4
- analyzetime:(asian, Tick, SiteName)
4
+ analyzetime:(asin, Tick, SiteName)
5
5
 
6
6
  それから目的がキーを求めるという事であれば、サブクエリーでのorder byは不要だと思います。
7
7
  ```SQL
8
- select analyzetime.asian
8
+ select analyzetime.asin
9
9
  from analyzetime inner join asin using(asin)
10
10
  where analyzetime.Tick < 637433317810371056
11
11
  and analyzetime.SiteName='サウンドハウス'