【发布时间】:2012-01-13 20:28:12
【问题描述】:
我试图了解我在等效代码中看到的巨大性能差异。或者至少我认为是等效的代码。
我有一张表,上面有大约 1000 万条记录。它包含一个字段,其索引定义为: USPatentNum char(8)
如果我使用 MySql 将变量设置为一个值,则需要超过 218 秒。使用字符串文字进行完全相同的查询只需不到 1/4 秒。
在下面的代码中,第一个 select 语句(使用 where USPatentNum = @pn;)需要永远,但第二个,使用文字值 (其中 USPatentNum = '5288812';)几乎是即时的
mysql> 选择@pn := '5288812'; +------------------+ | @pn := '5288812' | +------------------+ | 5288812 | +------------------+ 一组中的 1 行(0.00 秒) mysql> 从其中 USPatentNum = @pn 的专利中选择专利 ID、USPatentNum、grantDate; +------------+-------------+------------+ |专利号 |美国专利号 |授予日期 | +------------+-------------+------------+ | 306309 | 5288812 | 1994-02-22 | +------------+-------------+------------+ 一组 1 行(3 分 38.17 秒) mysql>选择@pn; +----------+ | @pn | +----------+ | 5288812 | +----------+ 一组中的 1 行(0.00 秒) mysql> 从 USPatentNum = '5288812' 的专利中选择专利 ID、USPatentNum、grantDate; +------------+-------------+------------+ |专利号 |美国专利号 |授予日期 | +------------+-------------+------------+ | 306309 | 5288812 | 1994-02-22 | +------------+-------------+------------+ 一组中的 1 行(0.21 秒)两个问题:
为什么使用@pn 这么慢? 我可以更改 select 语句以使性能相同吗?
【问题讨论】:
-
是的,原来的问题陈述说它被索引了。
-
不要聪明,回答我问的一半。现在,再说一遍,数据类型?
-
也在原始声明中。 USPatentNum char(8)
-
我也遇到了同样的问题。 This answered it
标签: mysql performance select