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

WHEREに変数がある場合、MySQLクエリはインデックスを使用しません

    最も可能性の高い説明は、列nodoです。 は文字データ型であり、character_set_connection 列に指定された文字セットと一致しません。

    列がlatin1で定義されている場合 キャラクターセット、試してみてください:

    WHERE nodo = CONVERT(@sitio USING latin1)
    

    デモンストレーションとして、utf8を使用して、explain出力に使用可能なインデックスがないことを示します:

    EXPLAIN SELECT t.* FROM mytable t WHERE t.foo = CONVERT(@foo USING utf8)
                                                                      ^^^^
    id select_type table type possible_keys key    key_len ref    rows Extra        
    -- ----------- ----- ---- ------------- ------ ------- ------ ---- -----------
     1 SIMPLE      t     ALL  (NULL)        (NULL) (NULL)  (NULL)    3 Using where
    

    しかし、latin1では、explain出力はインデックスが利用可能である(そして使用されている)ことを示しています:

    EXPLAIN SELECT t.* FROM mytable t WHERE t.foo = CONVERT(@foo USING latin1)
                                                                      ^^^^^^    
    id select_type table type possible_keys key    key_len ref    rows Extra        
    -- ----------- ----- ---- ------------- ------ ------- ------ ---- -----------
     1  SIMPLE     t     ref  t_ix          t_ix   13      const     1 Using where
    



    1. MySQL8.0で監視するもの

    2. Oracle SQL Developer:失敗-テストに失敗しました:ネットワークアダプタが接続を確立できませんでしたか?

    3. 複数のパラメータを持つEXECsp_executesql

    4. PHPで10進数/double/ float値をPDOにバインドする最良の方法は何ですか?