论坛登陆 注册 教程 笑话 影视 投稿
首页 | 页界资讯 | 网络应用 | 软件应用 | 组网技术 | 网络原理 | 聊天通讯 | 网管知识 | 帮助
笑话 | 操作系统 | 注 册 表 | 编程开发 | 数 据 库 | 媒体动画 | 网页设计 | 图形图象 | 地图
论坛 | 网络安全 | 安全防范 | 服 务 器 | 硬件学堂 | 路由技术 | 搜索研究 | 站长经验 | 投稿
影院 | 教育频道 | 特色专题 | 精文荟萃 | 注 册 码 | 论坛社区 | 网站地图 | 广告服务 | 旧版
设为首页 加入收藏
当前位置:首页>>文章>>数据库>>MySQL>>正文

优化MySQL数据库性能的八大“妙手”

www.xker.com 作者: 来源:csdn开发高手 加入日期:2006-3-19 9:44:48

【问题提问、论坛交流】本文探讨了提高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不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作

  3、使用联合(UNION)来代替手动创建的临时表

  MySQL 从 4.0 的版本开始支持 UNION 查询,它可以把需要使用临时表的两条或更多的 SELECT 查询合并的一个查询中在客户端的查询会话结束的时候,临时表会被自动删除,从而保证数据库整齐、高效使用 UNION 来创建查询的时候,我们只需要用 UNION作为关键字把多个 SELECT 语句连接起来就可以了,要注意的是所有 SELECT 语句中的字段数目要想同下面的例子就演示了一个使用 UNION的查询

SELECT Name, Phone FROM client
UNION
SELECT Name, BirthDate FROM author
UNION
SELECT Name, Supplier FROM product

  4、事务

  尽管我们可以使用子查询(Sub-Queries)、连接(JOIN)和联合(UNION)来创建各种各样的查询,但不是所有的数据库操作都可以只用一条或少数几条SQL语句就可以完成的更多的时候是需要用到一系列的语句来完成某种工作但是在这种情况下,当这个语句块中的某一条语句运行出错的时候,整个语句块的操作就会变得不确定起来设想一下,要把某个数据同时插入两个相关联的表中,可能会出现这样的情况:第一个表中成功更新后,数据库突然出现意外状况,造成第二个表中的操作没有完成,这样,就会造成数据的不完整,甚至会破坏数据库中的数据要避免这种情况,就应该使用事务,它的作用是:要么语句块中每条语句都操作成功,要么都失败换句话说,就是可以保持数据库中数据的一致性和完整性事物以BEGIN 关键字开始,COMMIT关键字结束在这之间的一条SQL操作失败,那么,ROLLBACK命令就可以把数据库恢复到BEGIN开始之前的状态

本新闻共3页,当前在第1页  1  2  3  

编辑:xker.com

上一篇:优化MySQL数据库性能的八大“妙手”
下一篇:没有了
关闭窗口】【技术交流】【收藏此页
相关文章
·优化MySQL数据库性能的八大“妙手”·为MySQL数据库添加新用户·MySQL数据库中mysqldump命令使用详解
·骗你不商量的系统优化秘籍·如何恢复MYSQL的ROOT口令·使用智能优化器提高Oracle的性能极限
·FREEBSD升级及优化全攻略·迁移临时文件夹 让系统性能全面提升·不要讨一时之巧 在网页优化中进行作弊
·网页优化 向搜索引擎提交网站的技巧·搜索引擎优化SEO全攻略 选项·给系统找个随叫随到的免费修理工
·图解MySQL数据库的安装和操作·武林绝技之笔记本操作系统优化·Photoshop CS 之终极优化
推荐文章 最新文章 热门文章
·优化MySQL数据库性能的八大“妙手”
·给系统减肥 卸载Windows中的集成组件
·MySQL数据库中mysqldump命令使用详解
·SqlServer存储过程/函数加/解密
·CSS属性中Display与Visibility的不同
·网管实战 远程管理让服务发布遭遇意外
·骗你不商量的系统优化秘籍
·教您30分钟打造Linux的VPN服务器
·Windows IIS WEB服务器配置安全规范(
·网管手册 70例网络故障排除方法(上)
·ASP.NET中实现大结果集分页研讨
·java写的查找重复电话号码程序
·ASP.NET1.0升级ASP.NET2.0的问题总结
·在Linux操作系统中如何截获系统调用
·照片处理:美女肖像照片简单靓肤技巧
·优化MySQL数据库性能的八大“妙手”
·优化MySQL数据库性能的八大“妙手”
·为MySQL数据库添加新用户
·微软发布Office 2007 β1技术更新版(
·网上银行自我保护秘籍
·ID须小心! 巧用防火墙保护网游账号
·忘了QQ密码又要查看聊天记录该怎么办
·给系统减肥 卸载Windows中的集成组件
·歌词广告别烦我 轻轻松松听MP3歌曲
·MySQL数据库中mysqldump命令使用详解
·C++中的const限定修饰符
·自动为单元格添加数量单位
·木马各种隐藏技术披露
·Linux下病毒防范技巧
·排毒妙招:用安全网关轻松搞定蠕虫病
·个人简历表格
·免费代理IP(每日更新)
·QQ收费头像免费使用的方法 
·QQ密码丢失后能做的事情:快速找回密码
·Norton AntiVirus 2006 注册码(激活
·系统优化 专题
·豪杰超级解霸V9.1正版注册码
·WinRAR 3.51 注册码
·找回QQ密码的注意事项 
·史上最强QQ个人档案资料欣赏
·Ajax技术开发指南
·最经典的黑客入门教材
·求职简历封皮
·ACDSee v8.0注册码
·应届毕业生求职信
评论

设为首页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
Copyright © 2003-2006 xker.com All rights reserved.小新技术网 合作广告QQ:12231446
本页浏览次数: