为什么SELECT col1,col2,col3,col4 会比SELECT * 慢?
10月 7, 2007 on 1:31 pm | In 未分类 | 5 Comments之前做过一个测试:
select id,title from ** 与select * from **的速度测试。
这是后续版.
- <?php
- define("TIMES",10000);
- $SQL1="SELECT * FROM stat_visits";
- $SQL2="SELECT v_id,v_url,v_site_id,v_screen_size,v_h,v_m,v_s,v_flash,v_director,
- v_quicktime,v_realplayer,v_pdf,v_windowsmedia,v_java,v_cookie,v_ref,v_remote_ip,
- v_timezone,v_color_depth,v_type,v_year,v_month,v_day,v_time FROM stat_visits";
- $conn=mysql_connect("localhost","root","");
- mysql_select_db("test");
- $time1=array_sum(explode(' ', microtime()));
- for($i=0;$i<times;$i++)
- </times;$i++)
- mysql_query($SQL1);
- $time2=array_sum(explode(' ', microtime()));
- for($i=0;$i<times;$i++)
- </times;$i++)
- mysql_query($SQL2);
- $time3=array_sum(explode(' ', microtime()));
- $cost1=$time2-$time1;
- $cost2=$time3-$time2;
- print "cost1:$cost1\n";
- print "cost2:$cost2\n";
- ?>
测试的结果是:
- [st@localhost test]$ php select.php
- cost1:2.1355810165405
- cost2:2.5820469856262
- [st@localhost test]$ php select.php
- cost1:1.9796178340912
- cost2:2.5190000534058
- [st@localhost test]$ php select.php
- cost1:1.9672379493713
- cost2:2.9030020236969
- [st@localhost test]$ php select.php
- cost1:1.9810240268707
- cost2:2.5505940914154
好了,现在将SQL1和SQL2次序交换:
- calhost test]$ php select.php
- cost1:2.5933158397675
- cost2:2.0362050533295
- [st@localhost test]$ php select.php
- cost1:2.6104090213776
- cost2:2.056037902832
- [st@localhost test]$ php select.php
- cost1:4.2802629470825
- cost2:3.3958988189697
- [st@localhost test]$ php select.php
- cost1:2.6283531188965
- cost2:2.0102050304413
大体上,SELECT COL1,COL2,COL3….. 与SELECT * 相比,两者花费的时间之比是4:5.不知道非空表的结果会不会是这样?
Mysql 随机读取记录的一种实现
10月 7, 2007 on 12:28 pm | In 未分类 | No Comments这两天觉得自己的基本功不够扎实,于是躲在家里看PHP,mysql手册。
发现这个句子在大部分情况下能实现随机读取mysql记录:
表的结构如下:
- | id | bigint(11) unsigned | NO | PRI | NULL | auto_increment |
- | tag | varchar(32) | NO | | | |
- | hash | varchar(32) | NO | | | |
- | created | bigint(11) | NO | | | |
- | article_id | bigint(11) | NO | | | |
- select * from tag order by RAND() desc limit 10\G
秘决在于:
1.Rand函数.
2.不仅用order by id可以依id排序,用order by 1也可以依id排序.因此用rand函数来生成order by 子句。
犯错误了,order by 1 确实可以生效,但是rand函数不能用在order by 子句中。 而且,当表中有column(1),column(2)…..共10列时,用order by 1,order by 2,….分别是按column(1),column(2)…排序的,但是我用order by 11时,就报错了。再用SELECT * FROM table order by RAND()*1000,却不报错。
看下面的例子:
- select *,(rand()*1000) as a from x_feeds order by a;
每次输出,都不同。
再稍变一次:
- mysql>select *,(rand()*1000) as a from x_feeds order by 514;
每次都出错。
再变之:
- mysql>select *,(rand()*1000) as a from x_feeds order by 514.37134
将order by 后跟上小数(学计算机的不能这么说啊),就能正常输出,但是是按表的原来顺序输出的,每次结果都一样。
暂时未找到真正原因,mysql文档中文版如此说:
你不能在一个ORDER BY子句用RAND()值使用列,因为ORDER BY将重复计算列多次。然而在MySQL3.23中,你可以做: SELECT * FROM table_name ORDER BY RAND(),这是有利于得到一个来自SELECT * FROM table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000的集合的随机样本。注意在一个WHERE子句里的一个RAND()将在每次WHERE被执行时重新评估。
糟糕的ruby库
10月 6, 2007 on 5:16 pm | In Ruby, 未分类 | 1 Comment题目其实错了。
ruby的确是个不错的语言,正如名字一般,像宝石一样。另一个语言也是,lua,名为月亮,也很棒。
但是我用ruby来构建一个微型的抓取/索引/检索系统,分词,存储,检索都没什么问题,但是在抓取HTML页面解析时出了问题:因为我用了一个库,这个库又依赖于另一个库…. 最后输出时输出一大篇大篇的出错信息,我只好加上ruby spider.rb 2> /dev/null 才能看到我自己的调试信息。 试了一下,原来用begin rescue end 语句不太好用,仍然无法阻止错误信息的输出。
刚刚又发现,用gem build rlucene.gemspec来打包时,又莫名奇妙地出错了.
郁闷。ruby库的可靠性真不怎么样。
去了趟动物园
10月 4, 2007 on 8:06 pm | In 杂谈 | No Comments难得的是,听到了老虎的叫声.果然是王者.

