首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • MySQL 虚拟详解

    在 MySQL 中,虚拟(也称为生成或计算)是从一个或多个其他派生的,但不实际存储在数据库表中。 使用 MySQL 虚拟就非常简单了,MySQL 会在查询时自动计算并返回结果。创建虚拟要创建一个虚拟,你可以在创建表时或者在现有表上使用 ALTER TABLE 语句。 注意,MySQL 5.7 及之前的版本不支持虚拟,但从 MySQL 8.0 开始支持生成(包括虚拟)。 在现有表上添加虚拟-- 假设原来的表达式是 (column1 + column2)-- 新的表达式是 (column1 * column2) -- 首先删除旧的虚拟(如果它实际上是一个真实的物理, 这意味着生成的值会被存储在磁盘上,类似于普通。但是,它们仍然只在查询时计算。VIRTUAL:虚拟生成的。这类不会在磁盘上存储其值,而是在查询时根据基础动态计算得出。

    43710编辑于 2025-11-22
  • 来自专栏数据和云

    实战演练:通过伪虚拟实现SQL优化

    一.通过伪虚拟实现SQL优化 慢 SQL 文本如下: ? SQL 执行时长达 38S,获取 361 条数据结果返回。 SQL 执行计划如下: ? 虚拟实现SQL优化 分析 SQL 可知,SQL 的性能瓶颈在于 a.minute = DATE_FORMAT(b.create_time, '%H:%i') 两表之间的关联关系,SQL 无法通过表之间的关联关系直接驱动 MySQL 5.7 增加了虚拟的新功能,可以类似的实现 Oracle 函数索引。由此思路,month_show_data 增加虚拟 vr_time,并添加虚拟索引 idx_vr_time。 伪的引入,可以强制 SQL 改变表之间的关联顺序,获得想要的执行计划。将 SQL 改写成如下方式: ? SQL 在 0.004s 之后即返回查询结果。 执行计划如下: ? MySQL 5.7 虚拟的引入可以在不改动业务实现的情况下,实现函数索引类似的需求。基于代价的优化器存在缺陷,并不能每次都会选出最优的执行计划。

    2.3K31发布于 2018-07-27
  • 来自专栏bisal的个人杂货铺

    函数索引构成虚拟隐藏

    从回复看,SYS_NC00004$就是原始列名,只是他是个虚拟隐藏的,并且数据默认值是“原始”,即函数表达式作用的, The "construction rule" is the original qualified_col_name from user_tab_cols where table_name='PRODUCT'; P.S. user_tab_cols和user_tab_columns相比,有些未做过滤 $的字段,数据类型是RAW的,只有他含默认值,带引号的"SUPPLIER_ID",应该就是对SUPPLIER_ID加了函数,HIDDEN_COLUMN和VIRTUAL_COLUMN都是YES,他是一个虚拟隐藏

    1.5K20发布于 2019-08-18
  • 来自专栏用户8950297的专栏

    PQ基础-数据转换4:删、移、添加索引

    本文通过一个例子,综合体现常用的删、移、添加索引操作方法。数据样式及要求如下: 要求: 1. 删除状态; 2. 将货币移动到合同总金额的后面; 3. 添加以1为起始的索引。 Step-1:获取数据 Step-2:删除 Step-3:移动 Step-4:添加以1为开始的索引 Step-5:上载数据

    2.9K40发布于 2021-08-31
  • 来自专栏菜鸟成长学习笔记

    探索MySQL 5.7 虚拟 (virtual columns)

    Column,即Virtual Generated Column和Stored Generated Column,前者只将Generated Column保存在数据字典中(表的元数据),并不会将这一数据持久化到磁盘上 UNIQUE [KEY] ] [ [PRIMARY] KEY ] [ NOT NULL ] [ COMMENT <text> ] 应用: 为了实现对json数据中部分数据的索引查询,可以使用MySQL5.7中的虚拟 构建姓名的虚拟 alter table user add user_name varchar(20) generated always as (data->'$.name'); ? 可以看出用了索引了 此时的表的结构由于多出了user_name这一虚拟,再插入别的数据要注意在表后指明插入列(不能给虚拟插入数据) insert into user(uid,data) values

    2.5K20发布于 2020-05-19
  • 来自专栏性能与架构

    Mysql 5.7 的‘虚拟’是做什么?

    Mysql 5.7 中推出了一个非常实用的功能 虚拟 Generated (Virtual) Columns 对于它的用途,我们通过一个场景来说明 假设有一个表,其中包含一个 date 类型的 ` 虚拟 Generated Columns 就是用来解决这个问题的,可以增加一个可被索引的,但实际上并不存在于数据表中 对于上面的例子,可以对 SimpleDate 创建一个虚拟,然后对虚拟创建索引 `SimpleDate_dayofweek` tinyint(4) GENERATED ALWAYS AS (dayofweek(SimpleDate)) VIRTUAL, PRIMARY KEY 查询语句可以正常使用索引 通过虚拟的方式,即满足了查询性能,也不会有之前那个解决方案的潜在麻烦 虚拟不存储在数据行中,但虚拟的元数据信息会存在于相关系统表中,对虚拟的添加或者删除只会涉及这些系统表 ,不会导致数据表的重建,所以效率很高 需要注意,不能建立虚拟和真实的联合索引

    2.4K60发布于 2018-04-03
  • 来自专栏MySQLBeginner

    使用 MySQL 5.7 虚拟提高查询效率

    在这篇博客中,我们将看看如何使用MySQL 5.7的虚拟来提高查询性能。 说明 大约两年前,我发表了一个在MySQL5.7版本上关于虚拟的文章。从那时开始,它成为MySQL5.7发行版当中,我最喜欢的一个功能点。 原因很简单:在虚拟的帮助下,我们可以创建间接索引(fine-grained indexes),可以显著提高查询性能。 解决方案 好消息是,在MySQL 5.7中我们有虚拟。所以我们可以在“CONCAT(verb, ‘ – ‘, replace(url,’.xml’,”))”之上创建一个虚拟。 ; 对上面的虚拟创建索引。

    5K11发布于 2019-02-27
  • 来自专栏MySQLBeginner

    使用MySQL 5.7虚拟提高查询效率

    说明 大约两年前,我发表了一个在MySQL5.7版本上关于虚拟的文章。从那时开始,它成为MySQL5.7发行版当中,我最喜欢的一个功能点。 原因很简单:在虚拟的帮助下,我们可以创建间接索引(fine-grained indexes),可以显著提高查询性能。 解决方案 好消息是,在MySQL 5.7中我们有虚拟。所以我们可以在“CONCAT(verb, ‘ – ‘, replace(url,’.xml’,”))”之上创建一个虚拟。 - ', replace(url,'.xml',''))))) VIRTUAL; alter table ApiLog add key (verb_url_hash); 所以我们在这里做的是: 声明虚拟 ; 对上面的虚拟创建索引。

    2.8K20发布于 2019-04-24
  • 来自专栏全栈程序员必看

    Oracle 11g新特性虚拟分区

    能够用虚拟处理。 partition P1 VALUES (1), partition P2 VALUES (2), partition P3 VALUES (3), partition P4 VALUES (4), partition P5 VALUES (5), partition P6 VALUES (6), partition P7 VALUES ( partition P1 VALUES (1), partition P2 VALUES (2), partition P3 VALUES (3), partition P4 VALUES (4), partition P5 VALUES (5), partition P6 VALUES (6), partition P7 VALUES (

    1.3K20编辑于 2022-08-27
  • 来自专栏全栈程序员必看

    不允许对虚拟执行 UPDATE 操作

    结果查询到的还有表自己生成的隐藏  虚拟,结果进行新增操作时候出现了以上问题, 后面改为  SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME

    1.4K30发布于 2021-04-07
  • 来自专栏智慧零售领域相关技术应用

    MySQL虚拟在电商场景下的应用

    引言 有时候大家在做电商商品推广的时候会涉及到一些json串的存储,同时在检索的时候会通过json中里面的段就进行相关检索,这样的话就可能会引入虚拟这个概念。 下面用一个简单的例子来介绍一下虚拟的使用。 JSON 文档被转换为允许对文档元素进行快速读取访问的内部格式 虚拟的实践 数据准备 确认MySQL版本 查看mysql 版本必须在5.7.8及以上,查看命令参考: show variables like auto_increment comment '自增ID', data_json JSON, primary key (id) )ENGINE = InnoDB DEFAULT CHARSET = utf8mb4; data_json.commission_amount 查询commission_amount大于30的总数,发现效果并不理想,耗时1.48s,效果图如下: image.png 那么我们是不是可以考虑把commission_amount作为一个虚拟加上索引这样会不会效果好一点呢

    2.8K94编辑于 2021-12-24
  • 来自专栏数据核心

    深入探索MySQL的虚拟:发展、原理与应用

    为了解决这个问题,MySQL 5.7版本引入了虚拟(也称为生成)的概念。虚拟允许开发者在表中定义一个基于其他的计算公式,而不需要实际存储这些计算的结果。 当查询虚拟时,MySQL会根据公式动态计算其值。 在后续的版本中,MySQL进一步增强了虚拟的功能,允许开发者选择是否将虚拟的结果实际存储在磁盘上(即存储),以提高查询性能。 二、虚拟的原理 虚拟的工作原理相对简单。当你在表中定义一个虚拟时,你需要为其提供一个表达式,该表达式基于表中的其他。每当查询虚拟时,MySQL都会根据该表达式动态计算其值。 三、虚拟的用法 当你定义一个虚拟时,你需要使用GENERATED ALWAYS AS语句来指定该的值是如何从其他列计算得出的。 我们创建一个表,其中包含一个JSON和一个基于JSON中某个值的虚拟。然后,我们为这个虚拟创建索引以提高查询性能。

    2K10编辑于 2024-03-21
  • 来自专栏用户8950297的专栏

    怎么将多行多的数据变成一4个解法。

    - 问题 - 怎么将这个多行多的数据 变成一? - 1 - 不需保持原排序 选中所有 逆透视,一步搞定 - 2 - 保持原排序:操作法一 思路直接,为保排序,操作麻烦 2.1 添加索引 2.2 替换null值,避免逆透视时行丢失,后续无法排序 2.3 逆透视其他 2.4 再添加索引 2.5 对索引取模(取模时输入参数为源表的数,如3) 2.6 修改公式中的取模参数,使能适应增加数的动态变化 2.7 再排序并删 2.8 筛选掉原替换null的行 - 3 - 保持排序:操作法二 先转置,行标丢失,新列名可排序 有时候,换个思路,问题简单很多 3.1 转置 3.2 添加索引 3.3 逆透视 3.4 删 - 4 - 公式一步法 用Table.ToColumns把表分成 用List.Combine将多追加成一 用List.Select去除其中的null值

    6.6K20发布于 2021-08-30
  • 来自专栏朝雨忆轻尘

    Java虚拟机(七):JVM调优案

    当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因此一般建议堆的最大值设置为可用内存的最大值的80%。 参数详解  -server 启用jdk 的 server 版; -Xms java虚拟机初始化时的最小内存; -Xmx java虚拟机可使用的最大内存; -XX:PermSize 它提供了一个可视界面,用于查看 Java 虚拟机上运行的基于 Java 技术的程序的详细信息。

    90130发布于 2019-06-19
  • 来自专栏菩提树下的杨过

    mysql虚拟(Generated Columns)及JSON字段类型的使用

    mysql 5.7中有很多新的特性,但平时可能很少用到,这里列举2个实用的功能:虚拟及json字段类型 一、先创建一个测试表: drop table if exists t_people; CREATE CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), PRIMARY KEY (id)); 注:这里profile是一个json类型的字段,另db编码采用utf8mb4 四、虚拟 alter table t_people add second_name varchar(3) generated always as(substring(name,2,1)) stored ; 创建了一个虚拟second_name,其值是substring(name,2,1),即name中的第2个字,最后的stored表示,数据写入时这个的值就会计算(详情可参考最后的参考链接) 注:虚拟并不是真正的 分析执行计划,可以看到前缀索引“ix_name”生效了,但还有优化空间,仍然可以借助虚拟,创建2个虚拟phone、first_name,并创建联合索引。

    5.6K20发布于 2020-04-01
  • 来自专栏太阳影的学习记录

    UE4 隐藏虚拟摇杆

    最近发现没有中文资料提到怎么隐藏和显示指定的虚拟摇杆,即Touch Interface,所以这里记录一下。

    2.3K30发布于 2021-10-15
  • 来自专栏爱可生开源社区

    故障分析 | MySQL 8.0 中多字段虚拟引发的宕机

    query Query (7f20ec0f4a78): SELECT a FROM t WHERE ('session' MEMBER OF (a) ) assertion failure 2023- ubuntu/opt/mysql/8.0.27/bin/mysqld(my_print_stacktrace(unsigned char const*, unsigned long)+0x2e) [0x1f7f4ae /mysql-8.0.27/sql/signal_handler.cc:171 #4 <signal handler called> #5 __pthread_kill_implementation 函数 trx_undo_rec_get_multi_value 会从 Undo Log record 中构建多字段虚拟 Multi-Value Virtual Column。 https://github.com/mysql/mysql-server/commit/05c1f53be7cb8d9b527eb28e809284b0722c4106 本文关键字:#MySQL# #虚拟

    1.6K12编辑于 2024-10-29
  • 来自专栏数据库干货铺

    一文搞懂MySQL虚拟用法、选型与避坑

    做MySQL开发的同学,有没有遇到过这样的场景: 查询时反复写相同的计算逻辑(比如订单单价×数量算小计、手机号截取后4位),不仅代码冗余,还可能因为每个人写的逻辑不一致导致bug;想给这些计算结果建索引加速查询 今天就结合实操示例介绍虚拟的两种类型(STORED/VIRTUAL)、用法、差异,还有新手最容易踩的坑。 一、什么是MySQL虚拟虚拟,顾名思义,就是:该的值不是手动插入,而是由表内其他列计算生成的虚拟依赖其他表的 虚拟的计算逻辑,只能依赖「本表的其他」,不能使用子查询、存储过程,也不能引用其他表的,否则会报错。 3. 计算逻辑是确定性的,且需要重复使用,可以考虑用虚拟。且优先选VIRTUAL,特殊场景用STORED;避开非确定性函数的坑;如非必要,不要强行用虚拟。 你在项目中用过虚拟吗?

    26910编辑于 2026-03-31
  • 来自专栏有关SQL

    SQL 求 3 异值的 4 种方法

    问题的原型,大概是这样的:一张表,有三数据,表示了同一个维度的数据。 DEFAULT NULL, `crc64_user_id_3` bigint unsigned DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; 其中,user_id, app_user_id, global_user_id 这三,是互相包含的。 但其中有一,数据最全。现在,需要找到这一,单抽出来做维度。 粗粗地看,很简单,就是个排列组合的问题,俩俩对比,用 6 组,就能求解出来。求解的最佳方法,有两个要求:快和准。 于是我又想到了两个方法:count 和 checksum 聚合 要对比这三有没有不同,最简单的就是计算三的总数。

    4K10编辑于 2022-03-31
  • 来自专栏python3

    python高级(4)—— 虚拟环境安装

    虚拟环境 什么是虚拟环境 对电脑稍微有点常识的朋友相信都玩过,比如VMware,virtualbox,或者你用电脑端的模拟器玩手机端的游戏也是一样,其实就是一个假的空间,在Python这里,虚拟环境就是虚拟的开发环境 创建虚拟环境: 创建虚拟环境非常简单,通过以下命令就可以创建了: 先选好你准备作为虚拟环境的目录 virtualenv  虚拟环境的名字 如果你的电脑安装了有Python2Python3共存,且各个版本都有安装虚拟环境 进入虚拟环境:进入到虚拟环境的Scripts文件夹中,然后执行activate。 *nix进入虚拟环境:source /path/to/virtualenv/bin/activate 一旦你进入到了这个虚拟环境中,你安装包,卸载包都是在这个虚拟环境中,不会影响到外面的环境。 ? 退出虚拟环境: 退出虚拟环境很简单,通过一个命令就可以完成:deactivate。 ? 创建虚拟环境的时候指定Python解释器: 在电脑的环境变量中,一般是不会去更改一些环境变量的顺序的。

    95920发布于 2020-01-17
领券