首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在UNION ALL视图上减慢速度

问在UNION ALL视图上减慢速度
EN

Database Administration用户
提问于 2017-07-26 09:04:58
回答 1查看 3.3K关注 0票数 4

这是我的DB体系结构:

  • 一个3.000.000记录产品(内存)表,必须由所有数据库共享
  • X(例如1)记录每个数据库的特定产品表。
  • 每个数据库中必须将两者结合在一起的视图(以显示通用和特定的产品)

以下是我的测试:

  • 当我只在内存表上创建视图时,将视图all_products创建为选择f1,f2.在shareddb.products上,对该视图的查询SELECT * FROM 1000非常快速(0.9秒)
  • 当我创建UNION视图(这是我的目标)创建视图all_products作为SELECT f1,f2.从shareddb.products联合选择f1,f2.从产品中,相同查询的速度急剧下降(39秒)。

MYSQL在这种情况下是如何工作的?为了加快速度,我必须如何设置视图?

我使用5.7.14版本。

查询解释返回:

id“:1”select_type“:主”表“”空“分区”“空”类型“空"possible_keys”空“键"key_len”空"ref“空行”空“过滤”空“额外,匹配const表中的行”\x“"id”:2 "select_type":UNION "table“llx_product_local分区”空“类型”所有"possible_keys“空”键"key_len“空"ref”空行“100”过滤“额外”空。

EN

回答 1

Database Administration用户

发布于 2022-06-18 07:13:14

在这种情况下MySQL是如何工作的?

通常,临时表中的MySQL 实现全部结果 of UNION。这解释了为什么查询速度比预期慢得多。

在MySQL 5.7.3中添加的改进允许一些简单的联合跳过物化。这包括这样一种情况,即联合显示为带有LIMIT子句的顶级语句。遗憾的是,当封装在视图中时,它并不适用。

db<>fiddle在线演示

我必须如何设置视图才能加快速度?

即使在MySQL 8中,您也无法完全避免这个问题,优化器只是不具备处理这种情况的能力。

视图中的每个联合部分都有硬编码限制,对于不同的公共限制可能有不同的视图,或者使用模拟黑客中的一个参数化视图。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/181828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档