1. 程式人生 > >MySQL 5.7新特性之Generated Column(函數索引)

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

div 顯示 提高 mysql generate 更新 ide pan 數據庫

官網原文: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(函數索引)