Archive for category 数据库
MySQL的多列索引
项目最近出了点问题,数据库最先出现问题,这也是一般项目的问题,从合作方那要了数据库备份及慢查询记录,发现存在以下二个问题:
1、数据库存在太多垃圾数据,表容量过大;
2、许多查询没有对应的索引;
知道了问题所在,就开始着手优化了,针对第1点,只要及时清理垃圾数据就可以。我们的重点在第二点—-索引,这也是今天我要记录的。
什么是索引?
索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。
所有的MySQL列类型能被索引。在相关的列上的使用索引是改进SELECT操作性能的最好方法。
一个表最多可有16个索引。最大索引长度是256个字节,尽管这可以在编译MySQL时被改变。
对于CHAR和VARCHAR列,你可以索引列的前缀。这更快并且比索引整个列需要较少的磁盘空间。
Read the rest of this entry »
[转载]MySQL性能优化
作者:andyao
原文link: http://andyao.javaeye.com/admin/show/144033
1. 简介
在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响。MySQL是目前使用最多的开源数据库,但是MySQL数据库的默认设置性能非常的差,仅仅是一个玩具数据库。因此在产品中使用MySQL数据库必须进行必要的优化。
优化是一个复杂的任务,本文描述MySQL相关的数据库设计和查询优化,服务器端优化,存储引擎优化。
Read the rest of this entry »
Mysql索引的Bug
昨晚服务器又可耻的罢工了,当时正在忙,就先重启了。一会忙完就回家了,路上接到同事电话说网站出问题了,队列都写不进去,到家连上服务器,一看,Mygod,一小时不到,Mysql slow日志已经达到1.5G,其实会更多,因为分区没空间了。该是整整数据库的时候了,用mysqlsla分析了一下,然后把日志打包,先让服务器跑起来。
早上开始根据mysqlsla分析出来最影响性能的10条SQL,发现好多索引没有命中,感觉很奇怪,相同的做法在同事的机上则没问题。在做过多种测试,可判断是Mysql版本问题,同事的Mysql版本是5.0.x,我的是5.1.x。上网搜索了一下,真发现有人也碰到这问题了,解决方案是在查询时强制索引,简单加上USE INDEX还没用。
原来:
改为
前提是你有member_id这个索引。
Linux下分析Mysql日志的好工具–mysqlsla
从http://hackmysql.com/mysqlsla下载mysqlsla,当前最新版为:2.03
- tar zxvf mysqlsla-2.03.tar.gz
- cp mysqlsla-2.03/bin/mysqlsla /usr/local/bin
如果提示“Can’t locate DBI.pm”,执行以下命令
- yum install perl-DBI perl-DBD-MySQL -y
这时就可以使用mysqlsla了,用法如下
- mysqlsla -lt slow slow.log
近期评论