?居然要MySQL不用索引?(mysql用不到索引)
随着MySQL的不断普及,MySQL索引作为MySQL性能优化中不可或缺的一部分,已成为越来越多程序员及系统管理员从事MySQL开发及管理时不可或缺的一部分。但是,随着MySQL越来越复杂关系的存在,有一些应用情况下即使添加索引也无法有效提高MySQL的性能,于是,人们开始思考MySQL为什么不能使用索引?
MySQL索引的使用主要有两个目的,一是提高SQL查询效率;二是提高数据库记录的可重用性。从这两个目的来看,MySQL索引的使用并不是毫无选择余地的,MySQL索引在一定程度上反而会降低性能。一般来说,当查询相关数据小于等于10%时,MySQL索引可以起到很好的提速效果,但是当查询相关数据大于10%时,添加索引将会带来额外的开销,而且带来的提速并不明显,甚至会带来反效果。
要想判断是否需要使用MySQL索引,可以通过EXPLAIN指令对SQL查询状态进行分析。不少专业应用开发团队,通常把EXPLAIN指令作为工作进程中MySQL性能最重要的环节之一,用来判断某个SQL查询是否真的需要为其创建索引。
举例,假设我们有一个名为employee的表,它包含employeeid、lastname、firstname、hiredate几个字段,如果要使用索引来优化这个表,可以向MySQL发出以下指令:
CREATE INDEX last_name_idx ON emplayee (lastname);
使用EXPLAIN指令可以查看某个或某几个索引的使用情况:
EXPLAIN SELECT * FROM employee WHERE lastname = ‘Smith’;
EXPLAIN的输出结果中会显示索引名,即last_name_idx,而且column命中率也接近100%,因为输入的SQL查询中指定了lastname字段,利用这个索引时MySQL可以读取大量数据,因此能够有效减少查询时间,从而提高性能。
MySQL为什么不能使用索引?可以看到,是因为它使用的不正确,并不是因为MySQL的本身的原因,正确的使用MySQL索引,可以有效提高MySQL的性能。