gpt4 book ai didi

mysql - 为什么当前的数据库查询优化技术不支持计算列的优化?

转载 作者:行者123 更新时间:2023-11-29 18:38:43 25 4
gpt4 key购买 nike

对于下面的查询,我们知道目前关系型数据库系统,无论是MYSQL、SQL Server还是Oracle,都不支持索引查找查询,即使在column1上建立了索引。

select * from table1 where column1+123=1000

我的问题是为什么目前的 QO 技术不做优化,比如将上面的 SQL 语句转换为下面的 SQL 语句?

select * from table1 where column1=877

最佳答案

一方面,这个问题会引起这里不鼓励的观点。

另一方面,有一个实际原因导致不应进行优化,但它需要比您提供的用例更复杂的用例。

给定:

应用程序中的 SQL 语句

select * from table1 where column1 = :val1 and column2 = :val2
select * from table1 where column1 = :val1
select * from table1 where column2 = :val2

表中的索引

I1 on (column1)
I2 on (column2)

第一个语句的执行计划不是最优的(对于 RDBMS 的某些版本),因此选择了非常昂贵的 AND-EQUAL 行源操作 (RSO),其中子 RSO 是两个候选索引的索引范围扫描。但是,除非客户提供了可以证明问题的数据,否则您不会发现问题。

第二条语句使用column1索引,通常性能良好。

第三条语句使用column2索引,通常性能良好。

第一个语句的性能非常差,因此我们联系了供应商。供应商确定了多种解决方案,然后决定修改查询:

 select * from table1 where column1+0 = :val1 and column2 = :val2

或者当列是 varchar2 时像这样:

 select * from table1 where column1||'' = :val1 and column2 = :val2

排除次优执行计划。该技术对于既定目标非常有效,并且我已经看到多个软件供应商使用它。

如果 RDBMS 公司很久以前就采用了您所描述的自动优化,那么软件供应商和开发人员就可以少使用一种手动 SQL 优化工具。

关于mysql - 为什么当前的数据库查询优化技术不支持计算列的优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45070983/

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