使用 fireEvent
Saturday, April 28, 2012
优化MySQL语句的十个建议
1.他的力气没使对地方
我们要遵循的一个准则就是如果你要优化代码时,应该先找出瓶颈在哪。然而Silverton先生的力气没有用对地方。我认为60%的优化是基于清楚理解SQL和数据库基础的。你需要知道join和子查询的区别,列索引,以及如何将数据规范化等等。另外的35%的优化是需要清楚数据库选择时的性能表现,例如COUNT(*)可能很快也可能很慢,要看你选用什么数据库引擎。还有一些其他要考虑的因素,例如数据库在什么时候不用缓存,什么时候存在硬盘上而不存在内存中,什么时候数据库创建临时表等等。剩下的5%就很少会有人碰到了,但Silverton先生恰好在这上面花了大量的时间。我从来就没用过SQL_SAMLL_RESULT。
2.很好的问题,但是很糟糕的解决方法
Silverton先生提出了一些很好的问题。MySQL针对长度可变的列如TEXT或BLOB,将会使用动态行格式(dynamic row format),这意味着排序将在硬盘上进行。我们的方法不是要回避这些数据类型,而是将这些数据类型从原来的表中分离开,放入另外一个表中。下面的schema可以说明这个想法:
3. 有点匪夷所思……
他的许多建议都是让人非常吃惊的,譬如“移除不必要的括号”。你这样写SELECT * FROM posts WHERE (author_id = 5 AND published = 1),还是这样写SELECT * FROM posts WHERE author_id = 5 AND published = 1 ,都不重要。任何比较好的DBMS都会自动进行识别做出处理。这种细节就好像C语言中是i++快些还是++i快些。真的,如果你把精力都花在这上面了,那就不用写代码了。
我们要遵循的一个准则就是如果你要优化代码时,应该先找出瓶颈在哪。然而Silverton先生的力气没有用对地方。我认为60%的优化是基于清楚理解SQL和数据库基础的。你需要知道join和子查询的区别,列索引,以及如何将数据规范化等等。另外的35%的优化是需要清楚数据库选择时的性能表现,例如COUNT(*)可能很快也可能很慢,要看你选用什么数据库引擎。还有一些其他要考虑的因素,例如数据库在什么时候不用缓存,什么时候存在硬盘上而不存在内存中,什么时候数据库创建临时表等等。剩下的5%就很少会有人碰到了,但Silverton先生恰好在这上面花了大量的时间。我从来就没用过SQL_SAMLL_RESULT。
2.很好的问题,但是很糟糕的解决方法
Silverton先生提出了一些很好的问题。MySQL针对长度可变的列如TEXT或BLOB,将会使用动态行格式(dynamic row format),这意味着排序将在硬盘上进行。我们的方法不是要回避这些数据类型,而是将这些数据类型从原来的表中分离开,放入另外一个表中。下面的schema可以说明这个想法:
CREATE TABLE posts (
id int UNSIGNED NOT NULL AUTO_INCREMENT,
author_id int UNSIGNED NOT NULL,
created timestamp NOT NULL,
PRIMARY KEY(id)
);
CREATE TABLE posts_data (
post_id int UNSIGNED NOT NULL.
body text,
PRIMARY KEY(post_id)
);
3. 有点匪夷所思……
他的许多建议都是让人非常吃惊的,譬如“移除不必要的括号”。你这样写SELECT * FROM posts WHERE (author_id = 5 AND published = 1),还是这样写SELECT * FROM posts WHERE author_id = 5 AND published = 1 ,都不重要。任何比较好的DBMS都会自动进行识别做出处理。这种细节就好像C语言中是i++快些还是++i快些。真的,如果你把精力都花在这上面了,那就不用写代码了。
Monday, April 23, 2012
acpi绑定Thinkpad Hotkey
/etc/acpi/default.sh
ibm)
case "$action" in
hotkey)
case "$value" in
00001008)
logger "TouchPage toggle"
export DISPLAY=":0.0"
/home/fred/bin/keys/fn/touchpad.sh
;;
*) log_unhandled $* ;;
esac
;;
esac
;;
Thursday, April 19, 2012
Monday, April 16, 2012
使用convert裁剪图片
裁剪掉图片底部20px高度:
convert trim_oneside.gif -gravity South -chop 0x20 trim_south.gif
Friday, April 13, 2012
使用SSH压缩让网络传输更慢
mbailey@modu1:~/vm$ scp -r r03 modu4:vm/
Ubuntu 64-bit-f001.vmdk 7% 147MB 8.1MB/s 03:54 ETA
mbailey@modu1:~/vm$ scp -r -o 'Compression no' r03 modu4:vm/
Ubuntu 64-bit-f001.vmdk 100% 2048MB 28.1MB/s 01:13 ETA
所以我推荐 ssh+rsync。
Thursday, April 12, 2012
在App Engine上使用bottle框架
application: my-bottle-app\ version: 1 runtime: python api_version: 1 handlers: - url: /styles static_dir: styles - url: /.* script: main.py
from framework import bottle from framework.bottle import route, template, request, error, debug from google.appengine.ext.webapp.util import run_wsgi_app @route('/') def DisplayForm(): message = 'Hello World' output = template('templates/home', data = message) return output def main(): debug(True) run_wsgi_app(bottle.default_app()) @error(403) def Error403(code): return 'Get your codes right dude, you caused some error!' @error(404) def Error404(code): return 'Stop cowboy, what are you trying to find?' if __name__=="__main__": main()
Friday, April 6, 2012
批量下载某个网站 0001.jpg 到 0999.jpg 图片的shell脚本
for i in {1..999}; do curl -L -O http://baidu.com/images/pic_$(printf "%0.4d" $i).jpg; done
Monday, April 2, 2012
Linux版本Google Chrome更改字体方法
在Linux下的Google自然可以通过设置更改字体,不过不能选择像“sans-serif”,“monospace”这样的字体。
你需要用编辑器手工编辑 .config/google-chrome/Default/Preferences
dejavu是我一直使用的字体。
你需要用编辑器手工编辑 .config/google-chrome/Default/Preferences
"webkit": {
"webprefs": {
"global": {
"fixed_font_family": "monospace",
"sansserif_font_family": "sans-serif",
"serif_font_family": "serif",
"standard_font_family": "sans-serif"
},
"uses_universal_detector": true
}
}
dejavu是我一直使用的字体。
Subscribe to:
Posts (Atom)