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

回答編集履歴

2

インデックスの件も追加

2022/01/11 06:57

投稿

退会済みユーザー
answer CHANGED
@@ -12,4 +12,11 @@
12
12
  SQLに慣れているのであれば、`DB::raw(~)`でSQL処理系に依存する表記で書いてしまってもいいでしょうし。
13
13
  `->whereRaw("publish between cast(? as timestamp) and cast(? as timestamp) + '6 days'::interval", [$val, $val])`
14
14
  が通じるかどうか。
15
- (?の2箇所をそれぞれ同じ$valで置き換えさせて、クエリ上で6日分日付を足しているつもり。)
15
+ (?の2箇所をそれぞれ同じ$valで置き換えさせて、クエリ上で6日分日付を足しているつもり。)
16
+
17
+ あと、余計なお世話かもしれませんが、
18
+ カラムidとpublishにはインデックスは設定済みでしょうか?
19
+ idがユーザーIDらしいので重複を許すインデックスで、
20
+ publishも同じく重複を許すインデックスでしょうね。
21
+ SQL実行ログを記録できるように設定変更できていれば、
22
+ [EXPLAINの利用](https://www.postgresql.jp/document/13/html/using-explain.html)でクエリー実行パフォーマンスを念の為にチェックしてみると良いです。

1

whereの見直し

2022/01/11 06:57

投稿

退会済みユーザー
answer CHANGED
@@ -9,4 +9,7 @@
9
9
  本当に時刻成分なしに比較するなら素直にDATE型で扱った方がよろしいかと。
10
10
  (比較するときにいちいちDATE型に変換するのは無駄だし。[式に対するインデックス](https://www.postgresql.jp/document/13/html/indexes-expressional.html)を駆使したら少しはマシかも知れませんが。)
11
11
 
12
- SQLに慣れているのであれば、`DB::raw(~)`でSQL処理系に依存する表記で書いてしまってもいいでしょうし。
12
+ SQLに慣れているのであれば、`DB::raw(~)`でSQL処理系に依存する表記で書いてしまってもいいでしょうし。
13
+ `->whereRaw("publish between cast(? as timestamp) and cast(? as timestamp) + '6 days'::interval", [$val, $val])`
14
+ が通じるかどうか。
15
+ (?の2箇所をそれぞれ同じ$valで置き換えさせて、クエリ上で6日分日付を足しているつもり。)