MySQL数据库运用技巧和优化(不断更新)

June 5th, 2008 Michael Posted in MySQL / DB 13 Comments » 579 views

一个LAMP架构的网站,经常说这慢那慢的,其实从架构到代码到数据库,优化的空间是非常非常多的(架构设计参照我另外一篇文章),就看你是否愿意花心思去一点一点儿的做起,比如mysql,在lamp网站的架构优化中,往往是很多人最容易忽略的环节,却往往成为优化空间最大的环节,一句不经意的sql语句,可能就会导致数据库执行时间过长,进而导致锁表时间过长,最后导致整站垮掉,让另外99%的努力工作和优化都失去意义,所以,Mysql的优化,需要细致而有耐心的进行,一点一点儿的挖,从slow_query日志开始,从my.cnf参数配置开始,从sql语句写法开始,从表中的索引index开始。。。

即日起,不断整理和MySQL的运用技巧与优化的内容,下面先想到一些是一些。

【索引】

  1. 一般来说,如果选择性超过 20% 那么全表扫描比使用索引性能更优,Oracle在选择性超过25%时会选择全表扫描。
  2. 组合索引比单一索引更有效,但是需要合理使用,清楚你在干什么,组合索引采用B树类型,左前缀的特性,创建组合索引的时候,要考虑到具体的使用场景和逻辑。
  3. 不是索引越多越好,过多索引容易导致更新和插入数据效率大大降低。

【SQL】

  1. 经常用EXPLAIN来检查你的SQL查询语句,找出那些想当然却事与愿违的隐藏问题。
  2. 常常检查slow query的日志,针对性的深挖慢嚼,改善你的系统性能

【架构和配置】

  1. 主辅库同步,通过搭建Master-slave的架构,可以把系统的读写分离,一方面提高了系统因为数据库单点导致的锁表代理的性能瓶颈,还能使系统的架构更加灵活,可以在某一台slave机器上进行数据统计分析,也可以在某一个slave上进行定时的cron任务或者daemon程序操作,从大型网站使用mysql来说,replication是必须的架构。
  2. memory 类型表

【新特性】

  1. 适当的使用触发器,对于web应用来说,可以在很多地方降低代码的复杂度,提高业务逻辑的可靠性,从我的经验来看,可以在大型应用中适当的使用触发器,比如删除一条评论,用户user表里面的评论数字段自动减1这样的操作就可以通过触发器来完成。

【附录】
Read the rest of this entry »

AddThis Social Bookmark Button

PHP连接MySQL的字符集问题新发现

September 1st, 2006 Michael Posted in MySQL / DB, PHP / Zend, 技术交流 6 Comments » 4,774 views

  之前我在一篇文章里面讲到把故人居网站升级为UTF8字符集,看过的也知道一些有关PHP和MySQL字符集的问题,通常情况下MySQL默认使用的字符集是latin1,如果我们的系统要使用utf8或者别的字符集,就需要对MySQL进行配置,并且在PHP程序中做一点处理,大致的方法如下:

1.修改my.ini (或者my.cnf)文件,在文件的[mysqld]中加入下面一行
character_set_server = utf8
Read the rest of this entry »

AddThis Social Bookmark Button

jsp连接数据库大全 [转自51jsp.net]

October 19th, 2005 Michael Posted in C / C++ / 其他技术, MySQL / DB, 技术交流 No Comments » 2,912 views

有段时间应公司产品开发需要开始研究jsp的东西,虽然本人对JAVA系列的东西都比较不感冒,但是公司行为就是这样,这也是很多有梦想的程序员因此而葬送美好愿望的原因。。。
为了交差,也赶鸭子上架搞了几个月的jsp的东西,中间在网上看到下面这片文章,感觉不错,留做技术资料,现在翻出来跟大家分享。

Read the rest of this entry »

AddThis Social Bookmark Button