结果发现与预期不一样,事实上它只查出了name=bb而没有查找出name=NULL的数据记录
那我们如何查找除了name等于aa的所有数据,只能用ISNULL函数了
但是大家可能不知道ISNULL会引起很严重的性能瓶颈 ,所以很多时候最好是在应用层面限制用户的输入,确保用户输入有效的数据再进行查询。
旧表新加字段,需要允许为NULL(避免全表数据更新 ,长期持锁导致阻塞)(这个主要是考虑之前表的改造问题)
所谓的执行计划,就是数据库根据sql语句生成的一个执行顺序。先执行什么,再执行什么。类似于我们的工作计划,先做什么,后做什么,从而使我们的效率达到最高。所以合理的执行计划,会让数据库干正确的事,提高效率。
在我们使用sql查询的时候,通常是根据sql内部的查询计划来进行的,也就是说不同的sql语句生成的查询计划不同,所以要优化sql,我们写出的sql要让数据库能够生成正确执行计划,才能提高性能;反之写出的sql语句,不容易被数据库翻译成合理的执行计划,就容易导致性能瓶颈。
例如:
这两句查询语句我们可以看出只是from关键字大小的区别,但是查询分析器会认为是不同的语句,进行两次解析。所以针对同一个查询语句,在不同的地方我们应该保持一致,大小写一致,查找字段一致。在数据库中针对查询,数据库会缓存查询计划,如果查询的时候,存在已经解析的查询计划,就会按照存在的查询计划走,这样就节省了解析生成查询计划的时间,提高了查询性能。
三.总结关于查询计划,准备细致的学习一下,明白不同查询计划具体的含义。从而可以进行对应的优化。上面讲到不对的地方,希望大家指出,一起学习,一起进步!