实际例子分析面试过程中经常问到的联合索引,给定一个查询SQL和联合索引,问是否会走索引。
表结构:
CREATE TABLE person (
id int(2) NOT NULL,
address varchar(255) DEFAULT NULL,
age int(11) NOT NULL,
name varchar(255) DEFAULT NULL,
PRIMARY KEY (id),
UNIQUE INDEX idx_person_01 (name, age)
)
ENGINE = MYISAM
AVG_ROW_LENGTH = 26
CHARACTER SET utf8
COLLATE utf8_general_ci;
问题一: 如果查询字段顺序调整:
EXPLAIN SELECT * FROM person WHERE age = 10 AND name ='张三';
问题二:如果查询字段只用到了age:
EXPLAIN SELECT * FROM person WHERE age = 10 ;
问题三:如果查询字段含有like:
EXPLAIN SELECT * FROM person WHERE name LIKE '张三%' AND age = 10 ;
EXPLAIN SELECT * FROM person WHERE name LIKE '%张三%' AND age = 10 ;
问题四:如果查询字段含有>或者<:
EXPLAIN SELECT * FROM person WHERE age > 10 AND name = '张三';
EXPLAIN SELECT * FROM person WHERE age > 10 AND name like '张三%';
问题五:查询条件中含有函数:
EXPLAIN SELECT * FROM person WHERE LEFT(name,2)='张三';