MySQL 虚拟列和虚拟索引的实现

 更新时间:2024年08月22日 10:00:15   作者:Q z1997  
虚拟列是MySQL 5.7开始引入的新特性,本文主要介绍了MySQL 虚拟列和虚拟索引的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

是什么

Mysql 5.7 中推出了一个非常实用的功能 虚拟列 Generated (Virtual) Columns

在MySQL 5.7中,支持两种Generated Column,即Virtual Generated Column和Stored Generated Column,前者只将Generated Column保存在数据字典中(表的元数据),并不会将这一列数据持久化到磁盘上;后者会将Generated Column持久化到磁盘上,而不是每次读取的时候计算所得。很明显,后者存放了可以通过已有数据计算而得的数据,需要更多的磁盘空间,与Virtual Column相比并没有优势,因此,MySQL 5.7中,不指定Generated Column的类型,默认是Virtual Column。

如果需要Stored Generated Golumn的话,可能在Virtual Generated Column上建立索引更加合适

综上,一般情况下,都使用Virtual Generated Column,这也是MySQL默认的方式

能干嘛

能对 where 条件 上使用函数等原因使索引失效 如使用函数 就可以对这个 字段和函数建立一个虚拟类和虚拟索引提高效率

怎么用

比如是 sys_user 表中 create_time

在这里插入图片描述

他是一个datetime 类型的
假设我们有一个查询

SELECT dayofweek(create_time) from  sys_user WHERE dayofweek(create_time) = 1 

结果

在这里插入图片描述

执行计划

在这里插入图片描述

如果我们为create_time 字段 建立索引 这个查询语句 仍然无法使用索引 因为 函数 阻止了索引 (这里就不实验了啊 有兴趣可以自己试试 肯定没用)

建立一个虚拟列

在这里插入图片描述

ALTER TABLE `qzboot`.`sys_user` 
ADD COLUMN `create_time_dayofweek` tinyint(4)  GENERATED ALWAYS AS (dayofweek(create_time)) VIRTUAL ;

新建一个虚拟索引

在这里插入图片描述

ALTER TABLE `qzboot`.`sys_user` 
ADD INDEX `test`(`create_time_dayofweek`) USING BTREE COMMENT '虚拟索引';
SELECT dayofweek(create_time) from  sys_user WHERE dayofweek(create_time) = 1

#  sql 改造
SELECT create_time_dayofweek from  sys_user WHERE create_time_dayofweek = 1 

结果

在这里插入图片描述

执行计划

在这里插入图片描述

虚拟列不存储在数据行中,但虚拟列的元数据信息会存在于相关系统表中,对虚拟列的添加或者删除只会涉及这些系统表,不会导致数据表的重建,所以效率很高

到此这篇关于MySQL 虚拟列和虚拟索引的实现的文章就介绍到这了,更多相关MySQL 虚拟列和虚拟索引内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 减少mysql主从数据同步延迟问题的详解

    减少mysql主从数据同步延迟问题的详解

    本篇文章是对减少mysql主从数据同步延迟的问题进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • MySQL中一条update语句是如何执行的

    MySQL中一条update语句是如何执行的

    这篇文章主要给大家介绍了关于MySQL中一条update语句是如何执行的相关资料,由于update涉及到数据的修改,所以很容易推断,update语句比select语句会更复杂一些,需要的朋友可以参考下
    2022-03-03
  • 详解mysql中字符串转为数字的三种方法

    详解mysql中字符串转为数字的三种方法

    这篇文章主要为大家详细介绍了mysql中字符串转为数字的三种常用方法,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • Windows10下mysql 8.0.12解压版安装配置方法图文教程

    Windows10下mysql 8.0.12解压版安装配置方法图文教程

    这篇文章主要为大家详细介绍了Windows10下mysql 8.0.12解压版安装方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • MySQL日期格式化yyyy-mm-dd详解(DATE_FORMAT()函数)

    MySQL日期格式化yyyy-mm-dd详解(DATE_FORMAT()函数)

    MySQL提供了很多功能强大、方便易用的函数,在进行数据库管理以及数据的查询和操作时,帮助我们提高对数据库的管理效率,下面这篇文章主要给大家介绍了关于MySQL日期格式化yyyy-mm-dd(DATE_FORMAT()函数)的相关资料,需要的朋友可以参考下
    2023-01-01
  • MySQL 管理

    MySQL 管理

    MySQL 管理...
    2006-12-12
  • mysql 行列转换的示例代码

    mysql 行列转换的示例代码

    这篇文章主要介绍了mysql 行列转换的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • MySQL 中  DATE_FORMAT() 函数的使用及应用场景

    MySQL 中  DATE_FORMAT() 函数的使用及应用场景

    DATE_FORMAT() 是 MySQL 中的一个内置函数,用于格式化日期和时间数据,它可以根据指定的格式字符串来展示日期和时间,使得数据更容易阅读和理解,本文档将详细介绍 DATE_FORMAT() 函数的使用方法及其常见应用场景,感兴趣的朋友一起看看吧
    2024-12-12
  • MySQL datetime类型与时间、日期格式字符串大小比较的方法

    MySQL datetime类型与时间、日期格式字符串大小比较的方法

    这篇文章主要介绍了MySQL datetime类型与时间、日期格式字符串大小比较,本文使用的是mysql8.0.27版本,其他版本自测一下,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-11-11
  • mysql 5.7.18 winx64安装配置方法图文教程

    mysql 5.7.18 winx64安装配置方法图文教程

    这篇文章主要为大家详细介绍了windows7下mysql 5.7.18 winx64安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04

最新评论