联合索引在MySQL是通过多个列的数据组合构成的,能够加快数据库查询速度,提高数据库的性能。
CREATE TABLE `user_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `age` int(11) DEFAULT NULL, `city` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_name_age_city` (`name`,`age`,`city`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
以上代码创建了一个名为"user_info"的表,并建立了一个联合索引"idx_name_age_city",包含"name"、"age"和"city"三个字段。
在查询时,如果使用到了"WHERE"筛选条件中的"name"、"age"和"city"字段,查询速度就会比单独使用这三个字段查询的速度更快。
EXPLAIN SELECT * FROM user_info WHERE name='Tom' AND age=20 AND city='Beijing';
当执行上述查询语句时,会看到如下结果:
id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE user_info ref idx_name_age_city idx_name_age_city 62 const 1 Using where
可以发现,解析器在执行查询时使用了"idx_name_age_city"联合索引,查询速度得到了提升。
在创建联合索引时,建议将经常用于查询的字段放在前面,这样会更利于提升查询速度。