找回密码
 欢迎注册
搜索
热搜: 活动 交友 discuz
查看: 3025|回复: 3

Cache的另一大独特技术-位图索引技术

[复制链接]
发表于 2006-5-23 11:11:52 | 显示全部楼层 |阅读模式
<p><a href="http://www.intersystems.cn/cache/test/mapping.html" target="_blank">http://www.intersystems.cn/cache/test/mapping.html</a></p><p>欢迎下载,安装,然后测试。自己体验一下数据迁移到cache数据库后是否可以变快。</p>
发表于 2006-6-26 17:39:12 | 显示全部楼层

Cache的另一大独特技术-位图索引技术

<p>效果不错.</p><p>这段代码中,实现了计数统计功能,如果用SQL count(*) 也能有这样的速度吗?希望介绍更多关于bitmap方面的内容。</p><p>ClassMethod CountNum(Indexname As %String, Columname As %String) As %Integer<br />{</p><p> if Indexname="IndexAge" <br /> {<br />  s tempString="^Signup.PersonnelI('"_Indexname_"',"_Columname_","<br /> } else<br /> {<br />  s tempString="^Signup.PersonnelI('"_Indexname_"',' "_Columname_"',"<br /> }<br /> s Com1="s %ifexist=$data("_tempString_"1))"<br /> s Com1=$TRANSLATE(Com1,"'","""")<br /> Xecute Com1<br /> if %ifexist=0 <br /> {<br />  quit 0<br /> }</p><p> s Num=0<br /> s i=1<br /> d<br /> {<br />  s Com1="s %tempnum=$bitcount("_tempString_i_"),1)"<br />  s Com1=$TRANSLATE(Com1,"'","""")<br />  Xecute Com1<br />  s Num= Num+%tempnum<br />  s i=i+1<br />  s Com1="s %ifexist=$data("_tempString_i_"))"<br />  s Com1=$TRANSLATE(Com1,"'","""")<br />  Xecute Com1<br /> } while %ifexist'=0<br /> quit Num<br />}<br /></p><p></p>
发表于 2006-6-28 09:00:54 | 显示全部楼层

Cache的另一大独特技术-位图索引技术

<p>其实,^Signup.PersonnelI("$Personnel",1)里面存的就是所有记录位串,如果id为6号的记录不存在,则第6位为0,否则为1。所以,$bitcount(^Signup.PersonnelI("$Personnel",1))就是Count(*),速度当然一样快。</p><p>另外,这个例子只是演示使用Bitmap index的内部机制——对位串的操作(使用Global访问),其实,你只要使用SQL语句,如Select count(*) from ...where  <font color="#000000">Occupation='教师' 就会使用Bitmap index,不需要你自己去操作Global!可以通过SQL语句的执行计划确认使用了Bitmap index</font></p>
发表于 2006-6-29 19:12:13 | 显示全部楼层

Cache的另一大独特技术-位图索引技术

谢谢.
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

快速回复 返回顶部 返回列表