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와 제목을 가진 수백만 개의 데이터를 테이블에 채워볼 수 있다는 것을 알았습니다.
인지 확인하세요.둘째, 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님 말씀에 동의합니다. 온라인에서 수천만 개의 데이터가 포함된 테이블을 찾아 설명하거나 문의했습니다.
으아악