强制MySQL在另一个之前评估一个条件

时间:2013-08-19 17:37:11

标签: mysql sql locking

重写此查询的最佳方法是:

SELECT myField 
FROM myPrefix.myTable 
WHERE myField2 IN (?) AND 
    GET_LOCK(CONCAT('action:',myField3), 0) = 1 
LIMIT 1

myField2有一个索引。

现在,MySQL首先评估IN操作(因为它知道它上面有索引),然后管道GET_LOCK操作。

我如何确保始终如此,并且不会在MySQL升级/等之间切换相反的方式。

AKA,我的问题是,我怎样才能确保GET_LOCK永远不会被评估。我想将这一切保留在一个查询中。

1 个答案:

答案 0 :(得分:0)

这取决于正在使用的优化器类型。

Does order of where clauses matter in SQL

我不确定以下解决方案是否已经过优化,但如果您只想在检查'myField2'之后执行'GET_LOCK',那么您可以试试这个:

SELECT t.myField 
FROM (SELECT * FROM myPrefix.myTable  WHERE myField2 IN (?) ) t
WHERE GET_LOCK(CONCAT('action:',t.myField3), 0) = 1 
LIMIT 1