通常情况下,MySQL 可以使用联合索引来优化 SQL 查询性能。联合索引又叫复合索引,它是由多个列组成的索引。当查询条件中包含联合索引中的多个列时,MySQL 就可以使用该联合索引来加速查询。
CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `age` int(11) DEFAULT NULL, `score` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_age_score` (`age`,`score`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
以上为一个名为 student 的表,在该表中,由 `age` 和 `score` 两列组成了名为 `idx_age_score` 的联合索引。现在大家要对该表进行查询优化,可以通过执行计划来确定索引使用情况。
EXPLAIN SELECT * FROM student WHERE age=18 AND score>=90;
执行上述 SQL 语句后,大家可以通过以下命令查看执行计划:
id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE student (NULL) ref idx_age_score idx_age_score 5 const 2 100.00 Using where
根据执行计划结果中的 type 字段,大家可以看到 MySQL 正确地使用了联合索引 idx_age_score 来加速查询。同时,可以注意到 Extra 字段中的 Using where,表示 MySQL 仍然需要对该联合索引中的两列进行筛选操作。
总之,通过查看执行计划,大家可以看到 MySQL 是否正确地使用了大家所创建的联合索引。如果 MySQL 没有使用这些索引,大家需要对 SQL 查询语句或索引进行优化。