优化体系--详解MySQL 5.7虚拟列,值得收藏

优化体系--详解MySQL 5.7虚拟列,值得收藏,第1张

我们都知道where条件如果在字段上带了函数就不会去走索引,不好优化,无意间了解到mysql一个新特性--虚拟列,专门处理这块问题的,下面一起来了解下吧~

在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默认的方式

假设有一个表,其中包含一个 date 类型的列 `SimpleDate` date

SimpleDate 是一个常用的查询字段,并需要对其执行日期函数,例如

此时的问题是 即使对 SimpleDate 建立索引,这个查询语句也无法使用,因为日期函数阻止了索引。

为了提高查询效率,通常要进行额外的 *** 作,例如新建一个字段 SimpleDate_dayofweek,存放 dayofweek(SimpleDate) 的计算结果,然后对这列创建索引,SimpleDate_dayofweek 的值需要程序写入,例如使用触发器,在 SimpleDate 有变动时更新这样查询就可以改为

这么做的好处是提高了查询性能,可以使用 SimpleDate_dayofweek 列的索引了,但又带来了其他麻烦,例如

虚拟列 Generated Columns 就是用来解决这个问题的,可以增加一个可被索引的列,但实际上并不存在于数据表中,下面用一个实验来说明下:

需求:为了实现对json数据中部分数据的索引查询,考虑用MySQL5.7中的虚拟列功能

1、创建表

2、准备数据

3、构建姓名的虚拟列

4、构建索引

5、测试是否用到索引

可以看出用了索引了

6、插入新数据

此时的表的结构由于多出了user_name这一虚拟列,再插入别的数据要注意在表后指明插入列(不能给虚拟列插入数据)

做完发现这个实验好像不是那么好理解...应该对比一下加不加虚拟列有没走索引,可能会更容易让大家理解的...后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

body{

line-height:200%

}

如何优化MySQL数据库

当MySQL数据库邂逅优化,它有好几个意思,今天我们所指的是性能优化。

我们究竟该如何对MySQL数据库进行优化呢?下面我就从MySQL对硬件的选择、Mysql的安装、my.cnf的优化、MySQL如何进行架构设计及数据切分等方面来说明这个问题。

1.服务器物理硬件的优化

1)磁盘(I/O),MySQL每一秒钟都在进行大量、复杂的查询 *** 作,对磁盘的读写量可想而知,所以推荐使用RAID1+0磁盘阵列,如果资金允许,可以选择固态硬盘做RAID1+0;

2)cpu对Mysql的影响也是不容忽视的,建议选择运算能力强悍的CPU。

2.MySQL应该采用编译安装的方式

MySQL数据库的线上环境安装,我建议采取编译安装,这样性能会较大的提升。

3.MySQL配置文件的优化

1)skip

-name

-resolve,禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间;

2)back_log

=

384,back_log指出在MySQL暂时停止响应新请求之前,短时间内的多少个请求可以被存在堆栈中,对于Linux系统而言,推荐设置小于512的整数。

3)如果key_reads太大,则应该把my.cnf中key_buffer_size变大,保持key_reads/key_read_requests至少在1/100以上,越小越好。

4.MySQL上线后根据status状态进行适当优化

1)打开慢查询日志可能会对系统性能有一点点影响,如果你的MySQL是主-从结构,可以考虑打开其中一台从服务器的慢查询日志,这样既可以监控慢查询,对系统性能影响也会很小。

2)MySQL服务器过去的最大连接数是245,没有达到服务器连接数的上限256,应该不会出现1040错误。比较理想的设置是:Max_used_connections/max_connections

*

100%

=85%

5.MySQL数据库的可扩展架构方案

1)MySQL

cluster,其特点为可用性非常高,性能非常好,但它的维护非常复杂,存在部分Bug

2)DRBD磁盘网络镜像方案,其特点为软件功能强大,数据可在底层块设备级别跨物理主机镜像,且可根据性能和可靠性要求配置不同级别的同步。

 你要的全在下面:数据库已经有4代了产品很多。

DBA课程更新内容大纲:

序章 DBA职业体系与数据库产品趋势

What is DBA?

DBA成长体系与职业方向(0-30W-50W-100W-???)

数据库发展历史,产品迭代趋势与职业学习方向

第一部分 OLTP数据库-MySQL(约1天)

MySQL基础入门

MySQL数据库简介

什么是数据库?什么是OLTP?

为什么学习MySQL?MySQL产品迭代

一二线大厂MySQL主流版本功能使用与特性介绍(5.1,5.6,5.7,8.0)**独家**

MySQL部署与管理体系

5.7,8.0版本企业规范部署,启动

MySQL管理体系讲解

MySQL产品架构分析与基础管理

MySQL基础架构解析(一条SQL是如何执行的)

MySQL启动过程

MySQL连接的生命与使命

MySQL表结构实现原理

MySQL开发应用(约1.5天)

MySQL       SQL基础应用

声明式式语言与SQL语言

SQL语言应用场景与sqlmode

MySQL开发工具选择与使用

MySQL字符串类型与字符集

MySQL语句类型介绍(DDL,DCL,DML,DQL)

SQL之查询基础

SQL之聚合与排序

SQL之数据更新

SQL之复杂查询

SQL之集合运算

MySQL       SQL高级处理与开发

函数开发与应用

存储过程,触发器,事件

