MySQL80函数索引及使用案例

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/cyrz/7201.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了