gpt4 book ai didi

mysql - MySQL中列的重新计算

转载 作者:行者123 更新时间:2023-11-29 08:04:31 26 4
gpt4 key购买 nike

美好的一天。不知道是否已经问过,我看了但没有找到任何东西,我什至不确定“重新计算是正确的术语。

我有一个查询,其中一列由其他列的演算组成,并分配了一个别名:

SELECT col1 LIKE CONCAT(col2,"some_key%") as pivot1 ... others columns ... 
WHERE col1 LIKE CONCAT(col2,"some_key%") = 1

目前我无法对当前数据库处理程序层限制使用HAVING。问题是,微积分列 col1 LIKE CONCAT(col2,"some_key") 是否会在 select 和 where 部分执行两次,造成双倍资源损失?在一个大表中,还有其他列计算为别名,然后在 where 子句中检查,因此性能是相关的。

如果是这样,我们可以开始对旧的继承数据库处理程序进行一些编辑,否则我们会选择暂时继续按原样使用它,而不是花时间对其进行现代化改造。

提前感谢您提出任何问题

最佳答案

您无需执行两次。 WHERE 子句意味着该表达式的值始终为 1,因此您可以将其硬编码到 SELECT 子句中。

SELECT 1 as pivot1, ...
FROM ...
WHERE col1 LIKE CONCAT(col2,"some_key%")

测试比较运算符的结果时,您也不需要 = 1。它本身可以简单地用作 bool 表达式。

我相信MySQL确实会重复计算。我做了以下测试:

select sum(username like '%x') from t_users where username like '%x' or 1=1;

select sum(1) from t_users where username like '%x' or 1=1;

第一个查询比第二个查询花费的时间大约长 12%。

请注意,如果您确实重复 SELECT 子句中的表达式,则不会对表中的所有行执行两次。它只会对 JOINWHERE 子句选择的结果集中的行执行两次。因此,它对性能的影响可能不像您预期​​的那么严重。例如我测试过:

select sum(username like '%z') from t_users where username like  '%z' ;

select sum(1) from t_users where username like '%z';

这些花费了大约相同的时间,因为 WHERE 子句将结果集减少到表的大约 1%。

关于mysql - MySQL中列的重新计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23001229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com