你需要了解的SQL知识
来源:未知 责任编辑:责任编辑 发表时间:2014-05-26 11:01 点击:次
你需要了解的SQL知识
对SQL的了解,其实已经有些年头,但一直的应用都是建表,各种范式也是知道的。使用视图,存储过程,建立索引,触发器,使用游标,自建函数,这些东东感觉对数据库的了解还算可以,日常的工作需要都可以处理。但伴随着项目的深入和理解的增加,发现所知道的竟是SQL知识的皮毛,接下来将对最近一段时间对数据库的操作和认识,记录成档,以便日后查阅,同时也供需要的朋友参看。
建表知识
对于建表大家都不陌生,这里主要说明一下几点注意实现:
1、大数据字段最好剥离出单独的表,以便影响性能
2、使用varchar,代替char,这是因为varchar会动态分配长度,char指定为20,即时你存储字符“1”,它依然是20的长度 www.2cto.com
3、给表建立主键,看到好多表没主键,这在查询和索引定义上将有一定的影响
4、避免表字段运行为null,如果不知道添加什么值,建议设置默认值,特别int类型,比如默认值为0,在索引查询上,效率立显。
5、建立索引,聚集索引则意味着数据的物理存储顺序,最好在唯一的,非空的字段上建立,其它索引也不是越多越好,索引在查询上优势显著,在频繁更新数据的字段上建立聚集索引,后果很严重,插入更新相当忙。
6、组合索引和单索引的建立,要考虑查询实际和具体模式.
SQL语句
熟悉SQL的人,都会写SQL语句,但到底效率如何,十万以下的数据量,根本没任何区别,但一些基础性的东西,还是得点滴做起
1、where语句的书写,当有多个查询条件时,sql是按照从右往左的顺序进行执行,也就是说写在最后的条件会最早被执行,这就意味着过滤数据量最多的
添加应该写在最后,这样才能在性能上达到最优
2、join语句,如果A表1000w,B表30条记录,则应该是A join B,sql执行会以B为准去关联A,性能显著
3、表变量和临时表 ,这个问题可能有些同学稍陌生,所谓表变量就是declare @dd table类似这样的声明,而临时表多见#tt,这样的格式这二者在sql内是区别对待的表变量功能有限,使用完自动释放,临时表计划就是有数据表的大部分功能,使用完毕后需要删除,在数据库tempdb也有对应的操作记录,使用时应该综合考虑。 www.2cto.com
4、注意聚合函数,is null,<>等的使用,当我们在这样使用的时候,可能习以为常,在大数据量处理上,本有的索引将不再被使用,而变成全表扫描,So ga等吧,性能大大的慢,如where len(studentId)=0,本来在studentid上的索引变成全表扫描了。
5、使用exist代替not in,这个大家都知道,但还是希望大家注意下
6、select AA,BB,代替Select * ,这是大部分程序员的通病,总觉得无所谓,其实select * 在sql执行时还是要遍历到具体的字段名进行读取,即使我们要使用全部列,也推荐使用把各个字段都罗列处理,而非使用*
7、top n 和order by 你了解多少?我一直觉得where条件查询完后order by在此基础上进行排序,其实错了,在有top n和order by一块使用时,order by竟然是全表扫描,具体可以通过查询计划验证。
作者 Wendy 's
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>