gpt4 book ai didi

MySql:在 select 语句中使用 @variable 花费数百倍的时间

转载 作者:行者123 更新时间:2023-11-29 03:44:21 25 4
gpt4 key购买 nike

我试图了解我在等效代码中看到的巨大性能差异。或者至少是我认为等效的代码。

我有一个表,上面有大约 1000 万条记录。它包含一个字段,其索引定义为: 美国专利号 char(8)

如果我使用 MySql 为一个变量设置一个值,它需要超过 218 秒。使用字符串文字执行完全相同的查询所需时间不到 1/4 秒。

在下面的代码中,第一个 select 语句(where USPatentNum = @pn;)需要永远,但第二个,带有文字值(其中 USPatentNum = '5288812';)几乎是即时的

mysql> select @pn := '5288812';+------------------+| @pn := '5288812' |+------------------+| 5288812          |+------------------+1 row in set (0.00 sec)mysql> select patentId, USPatentNum, grantDate from patents where USPatentNum = @pn;+----------+-------------+------------+| patentId | USPatentNum | grantDate  |+----------+-------------+------------+|   306309 | 5288812     | 1994-02-22 |+----------+-------------+------------+1 row in set (3 min 38.17 sec)mysql> select @pn;+---------+| @pn     |+---------+| 5288812 |+---------+1 row in set (0.00 sec)mysql> select patentId, USPatentNum, grantDate from patents where USPatentNum = '5288812';+----------+-------------+------------+| patentId | USPatentNum | grantDate  |+----------+-------------+------------+|   306309 | 5288812     | 1994-02-22 |+----------+-------------+------------+1 row in set (0.21 sec)

两个问题:

为什么使用@pn 会慢很多?我可以更改 select 语句以使性能相同吗?

最佳答案

在设置其值之前将@pn 声明为char(8)。

我怀疑它会像您现在所做的那样是一个 varchar。如果是这样,性能损失是因为 MySql 无法将索引与您的变量匹配。

关于MySql:在 select 语句中使用 @variable 花费数百倍的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8396487/

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