暂无图片
mysql 8有物化视图吗?
我来答
分享
暂无图片 匿名用户
mysql 8有物化视图吗?

mysql 8有物化视图吗?

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
张sir

没有

暂无图片 评论
暂无图片 有用 0
打赏 0
YangQi

Mysql本来不支持视图的。但是在5.0以上的版本,支持了视图功能,但是可惜的是不提供物化视图,但是这也难不住咱们,自己动手丰衣足食。

在一次sql优化中,一个select count(*)语句因数据量实在太大,已经无法从简单的索引进行优化了,在同事的推荐下考虑到了物化视图

物化视图是相对于视图而言的,但是两者实际上并没有什么关系就如java/javaScript一样

首先mysql的视图不是一种物化视图,他相当于一个虚拟表,本身并不存储数据,当sql在操作视图时所有数据都是从其他表中查询出来的。带来的问题是使用视图并不能将常用数据分离出来,优化查询速度,且操作视图的很多命令和普通标一样,这会导致在业务中无法通过sql区分表和视图,使代码变得复杂。

视图是简化设计,清晰编码的东西,他并不是提高性能的,他的存在只会降低性能(如一个视图7个表关联,另一个视图8个表,程序员不知道,觉得很方便,把两个视图关联再做一个视图,那就惨了),他的存在主要在设计上的方便性

实现视图的方法有两种,分别为合并算法和临时表算法,合并算法是指查询视图是将视图定义的sql合并到查询sql中,比如create view v1 as select * from user where sex = m;当我们要查询视图时,mysql会将select id,name from v1转化成select id,name from user where sex= m; 临时表算法是将视图查出来的数据保存到一个临时表中,查询的时候查这个临时表。不管是合并算法和临时算法,都会给数据库带来额外的开销,且如果使用临时表后会使mysql的优化变得很困难,比如索引,而且视图还引入了一些其他的问题,是的其背后的逻辑非常复杂。

当然,视图在某些情况下还是可以帮助提升性能的,单视图的性能很难预测,且在mysql的优化器中,视图的代码执行路径也完全不同,无法直观预测其性能。

物化视图是是查询结果的预运算,物化视图的结果一般存储于表中。物化视图用于需要对查询立即做出响应,而又需要耗费长时间获得结果。物化视图必须能快速更新。它去介于对更新频率和内容的准确性的要求。一般来说,物化视图能够在一定时间内及时更新。

暂无图片 评论
暂无图片 有用 1
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
用二进制包安装mysql的时候,是先创建配置文件再运行mysql_install_db,还是反过来?
回答 1
已采纳
先创建配置文件,再在初始化的时候使用配置文件进行初始化./scripts/mysqlinstalldbdefaultsfile/etc/mysql/my3306.cn
MYSQL的主从延迟,你怎么解决?
回答 1
已采纳
主从复制分了五个步骤进行:步骤一:主库的更新事件(update、insert、delete)被写到binlog步骤二:从库发起连接,连接到主库。步骤三:此时主库创建一个binlogdumpthread
mysql大表加字段,8核16G,7千万的表,怎么加比较快
回答 2
已采纳
新建同结构表,加了字段再导入数据,insertinto。。。。select。。。where,插入的时候用where拆分数据,分多个insert插入  ,就看机器的IO性能了&nbs
table_io_waits_summary_by_index_usage 包含innodb逻辑IO读 和 物理IO读吗?
回答 2
已采纳
包含,逻辑读的fetchlatencycount较高,物理读较低,因为一次查询可能只需要一次物理读操作。
OGG实时同步当源端字段值为1时,目标端该字段改为0 ,当源端字段为0或空值时,目标端该字段改为1,这个好通过OGG参数去实现吗?
回答 5
已采纳
上一个回复使用char字段,发现null无法进行转换,如下测试表字段类型转换为varchar2,使用上面大佬说的两种参数,可以参照如下。使用EVALSQL>desctest1NameNull?T
MySQL 安装目录不是默认有两个日志文件 ib_logfile0 和 ib_logfile1 吗?
回答 2
应该说是受innodblogfilesingroup参数控制,默认值是2,所以有了iblogfile0,不过最少是2。 
MySQL怎样自动清除过期的二进制日志?
回答 1
已采纳
可用以下方法设置二进制日志的到期时间,到期后系统会自动清除过期的二进制日志文件。1)在配置文件my.ini的[mysqld]组下加入下述变量声明,并重新启动服务器来设置二进制日志的到期天数。&nbsp
mysql有记录所有binlog的视图或表么?
回答 3
查了下官网,说这个表是MySQLClusterVersion7.4andlater之后集群版本才会使用到;我的是5.6.25单机版查询该表返回空集。
在MySQL 8.0.20版本中,下列关于SELECT子句中OUTFILE的位置正确的是?
回答 2
ABC
MySQL如何根据查询出来的两三个字段去修改对应的值?
回答 1
能不能具体说一下字段的样子,这样才好说SQL怎么写?