程序员便利贴
分类: 数据库 | 评论

SQL语句众多,常用的滚瓜烂熟,可不常用的,你就不一定记得了,这里放一些SQL语句,保留字什么的,以备查阅。 SELECT –从数据库表中检索数据行和列 INSERT –向数据库表添加新数据行 DELETE –从数据库表中删除数据行 UPDATE –更新数据库表中的数据 –SQL数据定义 CREATE TABLE –创建一个数据库表 DROP TABLE –从数据库中删除表 ALTER TABLE –修改数据库表结构 CREATE VIEW –创建一个视图 DROP VIEW –从数据库中删除视图 CREATE INDEX –为数据库表创建一个索引 DROP INDEX –从数据库中删除索引 CREATE PROCEDURE –创建一个存储过程 DROP PROCEDURE –从数据库中删除存储过程 CREATE TRIGGER –创建一个触发器 DROP TRIGGER –从数据库中删除触发器 CREATE SCHEMA –向数据库添加一个新模式 DROP SCHEMA –从数据库中删除一个模式 CREATE DOMAIN –创建一个数据值域 ALTER DOMAIN –改变域定义 [...]

分类: 数据库 | 评论

1、首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生欀如一条SQL语句如果用来从一个10万条记录的表中查1条记录,那查询优化器会选择“索引查找”方式,如果该表进行了归档,当前只剩下5000条记录了,那查询优化器就会改变方案,采用 “全表扫描”方式。 可见,执行计划并不是固定的,它是“个性化的”。产生一个正确的“执行计划”有两点很重要: (1)    SQL语句是否清晰地告诉查询优化器它想干什么? (2)    查询优化器得到的数据库统计信息是否是最新的、正确的? 2、统一SQL语句的写法 对于以下两句SQL语句,程序员认为是相同的,数据库查询优化器认为是不同的。 select * from dual select * From dual 其实就是大小写不同,查询分析器就认为是两句不同的SQL语句,必须进行两次解析。生成2个执行计划。 所以作为程序员,应该保证相同的查询语句在任何地方都一致,多一个空格都不行! 3、不要把SQL语句写得太复杂 我经常看到,从数据库中捕捉到的一条SQL语句打印出来有2张A4纸这么长。一般来说这么复杂的语句通常都是有问题的。我拿着这2页长的SQL语句去请教原作者,结果他说时间太长,他一时也看不懂了。可想而知,连原作者都有可能看糊涂的SQL语句,数据库也一样会看糊涂。 一般,将一个Select语句的结果作为子集,然后从该子集中再进行查询,这种一层嵌套语句还是比较常见的,但是根据经验,超过3层嵌套,查询优化器就很容易给出错误的执行计划。因为它被绕晕了。像这种类似人工智能的东西,终究比人的分辨力要差些,如果人都看晕了,我可以保证数据库也会晕的。 另外,执行计划是可以被重用的,越简单的SQL语句被重用的可能性越高。而复杂的SQL语句只要有一个字符发生变化就必须重新解析,然后再把这一大堆垃圾塞在内存里。可想而知,数据库的效率会何等低下。 4、使用“临时表”暂存中间结果 简化SQL语句的重要方法就是采用临时表暂存中间结果,但是,临时表的好处远远不止这些,将临时结果暂存在临时表,后面的查询就在tempdb中了,这可以避免程序中多次扫描主表,也大大减少了程序执行中“共享锁”阻塞“更新锁”,减少了阻塞,提高了并发性能。 5、 OLTP系统SQL语句必须采用绑定变量  select * from orderheader where changetime > ’2010-10-20 00:00:01′ select * from orderheader where changetime > ’2010-09-22 00:00:01′ 以上两句语句,查询优化器认为是不同的SQL语句,需要解析两次。 如果采用绑定变量 select * from orderheader where changetime > [...]

分类: 数据库 | 评论

今天需要做一个统计查询,关联很多表,用稍微复杂的SQL语句可以实现,如下: select nn.GXDWMC 汉字标题1, nn.TYMC 汉字标题2,jbsl 汉字标题3,fcsl汉字标题4 ,GSL汉字标题5,Lsl汉字标题6 from Table0103 nn, (select b.GXDWMC as GXDWMC,b.TYMC as TYMC,count(a.TYMC) jbsl from TABLE0901 a,Table0103 b where b.TYMC=a.SSZMC group by  b.GXDWMC ,b.TYMC ) aa, (select b.GXDWMC as GXDWMC,b.TYMC as TYMC,count(c.TYMC) fcsl from Table0103 b ,TABLE0912 c where  b.TYMC=c.SSZMC group by  b.GXDWMC ,b.TYMC ) bb, (select c.GXDWMC as GXDWMC,c.TYMC as TYMC,count(c.TYMC) GSL [...]