通过前面几篇文章的介绍,大家应该都对MySQL中索引的创建和基本技巧有了大概的了解。在实际在实际业务中,我们会遇到很多复杂的场景,比如对多个列进行查询。这时,可能会要求用户创建多个列组成的索引,如列 a 和 b 创建的组合索引,但究竟是创建(a,b)的索引,还是(b,a)的索引,结果却是完全不同的。那本篇,我们就来看一下更贴近业务实战的组合索引的创建和使用。
一、什么是组合索引
组合索引(Compound Index)是指由多个列所组合而成的 B+树索引,这和我们之前的B+ 树索引的原理完全一样,只是之前是对一个列排序,现在是对多个列排序。组合索引既可以是主键索引,也可以是二级索引,下图显示的是一个二级组合索引:
二、设计实战
1、避免额外排序
在业务中,我们经常会遇到根据某个列进行查询,并根据时间排序倒序展示的需求。例如某宝的订单页面,都是通过个人信息倒序展示个人的订单数据;又比如微博展示用户订阅的微博用户,并通过订阅时间倒序展示博文。比如如下表结构:
CREATE TABLE `orders` (
`O_ORDERKEY` int NOT NULL,
`O_CUSTKEY` int NOT NULL,
`O_ORDERSTATUS` char(1) NOT NULL,
`O_TOTALPRICE` decimal(15,2) NOT NULL,
`O_ORDERDATE` date NOT NULL,
`O_ORDERPRIORITY` char(15) NOT NULL,
`O_CLERK` char(15) NOT NULL,
`O_SHIPPRIORITY` int NOT NULL,
`O_COMMENT` varchar(79) NOT NULL,
PRIMARY KEY (`O_ORDERKEY`),
KEY `ORDERS_FK1` (`O_CUSTKEY`)