sql >> データベース >  >> RDS >> Mysql

MySQLクエリの複数の列インデックスを理解する

    良い質問です。

    インデックスは左から右に機能するため、WHERE 基準はインデックスを使用します。この場合、ソートではインデックスも使用されます(以下の実行プラン)。

    マニュアル から :

    単一の列インデックスがある場合(accountid )、代わりにファイルソートが使用されます。したがって、クエリはそのインデックスの恩恵を受けます。

    2列インデックス

    create table t1 (
      accountid tinyint,
      logindate date);
    
    create index idx on t1 (accountid, logindate);
    
    insert into t1 values (1, '2012-09-05'), (2, '2012-09-09'), (3, '2012-09-04'), 
        (1, '2012-09-01'), (1, '2012-09-26'), (2, '2012-05-16'), 
        (1, '2012-09-01'), (3, '2012-10-19'), (1, '2012-03-01')
    

    実行計画

    ID  SELECT_TYPE  TABLE  TYPE  POSSIBLE_KEYS  KEY  KEY_LEN  REF   ROWS  FILTERED  EXTRA
    1   SIMPLE       t1     ref   idx            idx  2        const 5     100       Using where; Using index

    単一列インデックス

    create table t1 (
      accountid tinyint,
      logindate date);
    
    create index idx on t1 (accountid);
    
    insert into t1 values (1, '2012-09-05'), (2, '2012-09-09'), (3, '2012-09-04'), 
        (1, '2012-09-01'), (1, '2012-09-26'), (2, '2012-05-16'), (1, '2012-09-01'), 
        (3, '2012-10-19'), (1, '2012-03-01')
    

    実行計画

    ID  SELECT_TYPE  TABLE  TYPE   POSSIBLE_KEYS  KEY  KEY_LEN  REF   ROWS  FILTERED  EXTRA
    1   SIMPLE       t1     range  idx            idx  2              5     100       Using where; Using filesort



    1. MySQLで変数を宣言する方法は?

    2. SQLServerで日付を別のタイムゾーンに変換する

    3. UTF8ワークフローPHP、MySQLの要約

    4. Excelを超えた5つの兆候