4.1.索引效率提升验证:
在讲解索引的使用原则之前,先通过一个简单的案例,来验证一下索引,看看是否能够通过索引来提升数据查询性能。在演示的时候,我们还是使用之前准备的一张表 tb_sku ,
在这张表中准备了
1000w的记录。
这张表中
id
为主键,有主键索引,而其他字段是没有建立索引的。 我们先来查询其中的一条记录,看看里面的字段情况,执行如下SQL
:
select * from tb_sku where id =1;
可以看到(自己实验)即使有
1000w
的数据
,
根据
id
进行数据查询
,
性能依然很快,因为主键
id
是有索引的。 那么接下来,我们再来根据 sn
字段进行查询,执行如下
SQL:
select * from tb_sku where sn='100000003145001';
我们可以看到根据
sn
字段进行查询,查询返回了一条数据,结果耗时
20.78sec
,就是因为
sn
没有索引,而造成查询效率很低。
那么我们可以针对于
sn
字段,建立一个索引,建立了索引之后,我们再次根据
sn
进行查询,再来看一下查询耗时情况。
-- 创建索引
create index idx_sku_sn on tb_sku(sn);
然后再次执行相同的
SQL
语句,再次查看
SQL
的耗时。
我们明显会看到,
sn
字段建立了索引之后,查询性能大大提升。建立索引前后,查询耗时都不是一个数量级的。
4.2.最左前缀法则:
如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。如果跳跃某一列,索引将会部分失效(后面的字段索引失效)。以 tb_user 表为例,我们先来查看一下之前 tb_user 表所创建的索引。
show index from tb_user;
在
tb_user
表中,有一个联合索引,这个联合索引涉及到三个字段,顺序分别为:
profession
,
age
,
status
。
对于最左前缀法则指的是,查询时