数据库性能优化
这里的数据库特指MySQL,在介绍数据库性能优化方法之前,提几个用于性能分析的MySQL命令行工具:
-
mysqlreport
:第三方MySQL状态报告工具,分析结果一目了然 -
explain
:用于分析SQL语句的执行细节(比如是否用到了索引) -
mysqlsla
:用于查询哪些SQL操作的耗时超过了预设的阈值,使用此工具之前需要在my.cnf
开启慢查询日志,即增加long_query_time=1
和log-slow-queries = /data/var/mysql_slow.log
这2行配置项
(1)索引
索引就像是一本书的目录,好的索引可以极大地提升select操作的效率,但会增加delete/update/insert的开销。如果你的数据库的读远多于写,那么索引是非常奏效的。
- 在哪个字段设置索引:经常出现在select语句的where/order by/group by后的字段,都可以考虑设置索引
- 使用组合索引:如果一条select语句的条件过滤中涉及到了多个field,那可以考虑设置组合索引,组合索引有一个最重要的原则就是 最左前缀 ,比如
where A=1 and C=2
是无法使用到A, B, C
组合索引的 - 判断一个SQL操作是否用到索引,可以使用explain工具
(2)冗余设计
数据库的表设计一般遵循所谓的第三范式(3NF),即要求非主键字段之间不能存在依赖关系。但是如果完全按照这样来做的话,SQL语句中会包含大量的join操作。在设计时我们可以保留适量的冗余,比如一个user的blogs数目,可以直接在user表中增加一个blogs_count字段,每次增加/删除blog时就相应地+/-此字段。以后查询起来就快了。
(3)读写分离
单个数据库读写扛不住?那就把读写分离开吧,使用MySQL的主从复制功能,多个从数据库保持与主数据库的同步,然后update/delete/insert全部走主数据库,select则使用负载均衡技术分摊到多个从数据库上。
(4)垂直分区 & 水平分区
读写分离了还是不行,怎么办?可以考虑把相对独立的数据表存放在不同的服务器上,然后每一个都采用读写分离技术,这就是垂直分表,可以进一步将读写压力分摊到更多的服务器上。
如果垂直分表了还不行,那就考虑将单表进一步拆分(分表),然后每n(n>=1)个表部署到独立的服务器上(水平分区)。分表和水平分区的方法大概有:哈希算法、范围分区、映射关系,具体见《构建高性能Web站点》P370页。
(5)NoSQL
如果以上的方法还不奏效,或者虽然奏效但维护成本太高,那就可以考虑抛弃关系数据库,转投NoSQL阵营了。需要注意的是,关系数据库和NoSQL都有各自的适用场景,谁也无法完全取代谁。但NoSQL实在是太多啦,如何选择呢?这里推荐一些比较不错的博文:Robbin的 文章 对NoSQL有一个概览式的分类,草屋主人的NoSQL系列文章 涉及到了各类应用场景,值得一读。
相关推荐
Oracle数据库优化经典之作,全文集合了经验丰富的DBA对于Oracle数据库优化的真知灼见,让很多人受益匪浅,Oracle数据库自9i版本以后,10g,11g版本推荐使用CBO优化器,所以,本文主要结合一系列实例,详细讲解如何在...
简单描述数据库优化方案,以及数据库一些常用的操作,包括一些简单的查询语句,函数使用,合适学习mysql的读者。 简单描述数据库优化方案,以及数据库一些常用的操作,包括一些简单的查询语句,函数使用,合适学习...
K3数据库优化方案K3数据库优化方案
有关数据库优化,以及优化措施方面的论文。。。。。。。。。。
非常好的数据库优化教程、MySql优化\非常好的数据库优化教程
数据库优化工具 sql优化工具 智能优化
sql数据库优化方案,可以学习一下。。。。。
MYSQL数据库优化.pdf saivicky出品,必属精品!
sql数据库优化--使用索引优化存储过程,相信你对数据库的理解一定不会少!对于你开发和设计数据库是不可少的哟!
MySQL数据库优化心得:选取最适用的字段属性;使用连接(JOIN)来代替子查询(Sub-Queries);使用联合(UNION)来代替手动创建的临时表;事务;锁定表;外键等。
( 数据库优化方面.rar ) ( 数据库优化方面.rar ) ( 数据库优化方面.rar ) ( 数据库优化方面.rar ) ( 数据库优化方面.rar ) ( 数据库优化方面.rar ) ( 数据库优化方面.rar ) ( 数据库优化方面.rar ) ( 数据库优化方面...
C#源码 访问ACCESS数据库 通过反射调用命令 清理数据库 执行数据库优化 压缩操作 非常不错的参考资料
数据库优化培训课件,供大家一起参考学习。
SQL百万级数据库优化大全,是对sql各方面优化的总结和案例引导,避免全表扫描等方面的性能优化。
对mysql数据库优化方面的全面解析,尽大程度的提高性能
本文档是我使用Oracle多年后在数据库优化方面的总结,希望对初学者带来便利!
《数据库优化与集成之实战和效果 郑保卫》PDF课件
oracle数据库优化内容: 1.Oracle数据库优化概述 2.性能规划器的使用 3.顶层会话的使用 4.Oracle专家的使用 5.索引调节向导 6.SQL分析的使用 7.锁管理器 8.性能管理员 9.表空间的重组 博文链接:...
Oracle 数据库优化技术手册 1:硬件优化,2:数据库优化,3:sql语句优化;4:优化细节;5:优化总结
ORACLE数据库优化基础培训,涵盖了基础操作和常见的问题。 数据库培训内容: 1、Oracle之SQL语句性能优化 2、数据库常用管理命令 3、数据库常见问题处理