をインデックス化されています。私は次のクエリませインデックスクエリ/準備警告で使用される - 私は主キーを持つMySQLのテーブルを持っていますが、列は
SELECT * FROM members WHERE club='adfsd';
をすれば、私が取得
CREATE TABLE `members` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`type` char(1) ,
`status` char(1) ,
`enable` char(1),
`club` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3714 DEFAULT CHARSET=utf8 ;
Mysqliからの 'クエリに使用されたインデックスがありません/準備されたステートメント'という警告があります。それは十分公正です - 私は本当にそれにインデックスを持っている必要があります。私は、インデックスが作成されるクラブに
KEY `club` (`club`)
をインデックスを追加 - 私はDESCRIBEを通してそれを見ることができますが、私はSELECTクエリを実行するとき、私は同じ取得「NOインデックスが使用されていない...」の警告を。
だから私は
KEY `clubind` (`club`)
列名とは異なるものに索引名を変更し、クエリが警告なしで動作します。
他の列の1つに索引を作成し、 'status'とし、索引名として 'status'を使用し、その列を使用すると、すべてが正常に機能します。
私が見ることのできる唯一の違いは、問題のある列は整数であり、その他は文字であることです。
クラブインテンシブ(10)unsigned NOT NULL' ...ここに何か間違っていますか? int列と文字列を比較しています。 –
私は単純な誤植のためにこの質問を終了することに投票しています。 –
私の例のクエリは誤解を招いていました。私は準備済みのステートメントを使用しているため、この例の誤植です。問合せは常に整数を使用します。インデックス名が列名と異なるときには、「インデックスが使用されていません...」という警告なしでクエリが機能する理由と問題点です。整数列に文字列を照会することとは関係ありません。 – user1199529