首页 > 数据库 >MySQL入门学习-设计优化.生成列

MySQL入门学习-设计优化.生成列

时间:2024-07-31 10:59:31浏览次数:11  
标签:存储 入门 INT column1 price 生成 MySQL 优化 column2

       在 MySQL 中,生成列(Generated Column)是一种特殊的列类型,它的值是根据其他列的值或表达式计算得到的。生成列可以分为两种类型:存储生成列(Stored Generated Column)和虚拟生成列(Virtual Generated Column)。

一、特点和使用方法:

1. 存储生成列:

    - 特点:

       实际存储在表中的值是根据指定的表达式计算得到的。这会增加数据插入和更新的时间成本,但在查询时可以直接使用该列的值,提高查询性能。

    - 使用方法:

        CREATE TABLE your_table (
            id INT PRIMARY KEY,
            column1 INT,
            column2 INT,
            generated_column1 INT GENERATED ALWAYS AS (column1 + column2) STORED
        );


    - 在上述示例中,'generated_column1' 是一个存储生成列,其值是 'column1' 和 'column2' 的和。

2. 虚拟生成列:

    - 特点:

       值是在查询时根据表达式动态计算的,不会实际存储在表中。这可以节省存储空间,但在查询时需要额外的计算成本。

    - 使用方法:

        CREATE TABLE your_table (
            id INT PRIMARY KEY,
            column1 INT,
            column2 INT,
            generated_column2 INT GENERATED ALWAYS AS (column1 * column2) VIRTUAL
        );


    - 在上述示例中,'generated_column2' 是一个虚拟生成列,其值是 'column1' 和 'column2' 的乘积。

二、与其他设计优化的比较:

       1. 与普通列相比,生成列可以根据其他列的值自动计算,减少了数据冗余和数据不一致的风险。
       2. 与索引相比,生成列可以根据复杂的表达式计算值,而索引通常只能基于单个列或几个列的简单组合。
       3. 与视图相比,生成列的值是实际存储在表中的,查询时不需要额外的连接操作,性能可能更好。

三、高级应用:

       1. 可以用于数据验证和约束,例如可以创建一个生成列来检查某个值是否在特定范围内。
       2. 可以用于提高查询性能,特别是在需要频繁使用某个表达式计算结果的情况下。

       以下是一个完整的示例,展示了如何创建和使用生成列:

-- 创建表,包含存储生成列和虚拟生成列
CREATE TABLE products (
    id INT PRIMARY KEY AUTO_INCREMENT,
    price DECIMAL(10, 2),
    quantity INT,
    total_price DECIMAL(10, 2) GENERATED ALWAYS AS (price * quantity) STORED,
    discount_price DECIMAL(10, 2) GENERATED ALWAYS AS (price * 0.9) VIRTUAL
);

-- 插入数据
INSERT INTO products (price, quantity)
VALUES (10.00, 5), (20.00, 3), (30.00, 2);

-- 查询数据,包括生成列的值
SELECT id, price, quantity, total_price, discount_price
FROM products;

       在上述示例中,我们创建了一个名为 'products' 的表,其中包含了价格('price')、数量('quantity')、总价('total_price',存储生成列)和折扣价('discount_price',虚拟生成列)。然后,我们插入了一些数据,并查询了所有列的值,包括生成列的值。
(文章为作者在学习MySQL过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)

标签:存储,入门,INT,column1,price,生成,MySQL,优化,column2
From: https://blog.csdn.net/weixin_69763181/article/details/140746078

相关文章

  • go-zero中api从入门到大师
    api文件的学习在go-zero中,api文件可以说是整个项目最重要的一个文件,学好它,写好他,项目相当于已经完成了一半!接下来,我会详细说明.api是什么,以及怎么写先给个案例:typeLoginRequest{ UserNamestring`json:"userName"` Passwordstring`json:"password"`}typeUser......
  • 全网最适合入门的面向对象编程教程:28 类和对象的Python实现-Python编程原则、哲学和规
    全网最适合入门的面向对象编程教程:28类和对象的Python实现-Python编程原则、哲学和规范大汇总摘要:本文主要介绍了在使用Python进行面向对象编程时,Python异常处理的原则-“请求谅解,而非许可”,以及软件设计和Python的编程原则,同时介绍了PEP8规范。原文链接:FreakStud......
  • mysql数据类型
    002-MySQL数据类型 ==========================================数据类型 ==========================================1、数字类型:  整数类型      字节     范围(有符号)     范围(unsigned)     用途  TINYINT     ......
  • MySQL正则表达式
    004-正则表达式MySQL利用REGEXP命令提供给用户扩展的正则表达式功能,熟悉掌握REGEXP的功能可以使模式匹配工作事半功倍。表达式  说明^   字符串开始处进行匹配(以“后面字符串”开始匹配字符)$   字符串结尾处进行匹配(以“前面字符串”结尾匹配字符).   ......
  • Java基础入门(第一章)
    1Java是什么:Java是一门非常优秀的计算机编程语言Java英文翻译为印尼爪哇岛,地名,因盛产咖啡而闻名,漫漫长夜、唯有咖啡陪伴程序员1991年诞生,最初叫Oak(橡树),1995年改名为Java,2000年前后,成为世界上最流行的编程语言,过去二十多年中首屈一指。语言,人与人交流沟通的表达方式。......
  • MySQL的HINT用法
     一、mysql常用的hint 对于经常使用oracle的朋友可能知道,oracle的hint功能种类很多,对于优化sql语句提供了很多方法。同样,在mysql里,也有类似的hint功能。下面介绍一些常用的。  强制索引FORCEINDEX SELECT*FROMTABLE1FORCEINDEX(FIELD1)…以上的SQL语句只使......
  • 【C++】入门基础
     1.命名空间1.1namespace的价值在C/C++中,变量、函数和后⾯要学到的类都是⼤量存在的,这些变量、函数和类的名称将都存在于全局作⽤域中,可能会导致很多冲突。使⽤命名空间的⽬的是对标识符的名称进⾏本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的......
  • 生成MySQL-oracle-SQL server数据字典(附Python代码)
    生成数据字典,早年写的,请注意新的版本变化。(1)MySQL元数据SQLUSEinformation_schema;#取出库和表。select  TABLE_SCHEMAAS'数据库名称',  TABLE_NAMEAS'表名',  TABLE_TYPEAS'表类型',  ROW_FORMATAS'行格式',  ENGINEAS'数据库引擎',  TABL......
  • mysql工具简介
    MySQL常用工具mysqladmin  创建删除数据库,授权等。mysqlbinlog 从二进制日志读取语句的工具,mysqlcheck  检查,修复,分析以及优化表的表维护程序mysqldump  将MySQL数据库转储到一个文件。mysqlimport 使用loaddatainfile将文本文件导入相关表的客户程序。mysq......
  • mysql测试库-emp-dept
    003-MySQL版本测试库-emp-dept初始化DROPTABLEIFEXISTS`bonus`;CREATETABLE`bonus`( `ename`varchar(10)DEFAULTNULL, `job`varchar(9)DEFAULTNULL, `sal`int(11)DEFAULTNULL, `comm`int(11)DEFAULTNULL)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;--......