MySQL80函数索引及使用案例

吉林白癜风微信交流群 http://www.guannews.com/yiliao/155957.html

MySQL在8.0.13版本引入函数索引的概念,引入函数索引主要解决某些场景下的查询优化问题,下面通过一个例子来解释什么是函数索引以及如何使用函数索引。

先来看一张表app_user,如下所示:

对于这张表,有这样一条SQL,在where条件createdOn字段上使用了函数month:

select*fromapp_userwheremonth(createdOn)=5;

来看一下它的执行计划,从执行计划上来看,并没有走索引。

尝试在createdOn字段上加普通索引:

altertableapp_useraddindexidx_createdon(createdOn);

再来看一下执行计划,还是没有走索引,这也是MySQL一直以来的问题,字段上使用函数,即使该字段上有索引,执行计划也不会使用该索引。

添加函数索引

altertableapp_useraddindexidx_month_createdon((month(createdOn)));

再看一下执行计划,已经可以走索引了:

添加函数索引前,SQL执行耗时5.01秒,加了函数索引后,SQL执行耗时0.29秒,性能提升很高。

函数索引实际上是通过隐藏的虚拟字段来实现的,因此对于一般字段上的限制,在函数索引上也都会有。

函数索引的限制

只有在字段上可以使用的函数才被允许构建函数索引。主键不能被包含在函数索引中。空间索引和全文索引不能包含函数索引。如果要删除的字段上有函数索引,必须先删除函数索引,才能删除字段。




转载请注明:http://www.aierlanlan.com/grrz/2726.html

  • 上一篇文章:
  •   
  • 下一篇文章: