MySQL 5.7新特性之Generated Column(函数索引)

Posted 一叶扁舟_test

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 5.7新特性之Generated Column(函数索引)相关的知识,希望对你有一定的参考价值。

官网原文:https://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.html

注:以下是我参考官网文档和结合自己的理解写的,因为英文水平有限,不排除有错误,欢迎纠错。

一、说明

  Generated Column是MySQL 5.7引入的新特性,所谓Cenerated Column,就是数据库中这一列由其他列计算而得。在MySQL 5.7中,支持两种Generated Column,即Virtual Generated Column(虚拟生成的列)Stored Generated Column(存储生成的列),二者含义如下:

  •   1、Virtual Generated Column(虚拟生成的列):不存储该列值,即并不会将这一列数据持久化到磁盘上,而是当读取该行时,触发触发器对该列进行计算显示。InnoDB支持Virtual Generated Column,具体参考“https://dev.mysql.com/doc/refman/5.7/en/create-table-secondary-indexes.html”
  •   2、Stored Generated Column(存储生成的列): 存储该列值,即该列值在插入或更新行时进行计算和存储。所以相对于Virtual Column列需要更多的磁盘空间,与Virtual Column相比并没有优势。因此,MySQL 5.7中,不指定Generated Column的类型,默认是Virtual Column
  • 在表中允许Virtual Column和Stored Column的混合使用
  • 提高效率:由于mysql在普通索引上加函数会造成索引失效,造成查询性能下降,Generated Column(函数索引)刚好可以解决这个问题,可以在Generated Column加上索引来提高效率

 二、创建规则

1 col_name data_type [GENERATED ALWAYS] AS (expression)
2   [VIRTUAL | STORED] [NOT NULL | NULL]
3   [UNIQUE [KEY]] [[PRIMARY] KEY]
4   [COMMENT ‘string‘]

 三、使用

 针对Generated Column使用,参考官网案例来进行说明:

 

CREATE TABLE triangle (
  sidea DOUBLE,
  sideb DOUBLE,
  sidec DOUBLE AS (SQRT(sidea * sidea + sideb * sideb))
);
INSERT INTO triangle (sidea, sideb) VALUES(1,1),(3,4),(6,8);

 

  

 



以上是关于MySQL 5.7新特性之Generated Column(函数索引)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 5.7新特性之generated column

MySQL 5.7 新特性之增强半同步复制

MySQL——MySQL 5.7新特性

MySQL 5.7 新特性详解

MySQL 5.7 新特性大全和未来展望

MySQL 5.7 GA 新特性