博文

目前显示的是 四月, 2011的博文

果然视图的效率永远是跟不上表的啊

工作上的原因开始接触Oracle了...虽然Oracle在几年前就玩过了,但是基本上都是最基本得操作了,简单的存储过程,简单的触发器..... 现在到了新的公司,碰到了诡异的问题是一个针对地区的统计问题. 一个省下面有许多的市,需要统计这些市出现的次数,以及外省的数字. 本来这个是一个非常容易搞定的问题,但是现在却碰到了麻烦,那就是这个地址字段里面存放的并不是地区的代码而是地区的文本....orz 于是现在如果想要统计这种要么通过不断的LIKE来做Count(ID),然后UNION ALL形成最终结果了...但是仅仅面对20万左右的数据量,这条语句的执行时间居然长达3分钟以上. 然后想了一个办法,首先将所有符合条件的数据全部用视图的方式UNION ALL起来,添加一个虚拟的地区代码字段,然后再对这个视图做Group BY操作. 可惜,就算是这样做了,也仅仅只是把时间提升到了2分钟10秒左右. 没办法,只有想办法改动表结构了...我是一直不怎么想改动这个表结构的,因为不是我设计的,而且本身设计的很糟糕... 程序也是刚刚接手,都没办法整理,所以如果变动了表结构,就一定要通过触发器来解决后续的问题了... 不过抱着尝试的心态,添加了一个字段,然后简单的用LIKE来更新这个字段. 然后再用Group By来生成报表.这时惊人的效率提升终于出现了..只用了5秒. 但是只有20万的数据量的话,用5秒似乎也显得太多了一点 ,估计是没有使用到索引... 于是添加索引,以Where语句的字段和Group By后面的字段添加联合索引.再做测试... 速度终于提升到0.15秒左右了...正常范围内了(虽然赶不上MySQL的效率了,当然,这也是必然的)... 接下来就是触发器了...以前只是写过一个自增ID字段的触发器而已,而且还是网上直接抄下来的... 不过现在这个触发器也很简单就是了...所需要实现的就是在Insert字段的时候根据既有的字段中的某一个值(所在地区)得取值来确定我添加的那个字段的取值.并且将更新了的数据插入进去就可以了. 但是不得不说,我根本就忘了触发器怎么写了....orz 不过最后还是搞定了就是了...之前忘掉了使用for each row,导致一直都报告ORA-04082错误,添加那个字段后终于搞定...

SlikSVN安装小记

之前的个人项目开发因为总是觉得项目量并不是很大,所以很大程度上无视了版本控制的存在。 毕竟就我一个人,怎么改都无所谓的。 但是在开发过程中还是出现了项目文件丢失、想要恢复到之前的版本却找不到备份等种种问题。 看来就算是一个人单干也还是需要版本控制配合啊。 于是想到了用SVN,至于为什么要选他,自然是因为PHP官方团队管理PHP的源代码也是用了SVN了…… 到SVN的官方玩站  http://subversion.apache.org/ 然后我选择了SlikSVN,因为似乎只有它提供了64bit的版本。官方网站: http://www.sliksvn.com/en/download 然后很正常的下载安装,安装过程中选择自定义安装,然后记得把Server端装上去,否则它默认就给安装一个客户端。 默不吭声的它就安装完了。可以说完全就是一个RAR打包之后也是同样的效果。自己到安装目录下找到/bin/svnadmin.exe,到CMD下运行它。 代码类似这个 c:\Program Files\SlikSvn\bin>svnadmin create D:\dev\popgo 意思就是建立一个工作区了,我的工作区在D盘下 然后该目录下就出现了一大堆生成的文件了,首先是编辑conf目录下的svnserve.conf了 里面所有的项目都是被注释掉的,消除以下行的注释 anon-access = none auth-access = write password-db = passwd authz-db = authz realm = My First Repository 这几项都没啥难度,指定用户的权限,指定Password文件的位置,指定权限指派文件的位置。 接下来编辑passwd文件,自己在后面建立一个就可以了,或者你可以用默认的那个 sally = sallyssecret 前面的代表用户名,等号后面是密码 然后编辑authz文件,[aliases]是代表用户的别名,如果需要定义的话是类似这样的 [aliases] sa=sally 不过使用别名的时候就需要用&符号放在前面了...