程序员离不开与数据库打交道,而能写一手好的SQL也能直接反应一个程序员是否合格,下面介绍几个养成写好SQL的习惯
1.写完SQL先explain查看执行计划
这一点非常重要,因为在生产环境中,往往数据量会比较大,当你写完一个sql并没有去explain它的时候,你不能完全确定它是否命中了你的索引?它的查询效率会不会很低?会不会成为一个慢sql?只有当你去explain这条语句的时候,你才会知道它的执行情况
用法:在你的sql前添加explain
例子:
explain select * from student where name="张三"
explain的结果若有不懂的,可以到分析SQL语句性能必备知识(explain命令详解)_李文良的博客-CSDN博客这篇博文下了解
2.设计表时尽量把所有列定义为NOT NULL
1.NOT NULL 列更节省空间:NULL列需要一个额外字节作为判断是否为NULL的标志位
2.NULL列需要注意空指针问题:查询出的数据列若为NULL,计算比较时需要注意空指针
3.减少不必要的字段返回
往往一般的需要都不太需要用到全部的字段,所有在了清楚需求后,将所需要的字段返回,避免select *
1.可以节省资源,减少网络开销
2.可能用电脑覆盖索引,减少回表,提高查询效率
4.尽量用varchar代替char(特定情况)
区别:
1.char表示定长,长度固定,varchar表示边长,即长度可变,char类型如果插入的长度小于定于长度时,则用空格填充,varchar小于定义长度时,则按实际长度存储,插入多长存储多长
2.存储的容量不同:对char来说,最多能存放的字符个数255,和编码无关。而varchar最多能存放65532个字符
性能:
因为char长度固定,char的存取速度还是要比varchar要快,方便程序的存储与查找;但是char也为此付出的空间的代价,因为长度固定,所有回占据多余的空间,是一种空间换取时间的做法,varchar则刚好相反,以时间换空间
总结:
char查询速度稍快,但浪费一定的空间,varchar则相对节省空间,查询效率稍低
5.如果修改/更新数据过多,考虑循环批次进行
例子:
反例:
delete from student where age > 18 limit 100000
正例:
for each(100)
{
delete from student where age > 18 limit 1000
}