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

回答編集履歴

2

追記

2021/12/26 13:00

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -5,4 +5,19 @@
5
5
 
6
6
  SQLでパラメータを含む条件式としては、公式のパラメータを指定しない場合は`Null`として、
7
7
  `is_offisial=coalesce(パラメータ, is_offisial)`
8
- のようにすれば良いかと思います。
8
+ のようにすれば良いかと思います。
9
+
10
+ ### 追記
11
+ インデックスを適用するにあたっては以下のポイントがあります。
12
+ A.使用されるインデックスにする事
13
+ B.効率の良いインデックスにする事
14
+ C.共用されるインデックスにする事(※無駄なインデックスを作らない事)
15
+ ※検索性能の観点からは、優先順位はA>B>Cです。更新やリソースの観点からはCが優先です。
16
+
17
+ 現状のままであれば、AまたはBに該当しません。
18
+ ①では少なくともBではなく、Cを目的としていますね。
19
+ ②はAおよびBを満たし、Cに該当するかどうかという所です。
20
+
21
+ 提示した案は、AおよびCを満たし、Bは完全ではありません。
22
+
23
+ 性能の観点からは②がお薦めであり、提示した案は①の亜種です。

1

追記

2021/12/26 13:00

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -1,4 +1,8 @@
1
1
  ②ですね。
2
2
 
3
3
  別な方法としては、インデックスは現状のまま、条件を「ANY、日本語の、人気順」にする事です。
4
- 条件の左辺と右辺を等価に(is_offisial=is_offisial)すればANYになります。
4
+ 条件の左辺と右辺を等価に(`is_offisial=is_offisial`)すればANYになります。
5
+
6
+ SQLでパラメータを含む条件式としては、公式のパラメータを指定しない場合は`Null`として、
7
+ `is_offisial=coalesce(パラメータ, is_offisial)`
8
+ のようにすれば良いかと思います。