CREATE TABLE test
(id
int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',creator
varchar(128) NOT NULL DEFAULT '0' COMMENT '创建人',gmt_create
timestamp NULL DEFAULT NULL COMMENT '创建时间',modifier
varchar(128) DEFAULT '0' COMMENT '修改人',gmt_modified
timestamp NULL DEFAULT NULL COMMENT '修改时间',title
varchar(64) DEFAULT NULL COMMENT '工单标题',category
varchar(32) DEFAULT NULL COMMENT '工单类别',subject
varchar(32) DEFAULT NULL COMMENT '工单类型',demander
varchar(30) DEFAULT NULL COMMENT '需求方',is_atomic
char(1) DEFAULT 'y' COMMENT '是否原子工单',atomic_id
int(11) DEFAULT NULL COMMENT '当前原子工单在列表中ID',
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=182431 DEFAULT CHARSET=utf8 COMMENT='测试表';
SHOW INDEX FROM test
ALTER TABLE test ADD INDEX test_title (title)
EXPLAIN SELECT * FROM test.test WHERE id = 100 or title = 'gg'
EXPLAIN SELECT * FROM test.test WHERE title = 'ggg'
まず、データの量が少なすぎるため、実行計画を作成するときに、さまざまな ID とタイトルを持つ数百万のデータをテーブルに入力してみると、より高速であることがわかりました。
であることを確認します。2 番目に、mysql のバージョンが 5.0 以降であり、クエリ オプティマイザーがオンになっていることを確認します
index_merge_union=on
。つまり、optimizer_switch
が変数index_merge_union
に存在し、on
追加ポイント:
@mokeyjay の発言はあまり正しくなく、時代遅れです。以下のドキュメントをご覧ください。
http://dev.mysql.com/doc/refman/5.6/en/index-merge-optimization.html
これは決まり文句です。ブログ投稿 http://blog.csdn.net/hguisu/article/details/7106159 を引用してください
ご招待いただきありがとうございます。 mysql のインデックス作成の問題については、このドキュメントを参照してください。お役に立てれば幸いです
。私は @xiayongsheng の意見に同意します。数千万のデータを含むテーブルをオンラインで見つけ、それについて説明または問い合わせました。
リーリー