検索

ホームページ  >  に質問  >  本文

mysql - 为什么where条件中or加索引不起作用?

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'

阿神阿神2874日前728

全員に返信(4)返信します

  • 迷茫

    迷茫2017-04-17 15:00:32

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

    天蓬老师2017-04-17 15:00:32

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

    返事
    0
  • 高洛峰

    高洛峰2017-04-17 15:00:32

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

    返事
    0
  • 高洛峰

    高洛峰2017-04-17 15:00:32

    私は @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
  • キャンセル返事