gpt4 book ai didi

mysql - SQL 查询优化 - 性能问题

转载 作者:行者123 更新时间:2023-11-30 21:35:03 24 4
gpt4 key购买 nike

我有以下要优化的 SQL 查询:

select table1.tiers as col1, table1.id_item as col2 
from items table1
where (table1.tiers is not null)
and table1.tiers<>''
and table1.id_item = (select max(table2.id_item)
from items table2
where table1.tiers=table2.tiers)
and table1.n_version_item=(select max(table2.n_version_item)
from items table2
where table2.id_item=table1.id_item)

我试过这个:

select table1.tiers as col1, table1.id_item as col2 
from items table1
where (table1.tiers is not null)
and table1.tiers<> ''
and CONCAT(table1.id_item,table1.n_version_item) = (select CONCAT(max(table2.id_item),max(table2.n_version_item))
from items table2
where table2.id_item=table1.id_item
and table1.tiers=table2.tiers)

但我没有得到相同的结果。原始第一个查询返回的行数少于修改后的行数。请注意,表项有一个主键(id、版本),并且对于每对夫妇,一个层可能会受到影响。

最佳答案

当使用函数时,它会阻止使用索引,因此 CONCAT(table1.id_item,table1.n_version_item) 不会读取索引,除非它是基于函数的索引。然而,正如评论中提到的 a_horse_with_no_name 您可以使用以下内容:

select itm.tiers as col1, itm.id_item as col2 
from items itm
where itm.tiers is not null
and itm.tiers<>''
and (itm.id_item , itm.n_version_item)= (select
max(item_sub.id_item),max(item_sub.n_version_item)
from items item_sub
where itm.tiers=item_sub.tiers)

然后您必须检查查询的查询计划正在使用什么索引(您可以使用 tiers 列和 id_item 上的其他索引启动索引n_version_item )

关于mysql - SQL 查询优化 - 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54310272/

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