MySQL のインデックスと非常に混同しています。
TableA1 と TableA2 の 2 つのテーブルがあります。
それらの間の結合のためにこれらにインデックスを作成しましたが、クエリは非常に高速に実行されます。
TableB1 と TableB2 など、同じ設定の別の 2 つのテーブルがあります。唯一の違いは、これらのテーブルにはいくつかの null 値があることです。
何らかの理由で、TableA に対する同じクエリは約 5 倍高速であり、テーブル全体のスキャンは必要ありません。ただし、TableB は完全なテーブル スキャンを使用しているようで、その理由がわかりません。これを引き起こしているのは Null 値でしょうか?
EXPLAIN を使用すると、TableA のセットアップで次のようになることに気付きましpossible keys: myindex
たref: func
。ただし、TableB のセットアップでは、possible keys: NULL
とref: NULL
.
私はこれについてかなり長い間検索してきましたが、関連する答えが見つからないようです。誰かが私を正しい方向に向けることができれば幸いです。
(申し訳ありませんが、元の質問に追加されました。)
ここにTableAOneがあります:
CREATE TABLE `TableAOne` (
`field1` varchar(255) DEFAULT NULL,
`field2` varchar(255) DEFAULT NULL,
KEY `myindex` (`field1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
そしてTableATwo:
CREATE TABLE `TableATwo` (
`Field3` varchar(255) ,
`Field4` varchar(255) ,
`Field5` varchar(255) ,
`id` int(20) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=15522 DEFAULT CHARSET=utf8;
Field1 と Field3 を結合しています。
フルテーブル スキャンを取得するテーブルは、上記のテーブルと同じです。唯一の違いは、TableA ではなく TableB と呼ばれることです。
乾杯、
ケ