PHP执行sql与Mysql下执行sql效率

今天将一个表数据拷贝到另一个表中,特地分析了下这两种执行方式的效率。

第一种:PHP脚本执行。

PHP脚本代码如下:

$limit = 1000;
$start = !empty($_GET['start']) ? $_GET['start'] : 0;

$query = DB::query("SELECT COUNT(*) FROM temp", 'SILENT');
$count = $query ? DB::result($query, 0) : 0;

if($start <= $count) {
	$query = DB::query("SELECT * FROM temp LIMIT $start, $limit");
	while($row = DB::fetch($query)) {
		$row = daddslashes($row);
		DB::query("INSERT INTO tests (id, name) values ('$row[conuin]', '$row[openid]')");
	}
	$start += $limit;
	showmessage('next',"1.php?start=$start");			
}

从temp表查询数据,然后插入到tests表中,其中temp表有80W条数据,PHP脚本执行情况:
晚上8点22分开始执行,到晚上10点11分执行完毕,耗时38+11=49分钟。

第二种:Mysql命令行下使用SQL执行。
执行SQL如下:

INSERT INTO tests (id, name) (SELECT conuin as id, openid as name FROM temp);

执行情况:耗时不到2分钟。

可见,Mysql下使用SQL命令导入数据的方式更加快捷。

Discuz! x2更新DIY模板分析

碰到一个DIY模板更新的问题,顺便分析了下更新的机制,整理记录下来了就。

哪些是DIY模板呢?
DIY模板加载的代码比较特殊,具体格式类似下面

include template('diy:***');

***为其他内容,不限。
如加载论坛首页的代码:

include template('diy:forum/discuz:'.$gid);

模板是如何加载的呢?
这里不对x2默认的模板加载方式进行分析,只针对DIY部分的更新加以说明。
找到source/function/function_core.php文件,找到template函数,在函数里可找到如下代码:

if($tpldir == 'data/diy' && ($tplrefresh ==1 || ($tplrefresh > 1 && !($_G['timestamp'] % $tplrefresh))) && filemtime($diypath.$file.'.htm') < filemtime(DISCUZ_ROOT.TPLDIR.'/'.($primaltpl ? $primaltpl : $oldfile).'.htm')) {
	if (!updatediytemplate($file)) {
		unlink($diypath.$file.'.htm');
		$tpldir = '';
	}
}

这段就是判断如果是DIY模板,同时满足更新条件,则更新相应的DIY模板。
更新的操作为updatediytemplate($file)。
还是在function_core.php文件里,找到updatediytemplate函数,代码如下:

function updatediytemplate($targettplname = '') {
	global $_G;
	$r = false;
	$where = empty($targettplname) ? '' : " WHERE targettplname='$targettplname'";
	$query = DB::query("SELECT * FROM ".DB::table('common_diy_data')."$where");
	require_once libfile('function/portalcp');
	while($value = DB::fetch($query)) {
		$r = save_diy_data($value['primaltplname'], $value['targettplname'], unserialize($value['diycontent']));
	}
	return $r;
}

common_diy_data表里存放的就是DIY数据,数据格式类似如下:

这里会从common_diy_data中查出更新的源文件和目前文件。

找到source/function/function_portalcp.php,找到save_diy_data函数,有如下代码:

function save_diy_data($primaltplname, $targettplname, $data, $database = false, $optype = '') {
	global $_G;
	if (empty($data) || !is_array($data)) return false;
	checksecurity($data['spacecss']);
	$file = ($_G['cache']['style_default']['tpldir'] ? $_G['cache']['style_default']['tpldir'] : './template/default').'/'.$primaltplname.'.htm';
	if (!file_exists($file)) {
		$file = './template/default/'.$primaltplname.'.htm';
	}
	if(!file_exists($file)) return false;
	......(中间的部分省略)
	return $r;
}

注意里面的这句代码

$file = ($_G['cache']['style_default']['tpldir'] ? $_G['cache']['style_default']['tpldir'] : './template/default').'/'.$primaltplname.'.htm';

这里会以你当前使用的风格路径下的相应文件$primailtplname.htm为源文件进行更新。

第一台相机

工作一年了,到年底了,准备给自己入个数码产品。
细想了下,就俩样:手机和相机。
手机目前用的就是能打打电话,发个短信,别的什么也不能做;还没相机,不过一直想入。
手机的话看中了Nokia的N9,外观实在太赞了,唯一一点前景不明,软件数量可能跟不上,还处于观望阶段。
周末混迹于数字尾巴社区,突然发现很多大赞的照片,细看发现都是理光GRD拍的,于是就稍微了解了下这个品牌。
好吧,我承认我是个摄影小白,一无所知...

理光(日文:株式会社リコー、英文:Ricoh Company, Ltd.),是日本的事务机器及光学机器制造商,市井清在1936年成立理化学研究所,主要研究理研阳画感光纸,其后于1963年正式易名为理光,并在同年成立香港分公司并进一步迈向大中华市场,名为丽确;1997年全球统一中文译名为“理光”,而当时理光广告位位于湾仔告士打道“尚汇”(近铜锣湾铁路站),而理光劲敌为佳能、索尼、宾得、施乐、柯尼卡美能达、宝丽来、哈苏、三星、Panasonic。——维基百科

看了下论坛上关于理光这款机子的评测:
经典中淬炼出的完美——理光 GRD4 体验记
【你在烦恼些什么】理光GRD III or IV选购之我见

于是基本确定入手IV这台机子,顺便又看了下网上商城这款机子的报价,京东3999有货,卓越3999没货。
对比了下两家的物品,发现卓越里带镜头盖,于是继续纠结是入手相机还是手机。

经过慎重缜密的考虑,决定先入手相机,手机今年就不考虑了。
今天卓越上又看了下物品情况,发现有货了,于是马上下单,顺便又买了本GRD的书《极致的浪漫》,共4039块。
第一次在网上下这么大的单子,也是第一台自己的相机。
接下来就是等待了,订单显示下周五可以送来,我比较怀疑需要这么长时间么...

唯一一点的疑问就是,网上看的是黑色不带镜头盖的,但是卓越的包装清单里是带镜头盖的。

周末电影之《幸福额度》

志玲妹纸的剧照。

讲述一对双胞胎姐妹莫晓红和莫晓青各自关于爱情的故事。
虽说剧情很老套,但是看过之后让我超出预期的地方就是志林妹纸了。
因为在这部电影里她一人扮演了两个角色,分别出演莫晓红和莫晓晴,两个不同性格的人物,演绎的还是很到位的,大大超出了以前对她“花瓶”的印象。

另外结尾的台词不错:
要王子还是房子,
要幸福还是衣服,
我们不能确定,
我们勾选的是迈向幸福人生的正确答案,
但能确定是,
为了爱情,
为了幸福的人生,
我们应该奋不顾身,
不计一切代价。