表分区管理及企业级应用场景

Online DDL解析与开源生态OPS

窗口函数讲解及应用场景

MySQL JSON开发及应用

一二线大厂MySQL企业级开发规范详解**独家**

MySQL核心技术

MySQL       InnoDB索引实现原理及执行计划分析(约0.5天)

索引介绍

1.      索引的由来

2.      表和索引结构

3.      表聚簇与索引行

4.      表行与索引组织表

MySQL索引介绍

InnoDB索引B+ tree的索引设计

聚簇索引与二级索引

InnDB索引插入过程

数据类型对索引应用的使用影响

执行计划介绍及结果剖析

索引优化基础实战演练

企业级索引优化实战案例(亿万级QPS的索引优化与索引上线)**独家**

MySQL InnoDB存储引擎技术内幕与深入讲解(约1天)

Mysql存储引擎介绍与功能特性

InnoDB引擎源代码目录结构与存储引擎文件组织

InnoDB存储引擎核心架构介绍及解析

InnoDB数据存储结构

InnoDB事务详解及ACID特性解析

InnoDB 日志管理机制Undo与Redo

InnoDB事务与隔离级别

InnoDB MVCC及锁机制

MySQL日志管理与实战(0.5)

General log详解

Error log详解

企业级Binary log with Data pipeline **独家**

企业级Slowlog场景应用**独家**

MySQL备份恢复与迁移(0.5)

备份工具介绍与使用场景解析

一二线大厂过万数据节点备份策略**独家**

一二线大厂Mysqldump核心原理与企业级实战演练**独家**

一二线大厂Xtrabackup核心原理与企业级实战演练**独家**

Enterprise Backup企业级生态工具介绍与应用

MySQL主从复制深入(约1天)

主从复制简介与简单搭建

主从复制工作原理解析

主从数据一致性方案讲解(半同步,全同步)

MySQL主从复制实战

1.      延时复制

2.      过滤复制

3.      多源复制

MySQL GTID复制

企业级主从复制故障分析与处理方案

亿级QPS MySQL节点故障转移实战案例**独家**

MySQL高可用架构(1天)

一二线大厂过万集群规模高可用架构MHA+BLB企业级实战**独家**

Mycat,DBLE企业级实战

MySQL企业级优化与实战(约1天)

打造高性能MySQL

企业级MySQL参数优化实战**独家**

企业级T0级别故障案例解析**独家**

阿里云数据库产品(RDS与PolarDB)(选修二选一) (1天)

企业级RDS介绍,使用与故障案例(百度云RDS 运维DBA分享或交流)**独家**

企业级PolarDB业务场景解析(阿里团队PolarDB P7交付架构师分享或交流)**独家**

第二部分 NoSQL

Redis核心技术(2天)

Redis产品介绍与应用场景简析

Redis安装,部署,使用

Redis数据类型详解与应用

Redis集群架构讲解与实战(哨兵,cluster)

千亿级Redis集群参数优化实战**独家**

千亿级企业级Redis核心案例讲解与业务场景解析**独家**

MongoDB核心技术(2天)

MongoDB产品介绍与应用场景简析

MongoDB安装,部署及架构解析

MongoDB数据类型与运维管理

MongoDB集群架构讲解与实战

企业级MongoDB参数优化实战**独家**

BAT千万元级别故障案例分享**独家**

ES核心技术(2天)

ES产品介绍与应用场景简析

ES安装,部署及架构解析

ES日常运维管理

第三部分 NewSQL(4天)

NewSQL-TiDB(仅学此一个+MySQL至少20K起步) TUG核心成员-PingCAP官方认证讲师 **独家**

TiDB产品介绍与分布式数据库技术应用讲解

TiDB集群部署与日常管理

TiDB集群监控详解与指标应用

TiDB核心架构深入讲解与Raft协议深入浅出**独家*

企业级TiDB-DM理解与应用**独家*

1.      58同城亿级流量Mysql热迁移TiDB**独家**

2.      DM集群多源同步复制场景最佳实践(官方认证,业界唯二)**独家**

TiDB企业级业务开发最佳实践**独家**

TiFllash核心架构讲解与实战**独家**

TiDB打造HTAP实时数仓平台架构设计**独家**

Cloud TiDB(K8S上云实战)**独家**

TiDB4.0热升级5.0集群(简介:我司与Pingcap官方{开发30人,交付专家7人,项目经理4人}封闭测试与在线升级全案例解析6.23日项目完结,官方认证业界目前第一的业务场景与投入)

NewSQL-TDengine(1天 选修)

TDengine产品介绍

TDengine单机版与集群部署与管理

TDengine架构体系详解

TDengine企业级参数优化与实战

TDengine业务开发规范与业务场景实战

第四部分 企业级大规模数据库集群运维开发实战(35W+年薪提升)**独家**

数据运维产品架构设计思路(0.5天)

什么是数据运维平台

企业级数据运维平台架构解析

数据运维平台企业级原型设计实战(0.5天)

数据库运维自动化工具开发(Shell,Python)(2天5选2,下期轮换)

MySQL亿万级流量运维平台开发

Redis亿万级流量运维平台开发

ES亿万级流量运维平台开发

MongoDB亿万级流量运维平台开发

TiDB亿万级流量运维平台开发


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7443386.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-05
下一篇 2023-04-05

发表评论

登录后才能评论

评论列表(0条)

保存