前段时间收到一个朋友的邮件,推荐去参加个某论坛的答题活动.
活动地址:http://bbs.phpthinking.com/thread-305-1-1.html
最后的结果竟然是答错一道题目,和该论坛负责人讨论未果,并被指责"不可能全世界都错了,就你对了".
导致心情很是糟糕,不得不跑51上来吐个槽.
现在把出错的题目发上来:
【单选】user表中对字段name(varchar类型)创建了普通索引,下列查询语句可以使用索引是?
A. SELECT * FROM users where name not in (‘a‘,‘b‘);
B. SELECT * FROM users where name like ‘%a%‘;
C. SELECT * FROM users where name between ‘a‘ and ‘b‘;
D. SELECT * FROM users where name = age;
根据分析,大家一般都选C了哈.
在大多数情况下,test1:
create table user (
id int(11) auto_increment,
name varchar(20) not null,
primary key (id)
);
alter table user add index idx_name (name);
并插入几条数据,explain4个选项之后发现,只有C是"完美"的答案.
但是,本题目中并未提到是否存在其他字段,也并未规定是否允许创建其他主键,那么其他的字段和主键是否会对测试结果造成影响呢?
下面,我们来进行test2:
create table user2(
name varchar(20) not null
);
alter table user2 add index idx_name (name);
继续explain...
好的,各位亲爱的小伙伴,经过测试,会发现a-c竟然都使用了索引,当然D一如既往的语法错误.
该负责人在跟我强调大多数的情况下C是如何如何的正确,但我想说,证明一道题目出的有问题,只需要一个反例就足够了.
最后,获悉该题目竟然还是某著名公司的面试题,出题人乃是经由百万年薪的经理之手.
我想,某公司啊,本着对面试尊敬的态度,还是先完善下该题目吧!
----答案一般大多数人是对的,而真理往往掌握在少数人手中.
原文地址:http://grogonboxer.blog.51cto.com/1377574/1583105