1

mysql が index_merge を使用しないのはなぜですか?

サーバーで index_merge がオンになっているようですが、オプティマイザはまだ考慮していません。

optimizer switch    index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on



explain SELECT a,b FROM `zip25` WHERE b=91367 OR a=91367


id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE          zip25   ALL a,b         NULL    NULL    NULL    752299  Using where

[編集]
テーブル定義

CREATE TABLE `zip25` (
  `a` char(5) DEFAULT NULL,
  `b` char(5) DEFAULT NULL,
  `distance` float NOT NULL,
  KEY `a` (`a`),
  KEY `b` (`b`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

前もって感謝します

4

1 に答える 1

1

フィールドのデータ型は char ですが、クエリで整数を使用しています。char への暗黙的なキャストが行われます。深刻な問題のようには見えませんが、実際には MySQL がインデックスをまったく使用できなくなります。常にデータ型に注意してください!

クエリを次のように変更します。

explain SELECT a,b FROMzip25WHERE b="91367" OR a="91367"

于 2012-04-14T12:11:02.383 に答える