狮子的眼睛在相片中居然像一颗灯一样.

这只熊猫同学,您擦屁屁有10分钟了吧,现在终于擦完了?
腾讯QQ是用着不爽,但人没错
10月 3, 2007 on 11:23 pm | In 未分类 | No Comments看到霍炬的这篇文章,确实,Tecent确实没错.
但是让人感到奇怪的是,居然有流言说,腾讯曾以“办公场所搬离深圳”为威胁,要求深圳市公安局到北京抓捕陈。看 到这我简直感到搞笑,说啥我也不信.一是如果腾讯确实如流言所说用不正当方式去”搞定”一个小小的大学教师,肯定有自己的公关啊啥渠道来运作,不会去威胁政府部门,何况威胁政府部门也不会用”办公场所搬离深圳”这样一个由头.深圳如此一个经济强市,巨头林立,跟传统行业的企业相比,tencent只是一个小毛孩,没有腾讯,深圳还是深圳,但是腾讯要搬离深圳,少不得大折腾一场,白折腾一场.
确实很多人讨厌腾讯,总是觉得人家这破软件不好,性能不好,乱七八糟的功能一大堆,不如木子版QQ,珊瑚版QQ好用,但是不好你可以不用啊.
腾讯的QQ软件不好用是一回事,改人家的东西侵犯版权是一回事.因为一个软件不好用就可以无视人家的版权,不是法律许可的.
联想到许多人不爽微软,总觉得用4块钱的Vista很爽,微软就应该提供4块钱的软件,最好还倒过来送钱给您.有人抱怨说,2000块钱一套啊,1000块钱一套啊,都太贵了.那您说说多贵合适啊?500一套?真要500让您掏 的时候,您还会说,贵了贵了.300?说说而已,真让您掏钱,您不一样说贵了么?杀毒软件二三百块钱一套,您负担得起吧?您都掏钱了吗?
是啊,一个这样的通讯软件,速度又快,最好只用1k的内存,又方便易用,不弹广告,增值业务您想要的就有(当然最好免费),不想要的就不装,最好腾读公司专门问过您老人家,然后照您的标准出.这样您满意了,是爽了,可是人腾讯吃什么啊?人腾讯出一个下载下来500M的客户端,运行起来CPU占一半,内存用500M内存的垃圾程序,那是人自己的事,都不犯法.
我支持的是,如果陈寿福在第一次判决后确实收手关闭珊瑚工作室网站的话,从道义支持一下陈寿福,但是陈寿福竟然置法院判决不顾,继续运营该网站并进行珊瑚QQ开发,这点确实过了,藐视法律,是该吃亏的.
Powered by WordPress with Pool theme design by Borja Fernandez.
Entries and comments feeds.
Valid XHTML and CSS. ^Top^
