下面我们看一下如何创建一个functional index:

    接下来我们继续看一下functional index的效果:

    从上面的例子中我们可以看到查询中使用了functional索引 idx1来加速查询。

    下面我们从源码来看一下MySQL functional index的实现过程。

    上面的流程图是MySQL创建functional index的一个基本流程。我们重点看一下add_functional_index_to_create_list这个函数的处理过程。

    上面我们看到了源码中是如何创建一个functional index。那么接下来我们继续看一下MySQL是如何为查询寻找合适的functional index的。

    就拿上面的例子看一下调用堆栈:

    上面的堆栈可以看到优化器调用了substitute_gc这个函数,这个函数就可以将WHERE,GROUP_BY 以及ORDER BY中的相关表达式替换为隐式的generated column,进而可以让优化器来选择functional index。我们再来研究一下substitute_gc这个函数的源码。