MySql/MariaDB でクエリ内でインデックスを直接使用できるかどうか知りたいです。タイムスタンプと値のペアを含む単純な未ソートのテーブルがあるとします。
リーリータイムスタンプを追加してインデックスを作成:
リーリーソートされたタイムスタンプの順序に「すばやくアクセス」できます。
連続する値の値の差を提供するクエリを定義しましょう:
リーリー明らかに、このクエリは条件付きであり、コストがかかります。より便利な方法は、列 myindex をテーブルに追加することです:
リーリーそして、新しい列にタイムスタンプの時系列順を入力します (例: PHP コードを介して)
新しいクエリはよりシンプルかつ安価になります:
リーリー新しい列 myindex は、データベース テーブル インデックス ind_ts にある程度似ています。 (なぜ) myindex の代わりに ind_ts を使用する MySql 構造はありませんか?
MySQL 8.0 または MariaDB 10.2 (またはそれ以降) を使用している場合、
LEAD()
およびLAG()
を使用すると、OK の前後を簡単に表示できます。古いバージョンをお使いの場合は「自己結合」を行ってください。つまり、テーブル
リーリー ###それから### リーリーJOIN
をそれ自体と結合します。次に、2 つの「テーブル」を 1 つずらして位置合わせします。これには、オフセットを簡単に行う方法を提供するために、新しいAUTO_INCRMENT
を使用して一時テーブルを生成する必要がある場合があります。これは、「myindex」のアイデアよりもわずかに優れている可能性があります。(これにより、テーブルの最初と最後の行は処理されません。)
注:
TEMPORARY TABLEは、それ自体に
JOIN
できないため、使用できません。