提问:使用OR的查询为什么执行计划不使用索引?

表结构:
SQL code

mysql> show create table student\G
*************************** 1. row ***************************
       Table: student
Create Table: CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) NOT NULL,
  `sex` char(4) NOT NULL,
  `birth` date NOT NULL,
  `department` varchar(30) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `index_birth_department` (`birth`,`department`),
  KEY `index_name` (`name`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)


表数据:
SQL code

mysql> select * from student;
+----+------+-----+------------+------------+
| id | name | sex | birth      | department |
+----+------+-----+------------+------------+
|  1 | 张三 || 1985-02-06 | 信息学院   |
|  2 | 赵六 || 1986-10-24 | 计算机学院 |
|  3 | 李四 || 1991-02-15 | 英语系     |
|  4 | 王五 || 1989-12-25 | 旅游系     |
+----+------+-----+------------+------------+
4 rows in set (0.00 sec)


使用or的查询:
SQL code

mysql> explain select * from student where name='张三' or id=2\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: student
         type: ALL
possible_keys: PRIMARY,index_name
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 4
        Extra: Using where
1 row in set (0.00 sec)


疑问,为什么没有使用索引?

作者: zeldady   发布时间: 2011-06-15

你一共才四条记录, MYSQL判断根本不需要走两次索引再拼接结果集。

作者: ACMAIN_CHM   发布时间: 2011-06-15

没法用索引定位数据

作者: rucypli   发布时间: 2011-06-15