CREATE TABLE user ( id INT(11) NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, age INT(3) NOT NULL, gender CHAR(1) NOT NULL, PRIMARY KEY (id), INDEX name_age (name, age), INDEX age_gender (age, gender) ) ENGINE=InnoDB;
在以上代码中,大家创建了一个名为”users”的表,并定义了四个列:id、name、age和gender。同时,大家也定义了三个索引:主键索引、复合索引”name_age”和复合索引”age_gender”。
复合索引的使用非常简单,可以在创建表时直接定义。在这个例子中,大家定义了两个复合索引:name和age的组合,以及age和gender的组合。这两个索引的优点在于,它们能够为多个列同时提供索引信息,从而避免多次查询。
对于上述table,如果大家查询符合以下条件的数据:
SELECT * FROM users WHERE name='张三' AND age=20;
MySQL会利用”name_age”索引来优化这个查询,因为这个索引包含了name和age两个列的信息,可以直接定位到符合条件的记录,而不需要遍历整个表。
在使用复合索引时,也需要注意一些问题。例如,如果笔者想查询age>20的所有记录,此时使用”age_gender”索引将会非常好。这是因为索引的最左前缀规则会限制使用”age_gender”索引的效率,而选择合适的索引可以排除这样的情况。
总的来说,复合索引是MySQL中非常有效的优化手段。在实际开发中,大家需要根据实际场景优化索引设计,尽可能避免不必要的索引,减少I/O操作,提高查询性能。