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

MySQLがこれらの可能なキーのいずれかを使用しないのはなぜですか?

    発生する可能性のあるもう1つの問題は、データ型の不一致です。たとえば、列が文字列データ型(たとえば、CHAR)であり、クエリが数値を引用していない場合、MySQLはインデックスを使用しません。

    SELECT * FROM tbl WHERE col = 12345; # No index
    SELECT * FROM tbl WHERE col = '12345'; # Index
    

    出典:今日、これと同じ問題と戦い、MySQL5.1で難しい方法を学びました。 :)

    編集:これを確認するための追加情報:

    mysql> desc das_table \G
    *************************** 1. row ***************************
      Field: das_column
       Type: varchar(32)
       Null: NO
        Key: PRI
    Default: 
      Extra: 
    *************************** 2. row ***************************
    [SNIP!]
    
    mysql> explain select * from das_table where das_column = 189017 \G
    *************************** 1. row ***************************
               id: 1
      select_type: SIMPLE
            table: das_column
             type: ALL
    possible_keys: PRIMARY
              key: NULL
          key_len: NULL
              ref: NULL
             rows: 874282
            Extra: Using where
    1 row in set (0.00 sec)
    
    mysql> explain select * from das_table where das_column = '189017' \G
    *************************** 1. row ***************************
               id: 1
      select_type: SIMPLE
            table: das_column
             type: const
    possible_keys: PRIMARY
              key: PRIMARY
          key_len: 34
              ref: const
             rows: 1
            Extra: 
    1 row in set (0.00 sec)
    


    1. phpとmysqlでステートメントを実行できません

    2. PostgreSQLで並べ替えを使用して固定数の行を削除するにはどうすればよいですか?

    3. DATABASEPROPERTYEX()を使用して、SQLServerのデータベース設定を返します

    4. レコードが複数のPHPである場合は、すべてのセルに挿入します