MySQL 5.7新特性之Generated Column(函數索引)
阿新 • • 發佈:2018-01-31
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(函數索引)