用户名: 密码: 忘记密码? 注册
收藏此问题 发表新评论

提问:使用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 17:17:00
你一共才四条记录, MYSQL判断根本不需要走两次索引再拼接结果集。
昵称: ACMAIN_CHM  时间: 2011-06-15 19:02:58
没法用索引定位数据
昵称: rucypli  时间: 2011-06-15 19:27:48
发表评论
昵称:
内容:
验证: