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

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와 제목을 가진 수백만 개의 데이터를 테이블에 채워볼 수 있다는 것을 알았습니다.
둘째, mysql 버전이 5.0 이상인지, 쿼리 최적화 프로그램이 켜져 있는지 index_merge_union=on, 즉 optimizer_switchindex_merge_union 변수에 존재하고 on

인지 확인하세요.

추가 사항:

@mokeyjay의 발언은 그다지 정확하지도 않고 시대에 뒤떨어진 발언입니다. 다음 문서를 살펴보실 수 있습니다.

http://dev.mysql.com/doc/refman/5.6/en/index-merge-optimization.html

Peter_Zhu

진부한 표현입니다. 블로그 게시물을 인용하세요.http://blog.csdn.net/hguisu/article/details/7106159

小葫芦

초대해주셔서 감사합니다. mysql의 인덱싱 문제에 대한 이 문서를 살펴보세요. 도움이 되기를 바랍니다

小葫芦

@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
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