1

私は MySQL を初めて使用し、既存のテーブル (約 200K 行を含む) にインデックスを追加する必要があります。

Table mytable: (id:integer, created_time:timestamp, deleted_time:timestamp)

インデックスの恩恵を受ける必要があるクエリが 2 つあります。

select s.id from mytable s
where s.completed_time is not null
and s.completed_time < ?
and ( s.deleted_time is null
    or s.deleted_time >= ? );

と :

select s.id from mytable s 
where
   s.completed_time is not null 
and (
   ( s.deleted_time is not null 
   and s.deleted_time >= ? 
   and s.deleted_time < ? )
 or ( s.completed_time >= ? 
   and s.completed_time < ? ) ) ;

(completed_time と deleted_time で) 複数列インデックスの導入を検討していますが、「s.completed_time が null でない」という条件が、これらのクエリで複合インデックスを使用する基準に一致するかどうかはわかりません。

  • 何がベストか(複合インデックスまたは 2 つのインデックス)について何か考えはありますか? 「説明」を使用して最適なものを見つけようとしていますが、結果を解釈する方法がわかりません。

  • より一般的には、(column1, column2) に複合インデックスを持つテーブルでは、column2 のみのフィルタリングではインデックスが使用されないことを理解しています。しかし、(column1 > MIN_VALUE) や (column1 is not null) のようなダミー条件を導入するのが正しい場合はどうなるでしょうか?

ありがとう!

4

2 に答える 2