用户名: 密码: 注册 找回密码
搜索   
收藏本站 设为主页
首页
新闻 供求 报价 技术 下载 商家 商城 博客
论坛
硬件学院 软件学院 解决方案
技术查找 
  按标题 按全文
相关技术
· 如何得到AIX系统安装时间...
· AIX如何限制用户SSH远程...
· 主流虚拟主机布阵方式浅...
· KVM主机切换系统轻松管理...
· 服务器技术之负载均衡技...
· 设置一台虚拟的 FTP 服务...
最近头条
· 微软云计算平台Windows ...
· Intel企业级固态硬盘开始...
· IBM花费3年打造“网络故...
· 《中关村日报》IT渠道商...
· AMD公司一分为二 获60亿...
· IBM携Bluehouse参战云计...
相关供求
· CX600 CX700 EMC后备电池...
· 迅驰光纤收发器/光电转换...
· 单模室外架空光缆/双铠双...
· 威腾37u服务器机柜13120...
· SUN Blade2000/B1000,B1...
· 批发HP,IBM各系列服务器...
Advertisement
 首页 > 技术频道 > 软件学院 > 浏览技术 关键字: mysql  数据库 
MySQL数据库服务器性能的优化方法
2006-6-26 10:42:23   equalnull   来源:中华服务器网    点击:989次   加入收藏夹

本文探讨了提高MySQL数据库性能的思路,并从8个方面给出了具体的解决方法。 

  1、选取最适用的字段属性

  MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了。同样的,如果可以的话,我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。

  另外一个提高效率的方法是在可能的情况下,应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。

  对于某些文本字段,例如“省份”或者“性别”,我们可以将它们定义为ENUM类型。因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。这样,我们又可以提高数据库的性能。

  2、使用连接(JOIN)来代替子查询(Sub-Queries)

  MySQL从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。例如,我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来,然后将结果传递给主查询,如下所示:

DELETE FROM customerinfo
WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo ) 

  使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,并且写起来也很容易。但是,有些情况下,子查询可以被更有效率的连接(JOIN).. 替代。例如,假设我们要将所有没有订单记录的用户取出来,可以用下面这个查询完成:

SELECT * FROM customerinfo
WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo ) 

  如果使用连接(JOIN).. 来完成这个查询工作,速度将会快很多。尤其是当salesinfo表中对CustomerID建有索引的话,性能将会更好,查询如下:

SELECT * FROM customerinfo 
LEFT JOIN salesinfoON customerinfo.CustomerID=salesinfo. 
CustomerID 
WHERE salesinfo.CustomerID IS NULL  

连接(JOIN).. 之所以更有效率一些,是因为 MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作。
对不起,您需要登录后才能查看全部详细内容
上一条技术: linux操作系统下建立mysql镜像数据库
下一条技术: FreeBSD5.3下安装Apache+PHP+MySQL+Tomcat


关于我们 法律声明 广告服务 友情链接 联系我们
版权所有:中华服务器网©2001-2008
粤ICP备05008160号 由深圳市七乘二四信息技术有限公司提供技术支持。
 客 服