テーブル内の10000レコードがあるテーブルINDEXED_MERCHANTを更新するために、次のSQLクエリを試しました。インデックスのキーとして「名前」と「A」の両方を索引付けして、更新クエリのパフォーマンスを向上させました。MySQLの更新クエリがインデックス付き列を使用していません
INDEXED_MERCHANT | CREATE TABLE `INDEXED_MERCHANT` (
`ID` varchar(50) NOT NULL,
`NAME` varchar(200) DEFAULT NULL,
`ONLINE_STATUS` varchar(10) NOT NULL,
`A` varchar(100) DEFAULT NULL,
`B` varchar(200) DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `NAME` (`NAME`,`A`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
をここでこの手段の両方私のキーがインデックスキーとして認識されている次のようにコマンドSHOW CREATE TABLE INDEXED_MERCHANT;
を実行することで、私は、出力結果を得るでしょう。次のコマンドを実行すると、「余分な」列の結果に、クエリがインデックスキーを使用していないことが示されます。私はどのように目標を達成するべきですか? 実行されたクエリ:EXPLAIN EXTENDED UPDATE INDEXED_MERCHANT SET ONLINE_STATUS = '0' WHERE NAME = 'A 205' AND A = 'P 205';
結果:
+----+-------------+------------------+-------+---------------+------+---------+-------------+------+----------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | **Extra** |
+----+-------------+------------------+-------+---------------+------+---------+-------------+------+----------+-------------+
| 1 | SIMPLE | INDEXED_MERCHANT | range | NAME | NAME | 906 | const,const | 1 | 100.00 | **Using where** |
+----+-------------+------------------+-------+---------------+------+---------+-------------+------+----------+-------------+
あなたはそのクエリに最適なインデックスを持っています。問題/質問は何ですか?複合インデックス( 'NAME'という名前で、' NAME'カラムと混同しないでください)を使用しています。 '906'と' const、const'は両方とも両方の列が関わっていることを示します。 '1行'も非常に良いです。 –