今天看高性能mysql中的6.7.9的自定义变量。
其中以一句话让我有点懵逼,那就是:使用用户自定义变量的一个最常见的问题就是没有注意到在赋值和读取变量的时候可能是在不同的阶段。
之后有一个对这句话的解释就是:这些出乎意料的结果可以在EXPLAIN语句中找到,注意看在Extra列中的'Using where', 'Using temporara'或者'Using filesort'。
说实话,反正我是没据explain中的extra列看懂赋值和读取变量到底是个什么顺序。
我猜测的顺序是先where,再orderby,再select。
我觉得MySQL语句选取结果的过程如下:
- 通过where条件筛选表中的数据行
- 根据orderby的列进行排序
- 通过select选取特定的列
那么就自己测试吧!测试用的是sakila数据库(MySQL官方提供的),直接百度就可以安装和使用。
主要的应该就三个,那就是select, where, order by。
当在select和where的两个语句同时进行赋值的时候
set @rownum:=0;
select actor_Id, first_name, @rownum:=@rownum+1 as cnt
from actor
where (@rownum: