mysql - 为什么where条件中or加索引不起作用?
阿神
阿神 2017-04-17 14:58:32
0
4
725

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'

阿神
阿神

闭关修行中......

全員に返信(4)
迷茫

まず、データの量が少なすぎるため、実行計画を作成するときに、さまざまな 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

いいねを押す +0
Peter_Zhu

これは決まり文句です。ブログ投稿 http://blog.csdn.net/hguisu/article/details/7106159 を引用してください

いいねを押す +0
小葫芦

ご招待いただきありがとうございます。 mysql のインデックス作成の問題については、このドキュメントを参照してください。お役に立てれば幸いです

いいねを押す +0
小葫芦

私は @xiayongsheng の意見に同意します。数千万のデータを含むテーブルをオンラインで見つけ、それについて説明または問い合わせました。

リーリー
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t index_merge PRIMARY,t_userid PRIMARY,t_userid 4,123 2 Using union(PRIMARY,t_userid); Using where
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート