谓词求值的次序是不确定的,可以随时间的改变而改变,并由优化器决定。不要假定任何事情会按一定的次序发生。如果你那么做,随着时间的推移,你的应用程序可能会出现一些看起来非常奇怪的错误。看以下的例子:建立一个表,输入一些数据。当X= a’时,第二列的数据“Y”是一个数值,当X= b’时,“Y”不是数字。 现在根据这个表运行一个查询:查找满足x= a ,y=1的行。 呦,没有成功。在这种情况下,数据库首先执行Y=1,当找到Y= X 的行后,很显然,它不能将 X 转换为一个数字,所以失败了。而下面的程序将给出不同的结果: 使用不同的优化器模式,成功了!为什么?优化器说:“嘿,检查x= a 要比检查y=1来得快,因为在y=1中有一个将y从字符变为数字的转换。所以,我先检查x= a ,然后再检查y=1。”