如果将 Temp Table 算法重命名为 Unscalable 算法就好了。也许那时它会在 View 定义中看到这一点时向开发人员提供更多警告 - 类似地,当它在解释结果中说使用临时表时。在大多数情况下只是一个开玩笑的请求,但实际上对于不知情的人来说可能是灾难性的。
问题在于,如果您在 View 定义中做了某些事情,它就会从合理的合并算法切换到无可救药的低效临时表算法。如果涉及的数据很小,这没什么大不了的。但随着数据的增长,这是会降低性能的因素之一。
如何最好地处理这个问题?自 5 年前实现 View 以来,这一直是一个问题,我不知道有任何修复它的努力。其他流行的数据库系统是否存在此类问题?
在下面的链接中向下滚动到它讨论何时无法使用合并算法的位置,以查看导致 MySQL 退化为使用可怕的临时表算法的原因: http://mysql2.mirrors-r-us.net/doc/refman/5.1/en/create-view.html
这有什么不好的?临时表算法的工作原理如下:
所以你可以想象当你有一个 5000 万行的表和一个像这样的 View 定义时,这里涉及到 hell - 愚蠢的例子,但你明白了:
create view last_order_date as
select max(order_date) last_date, username from orders group by username;
然后用户可能会写:
select * from last_order_date where username = 'joejoe22'
2小时后返回结果...
那么如何最好地处理这种情况呢?
最佳答案
编写一个返回结果集的存储过程。
DELIMITER $$
CREATE PROCEDURE DoViewMyData(Param1 INT)
BEGIN
SELECT
field1 as x
,field2 as y
FROM table
WHERE field1 = Param1;
END$$
DELIMITER ;
现在调用程序,它会返回里面select语句的结果集。
CALL DoViewMyData(1);
OUTPUT:
+------+-------------------+
| x | y |
+------+-------------------+
| 1 | balabablabla |
+------+-------------------+
只做CALL,不做SELECT CALL那是行不通的。
您也可以不在另一个 SELECT 语句中使用 CALL。
您当然可以指示存储过程将输出放在临时表中,而不是在另一个 SELECT 中使用它。
存储过程将使用正确的索引,并且您的选择语句已经准备就绪。
此外,您可以在前面的语句中准备内容,加快您的时间关键型查询。
不过你是对的: MySQL Views 确实很烂
关于mysql - 处理 View 的 MySQL 临时表算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2931522/
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c
目前,Itembelongs_toCompany和has_manyItemVariants。我正在尝试使用嵌套的fields_for通过Item表单添加ItemVariant字段,但是使用:item_variants不显示该表单。只有当我使用单数时才会显示。我检查了我的关联,它们似乎是正确的,这可能与嵌套在公司下的项目有关,还是我遗漏了其他东西?提前致谢。注意:下面的代码片段中省略了不相关的代码。编辑:不知道这是否相关,但我正在使用CanCan进行身份验证。routes.rbresources:companiesdoresources:itemsenditem.rbclassItemi
目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
除了可访问性标准不鼓励使用这一事实指向当前页面的链接,我应该怎么做重构以下View代码?#navigation%ul.tabbed-ifcurrent_page?(new_profile_path)%li{:class=>"current_page_item"}=link_tot("new_profile"),new_profile_path-else%li=link_tot("new_profile"),new_profile_path-ifcurrent_page?(profiles_path)%li{:class=>"current_page_item"}=link_tot("p
我对图像处理完全陌生。我对JPEG内部是什么以及它是如何工作一无所知。我想知道,是否可以在某处找到执行以下简单操作的ruby代码:打开jpeg文件。遍历每个像素并将其颜色设置为fx绿色。将结果写入另一个文件。我对如何使用ruby-vips库实现这一点特别感兴趣https://github.com/ender672/ruby-vips我的目标-学习如何使用ruby-vips执行基本的图像处理操作(Gamma校正、亮度、色调……)任何指向比“helloworld”更复杂的工作示例的链接——比如ruby-vips的github页面上的链接,我们将不胜感激!如果有ruby-