MySQLでインデックスを使用して参加すると同じテーブルの二組。 1は、フルテーブルスキャンが必要です
-
20-09-2019 - |
質問
イムは、MySQLのインデックスと非常に混乱してきます。
私は2つのテーブルがあります。TableA1とTableA2を
彼らと本当に速い実行クエリの間の結合のためです。私は、これらのインデックスを作成しました
Iは、例えば、同一の設定で別の2つのテーブルを持っていますTableB1とTableB2。唯一の違いは、これらのテーブルは、いくつかのNULL値を持っているということです。
何らかの理由でTableAの上の同じクエリを約5倍高速で、フルテーブルスキャンを必要としません。テーブルBは、しかし、全表スキャンを使用しているようだと私はなぜうまくいかないことができます。それがこれを引き起こしているNULL値のだろうか。
私もpossible keys: myindex
そのTableAの設定に、私が手ref: func
とをEXPLAIN使用して注意してください。しかし、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;
私はフィールド1とフィールド3に参加しています。
フルテーブルスキャンを取得するテーブルは、上記の表と同じです。唯一の違いは、それらがテーブルBの代わりに、テーブルAと呼ばれている。
乾杯、
ケ
解決
私は(私はこれが違いを作ったかどうかわからないlatin1のために変更UTF8をしました)デシベルにそれをテーブルを削除し、再インストール、しかしそれは、今では本当に奇妙な作品!すべての返信のための多くのおかげでvは、彼らは確かに答え歓声に向けて私をプッシュ:)