SQLで日付にインデックス付けて効果ある?

 コメント3件
MariaDB Foundation - MariaDB.org
… Continue reading "MariaDB Foundation"
  • 1:以下、名無しがお送りします

    速くなる?

  • 11:以下、名無しがお送りします

    日付カラムにインデックス貼ると検索速度上がるよ

  • 17:以下、名無しがお送りします

    >>11 でも日付ってカーディナリティ低くない? インデックス効果薄そう

  • 22:以下、名無しがお送りします

    >>17 確かに日付の選択性は低いけど 範囲検索するならインデックス有効だと思う

  • 26:以下、名無しがお送りします

    >>22 例えば「最近1ヶ月分のデータ」みたいな検索とかね

  • 35:以下、名無しがお送りします

    >>26 そういう範囲検索の場合 日付インデックスあると爆速になるよな

  • 43:以下、名無しがお送りします

    >>35 ただイコール検索だとインデックス要らないかも

  • 46:以下、名無しがお送りします

    created_atカラムとかによく使うから とりあえずインデックス貼っとくのがセオリーだと思ってた

  • 50:以下、名無しがお送りします

    インデックス貼りすぎると更新が遅くなるデメリットもあるから 適材適所だね

  • 53:以下、名無しがお送りします

    >>50 日付カラムのデータ型はdatetimeとtimestampどっちがいいんだろ?

  • 56:以下、名無しがお送りします

    >>53 MySQLだとtimestampのが便利な気がする タイムゾーン変換できるし

  • 59:以下、名無しがお送りします

    >>56 でもtimestampって2038年問題あるんでしょ?

  • 66:以下、名無しがお送りします

    >>56 timestampは2038年以降の時間を保持できないから 使わない方がいいぞ

  • 81:以下、名無しがお送りします

    日付カラムを複合インデックスの一部にするのはアリ?

  • 84:以下、名無しがお送りします

    >>81 アリだと思う ユーザーIDと組み合わせて「あるユーザーの直近データ」を検索したりするし

  • 93:以下、名無しがお送りします

    >>84 複合インデックスの順番は選択性高い方から並べるのが鉄則だよね

  • 100:以下、名無しがお送りします

    >>93 そうそう だからuser_idとcreated_atの複合インデックスならuser_id先頭にするべき

  • 105:以下、名無しがお送りします

    >>100 INDEXヒントでインデックス強制したりする?

  • 111:以下、名無しがお送りします

    >>105 正直あんまり使ったことない

  • 113:以下、名無しがお送りします

    SQLite使ってるんだけど 日付のインデックスって大丈夫?

  • 117:以下、名無しがお送りします

    >>113 SQLiteも日付にインデックス使えるよ datetimeとかdate型で

  • 122:以下、名無しがお送りします

    部分インデックスって使える? 例えば「今年のデータ」だけインデックス

  • 128:以下、名無しがお送りします

    >>122 部分インデックスはMySQLにはないんだよね

  • 131:以下、名無しがお送りします

    >>128 マジか PostgreSQLとかOracleにはあるのに

  • 136:以下、名無しがお送りします

    >>131 MySQLにも欲しい機能だよね

  • 141:以下、名無しがお送りします

    日付のパーティショニングはどうよ

  • 142:以下、名無しがお送りします

    >>141 パーティショニングいいよね 年月でパーティション切ると捗る

  • 144:以下、名無しがお送りします

    >>142 確かにパーティション使うとデータ絞り込みが楽だわ

  • 146:以下、名無しがお送りします

    >>144 ただパーティションの管理めんどいのが玉にキズ

  • 148:以下、名無しがお送りします

    >>146 一理ある

  • 158:以下、名無しがお送りします

    ソートにも効果あるの?

  • 163:以下、名無しがお送りします

    >>158 ソート済みの状態になってるから 明示的なソートが不要で速くなるよ

  • 174:以下、名無しがお送りします

    日付カラムを複数持つテーブルのインデックスどうしてる?

  • 180:以下、名無しがお送りします

    >>174 created_atとupdated_atによくあるパターンだよね

  • 189:以下、名無しがお送りします

    >>180 そういう時は両方カラムにインデックス張ってる アプリケーション要件次第だけど

  • 191:以下、名無しがお送りします

    >>189 updated_atはあんまり検索しない気がするからcreated_atだけでもいいかも

  • 195:以下、名無しがお送りします

    >>191 たしかに

  • 205:以下、名無しがお送りします

    MySQLのクエリログ見ると意外と日付の検索多いんだよね

  • 215:以下、名無しがお送りします

    >>205 そういう時にインデックス役立つんだろうね

コメント(3件)

  • 1

    とりあえず貼っとけは危険な香りがする

    1
  • 2

    タイムゾーン変換ってそんな使う場面ある

    1
  • 3

    パーティショニング管理めんどいはめっちゃわかる