ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

どちらを選ぶのか迷うとき

開始日時と終了日時を含むデータを元に、2つの切り口で判定をするために、全件検索をしないためのインデックスを作成しています。
ajya.hatenablog.jp

データAとデータBにおいて、2つの切り口が一致して、データAの終了日時とデータBの開始日時が一緒であれば、一つのデータにまとめてしまえます。
逆に、データAの終了日時とデータBの開始日時が一緒でも、2つの切り口のうち、どちらか一方だけでも一致しないと、データはまとめられません。
まとめられない分、検索対象が増える結果となります。

選択する
unsplash-logoJon Tyson

ここで、切り口が2つあるのだから、それぞれの切り口毎にデータを用意して、切り口毎になったデータにおいて、データAの終了日時とデータBの開始日時が一緒であれば、一つのデータにまとめてしまえばいいのではないかと考えました。
切り口毎にデータを用意する、全件検索をしないためのインデックスも切り口毎に用意するという処理で時間は必要になりますが、検索の時間は短くなるはずです。

切り口毎にデータを用意した場合としなかった場合、どちらも試してみましたが、処理の時間に優位な差を得られませんでした。
切り口毎にデータを用意した方が、若干処理は速いようですが、他の要因もあるから、明確ではないなという感覚です。

極端に差が出るのであれば、選択しやすいのですが、今回は処理のわかりやすさからすると、切り口毎にデータを用意した方がわかりやすいので、切り口毎にデータを用意する方法を採用しました。
データが2重になってもったいない気もしますが、データA終了日時とデータBの開始日時が一緒であれば、一つのデータにまとめてしまう処理によるデータの削減および検索の高速化に期待して選んでもいます。