2011-03-31 70 views
1

也许有人可以帮我解决一个问题。当我在脚本中使用变量(@ZZ)时,我的查询挂起并且没有完成。如果我使用直接文本而不是变量,则查询正常运行。有人能告诉我这个变量有什么问题吗?当我使用变量而不是直接文本时,MYSQL脚本不运行

SET @ZZ = 'asf:urhkgsdmbn.nbc,rtwyu:oneci_Xjhsdu_Hfduerksfgas20110322112751:462516432'; 
SET @XX = NULL; 
USE some_schema; 
SELECT SQL_NO_CACHE `hl`, @XX:=`id` FROM `doc` WHERE `uid` = @ZZ LIMIT 0,1; 
+0

它可能与此无关,但uid = NULL不能按预期工作。你需要做'uid IS NULL'。 – 2011-03-31 16:16:47

+0

这并没有帮助。不过谢谢你的想法。 – 2011-04-01 08:39:18

+0

我在代码中看不到任何内在错误。除非你能够创建一个能重现问题的小测试用例,并将其发布到这里供我们测试,否则我想这将很难调试:( – 2011-04-01 09:55:25

回答

0

只是一个盲目的猜测,直到你得到更好的东西... WHERE子句是针对每一行进行评估,并且你有相当多的行。如果它包含一个文字,那么SQL优化器可能会安排这样的事情,即表达式只被计算一次,也许它可以更好地使用索引。但是,如果它包含一个会话变量,它可能需要为每一行重复读取该变量,因为它可能已被更改。

: - ?

+0

最后一次更新从我:)刚刚发现,该查询在控制台中的执行速度要快得多在MySQL Workbench中。在控制台中一切都很好,很快 – 2011-04-01 12:14:25

相关问题