MySQL-sql语句

mysql varchar类型字段=0取出的是什么

1.表字段applyStatus设计为varchar型,在查询语句中条件写的是写的是applyStatus=0 而不是applyStatus='0',结果中查出来一堆applyStatus为null的数据

偶然发现一个奇葩问题,varchar类型字段=0取出的东西什么都有,有中文,有数字字母组合,但是却不是全集,这是怎么回事?
当比较数字和varchar时,mysql会把varchar转换为数字,首字符为数字0的,或者其他字符的都会转换为0,varchar类型字段=0 只能排除首字符为非零数字的字符串

2.order by 与索引
ORDER BY 通常会有两种实现方法,一个是利用有序索引自动实现,也就是说利用有序索引的有序性就不再另做排序操作了。另一个是把结果选好之后再排序。

order by的字段不在where条件不在select中     有排序操作 

order by的字段不在where条件但在select中     有排序操作 

order by的字段在where条件但不在select中     无排序操作 

order by的字段在where条件但不在select中(倒序)     无排序操作

结论: 

当order by 字段出现在where条件中时,才会利用索引而无需排序操作。其他情况,order by不会出现排序操作。 

一条SQL实际上可以分为三步。

1.得到数据

2.处理数据 

3.返回处理后的数据 

比如上面的这条语句select sid from zhuyuehua.student where sid < 50000 and id < 50000 order by id desc

第一步:根据where条件和统计信息生成执行计划,得到数据。 

第二步:将得到的数据排序。 

当执行处理数据(order by)时,数据库会先查看第一步的执行计划,看order by 的字段是否在执行计划中利用了索引。如果是,则可以利用索引顺序而直接取得已经排好序的数据。如果不是,则排序操作。 

第三步:返回排序后的数据。 

原文地址:https://www.cnblogs.com/hongyedeboke/p/9372632.html