日付カラム、インデックスないない問題

とあるフォローイング風景

seaさん「検索SQL速くしたくて悩んでるんですけど」

jflute「おお」

seaさん「これをどうにか」

jflute「この日付カラムにINDEX貼ればおしまいのような」

seaさん「INDEXを貼らずに速くできないかなと」

jflute「なんで?」

(小声でたどたどしく...)
seaさん「夜間メンテとか大げさなことになっちゃって...」

jflute「むー」

とあるフォローイング風景2

landさん「検索SQL速くしたくて悩んでるんですけど」

jflute「おお」

landさん「これをどうにか」

jflute「この日時カラムにINDEX貼ればおしまいのような」

landさん「INDEXを貼らずに速くできないかなと」

jflute「なんで?」

(小声でたどたどしく...)
landさん「DB変更は先輩にお願いしないといけなくて...」

jflute「むー」

jflute(まあ言いづらいんだろうね...)

いやいやいや? or しょうがない?

人生でまあまあな回数あるんですよね苦笑

まあ、seaさん、landさんの仕事推進スキルがまだまだって面もあるし...

そういうのが拾い上げられないチームのムード面もあるわけですが...

あえて視野を狭く考えると、気持ちはわからなくもないってのもあって。

日付/日時の検索が後に来る

事業会社ならではなんでしょうか?

最初のまだサービスが小さい時、日付/日時カラムを作っても、検索をする人がまだいなかったりします。

でも、作っておかないと後から欲しくなっても取得できないので、あらかじめカラム作って保存しておこうってなります。(作らないと情報ロスになってしまうので)

それはそれで、わりと当たるのです。閲覧に限らず絞り込み条件で使う場面も大いにやって来ます。(というか日付/日時カラムの目的ってほとんど絞り込み条件?)

なので作っておいて良かった良かった...は良いんですけど、INDEX貼ってなくてさっきのフォローイング風景のようになるのですね。

もはやとりあえず?

たぶん、カラムを作った人は、必要になったときに貼る方が良いというつもりだったのでしょう。(何も考えずに作ったってケースもあるかもですが)

一方で、フォローイング風景のようなことも起きます。

もはや日付/日時はとりあえずINDEX貼っておけば?

って思ってしまったりします。

(共通カラムのメタ的な日時は置いておいて、業務的な日付/日時カラムに)

検索が遅い方がつらい?

もちろんシステムの特性にも寄るかもしれません。

o DBのサイズをすごく気にしないといけないので、INDEXも無駄に貼りたくない
o 検索よりも更新のスピードの方が重要なので、INDEXも無駄に貼りたくない

という明確な事情があればまた別ですが...

jfluteが関わってる現場で言うと、事業会社で検索の方が圧倒的に重要なシステムが多い印象で。(更新が遅くて問題になるのはほとんど聞かない)

特にMySQLなんかは、FKカラムに自動的にINDEX貼られるくらいで、そもそも無駄なINDEXを気にしてるムードがほとんどない印象で。

まだ考え中の案件

と思ったりするのですが、みなさんどうなんでしょうね?

これから色んな人にヒアリングして行きたいなと思っています。

(そのためにこのブログを書いたと言っても過言ではない^^)