mysql5.5的默认字符集配置

最近有些糊涂,完全忘记去看error日志或者debug信息。

昨天弄mysql的时候怎么也起不来,把我郁闷的直接给卸载掉不管它了。今天又想安装上,于是弄上去发现还不行。那就编译吧,用老配置文件——结果还是不行……瞟了一眼错误信息——“default-character-set=utf8”它居然不认……上网一查,好家伙,mysql5.5不支持这货了,那就把原来的删掉,把下面这句加到[mysqld]里面,又起来了,不容易……

character-set-server=utf8

进到mysql里打个“\s”一看,字符集全utf-8了。

以后一定要看debug的消息啊……

优化 MySQL 语句的十个建议

看到OSCHINA上转的这篇,觉得不错,留下来做个备份。

Jaslabs的Justin Silverton列出了十条有关优化MySQL查询的语句,我不得不对此发表言论,因为这个清单非常非常糟糕。另外一个Mike也同样意识到了。所以在这个博客中,我要做两件事情,第一,指出为什么这个清单很糟糕,第二,列出我的清单,希望我的比较好些。继续看吧,无畏的读者们!

(译者注:作者借这个题目反讽另一篇同名的文章)

为什么那个清单很糟糕

1.他的力气没使对地方

我们要遵循的一个准则就是如果你要优化代码时,应该先找出瓶颈在哪。然而Silverton先生的力气没有用对地方。我认为60%的优化是基于清楚 理解SQL和数据库基础的。你需要知道join和子查询的区别,列索引,以及如何将数据规范化等等。另外的35%的优化是需要清楚数据库选择时的性能表 现,例如COUNT(*)可能很快也可能很慢,要看你选用什么数据库引擎。还有一些其他要考虑的因素,例如数据库在什么时候不用缓存,什么时候存在硬盘上 而不存在内存中,什么时候数据库创建临时表等等。剩下的5%就很少会有人碰到了,但Silverton先生恰好在这上面花了大量的时间。我从来就没用过 SQL_SAMLL_RESULT。

继续阅读

mongodb索引讲解与性能调优

转自http://ptc.35.com/?p=214

mongodb索引规则基本上与传统的关系库一样,大部分优化MySQL/Oracle/SQLite索引的技巧也适用于mongodb。

一、 为什么用索引:

当查询中用到某些条件时,可以对该键建立索引,以提高查询速度。

如果数据量很多且查询多于更新时,可以用索引提高查询的速度。

继续阅读

关于MYSQL的on duplicate key update

有些时候我们需要插入数据库的时候,遇到唯一的键值希望更新而并非引发错误,这样就可以保持数据库中的数据在不重复的同时保持到最新。这时我们就可以使用on duplicate key update语句。这条语句是这样规定的:

比如我们希望向table中的a, b, c三个列添加数据1, 2, 3 ,结果已经这个表中的a, b, c中一个是主键或者是UNIQUE INDEX这种唯一键值,且恰表里面有这个值了(也就是可以触发唯一的键值重复),这条语句便会执行update后面的子句了。当然,如果没触发唯一键值的重复,自然就要执行Insert语句了。

从程序上给人的感觉就是如果触发了UNIQUE异常,则catch到这个异常,然后执行update语句。

使用这条语句的时候,有几个方法可以用到。我们看到语句里面写的"c = c +1",就是说可以使用列名来表示原来的值。如果你希望引用现在的值怎么办呢(就是说c = 3),你当然可以写作c = 3, 还有一种方法是使用values(c)来表示使用你希望插入的值进行更新。通知,这条语句支持插入多条数据。下面是一个例子:

继续阅读