报表sql心得一篇
最近很忙,有个项目马上要招标,一个项目等着工,若干琐碎的事进行中,有一段时间没更新些有营养的东西了
说个题外话先。
今天开机准备把昨天的东西debug一下,很习惯地右键项目的启动文件开始debug,机器突然蓝屏重启。开始以为又是内存在偷偷超频,检查了一下bios,发现没什么问题,也没怎么在意,隧重新开启vs2008继续debug。非常吃惊的发现debug程序的时候机器继续蓝屏,而且两次都是在debug刚启动,连浏览器都没打开的时候,这就有点意思了。
仔细回想一下刚才做的事情,比较引起我注意的是刚才点击了暴风影音的头条新闻看了一下,但是打开新闻的浏览器是ie(我的实际默认浏览器是360browser),会不会是这个地方造成debug启动默认浏览器错乱导致蓝屏?于是打开360browswer将其重新设置为默认ie浏览器,然后开始debug,问题解决。
这次教训告诉我们,出现问题后要仔细分析问题的周边因素,有时候一些细节问题导致的后果往往是很严重的,但是解决起来却很简单,重在发现。
----华丽的分割线----
进入正题。
这个星期光忙活做报表了,连着做了N个。做报表差不多快3年了,从reportservice2000,到2005,再到现在的2008(本人没有接触过crystal reports...),微软的报表工具是越来越牛X了,配合数据库的一些新特性和优化的性能,尽管报表趋于复杂化,但是等待时间还是在能够后接受的范围内,并且开发愈发灵活。
不过光靠工具和数据库本身是不够的,作为报表的灵魂----sql的性能直接决定报表的速度。总结一下报表sql的经验先:
1.确定你在sql引用到的表都是你需要的(很多人喜欢图方便,把之前成熟的sql直接拷贝来用,却没有根据当前需求的需要把不需要用到的表相关的sql去掉,平白增加的查询的复杂度)
2.确定使用jion去实现所有的表连接(事实证明inner jion是效率最高的,不过left join是使用的最频繁的,效率最烂的是笛卡尔积,除了一些特殊场合,笛卡尔积基本已经无视。文尾为会举一个用到笛卡尔积的例子,证明笛卡尔积还是个很优秀的算法思想)
3.如果在where中用到in (select xx from yy)类似的语法,要注意算法平衡:如果主对象很大而查询对象所在的表比较小时,这种做法相对效率较高(如果在查询的列上有index更好),如果主对象较小而查询对象所在表较大时,inner join是更好的选择
4.当一个结果集来自若干个表的运算时,如果有必要的话,可以先将较大的表计算出一个中间结果储存在表变量(本人比较喜欢表变量,事实上在单比查
相关文档:
经典SQL语句
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1
//a必须是已经存在的表,但是b可以不存在,当b不存在时,系统会自己创建表b,该方法只会复制表的结构,而不会复制表的数据
法二:select top 0 * int ......
(1) Connect to the Analysis server, select the database which we want it to be automatically processed. Right click on this database, choose ‘Process’:
(2) In the opening ‘Process database’ form, click the ‘Script Action ......
刚刚安装的数据库系统,按照默认安装的话,很可能在进行远程连接时报错,通常是错误:"在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) "搜MSDN,上面有一片机器翻译的文章,是在让人难以明白,现在 ......
改善SQL语句
很多人不知道SQL语句在sql server中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解。比如:
select * from table1 where name=''zhangsan'' and tID > 10000
和执行:
select * from table1 where tID > 10000 and name=''zhangsan''
一些人不知道以上两条语句的执行效率是否一 ......
数据类型
类型
描 述
bit
整型
bit 数据类型是整型,其值只能是0、1或空值。这种数据类型用于存储只有两种可能值的数据,如Yes 或No、True 或Fa lse 、On 或Off
int
整型
int 数据类型可以存储从- 231(-2147483648)到231 (2147483 ......