原文地址:Optimization Overview

数据库性能取决于几个数据库层面的因素,比如:表设计,查询语句,配置。 这些软件结构导致你必须在CPU和I/O 操作的硬件层面做到尽可能的最小化和高效!当你关注于数据库性能时,你需要了解软件层面更高层次的规则和指导建议,并使用wall-clock去测试性能。 而当你成为一个专家时,你更多需要了解的是内部到底发生了什么,并且测试一些东西,包括:CPU和I / O 操作。

一般用户希望通过配置已有的软件和硬件去获取最好的数据库性能,高级用户则寻找机会去提升MySQL软件本身的性能,或者开发出她们自己的存储引擎和硬件程序去扩展MYSQL的生态系统。

一、基于数据库级别的优化

一个可以让数据库程序变得更快的重要因素,是他的基础设计:

1,表结构是否合适???特别是,每一个数据列,是否拥有正确的数据类型???每一个工作表,是否拥有正确的数据列???举个例子:在一个频繁执行更新操作的程序中,通常拥有很多数据列比较少的表单,而需要大数据分析的程序,通常拥有少量的具有很多数据列的表单!

2,是否拥有正确的索引,使得查询更加高效???

3,是否为每个表使用了正确的存储引擎???是否使用了当前应用引擎的最高效最优化的功能???比如:选择一个支持事务的存储引擎(InnoDB)和一个不支持事务的存储引擎(MyISAM),将会对性能和可扩展性带来重要的影响!

备注:InnoDB是每一个新建表单的默认存储引擎。在实践中,InnoDB的高级性能特征意味着InnoDB的表单往往要优于简单的MyISAM表单,尤其是对于操作比较频繁的数据库。

4,是否每个表使用适当的行格式???这个取决于表的存储引擎。特别地,压缩表使用较少的磁盘空间,因此需要较少的磁盘I / O来读取和写入数据。压缩适用于所有InnoDB引擎的工作表,和只读的MyISAM表。

5,应用程序是否使用正确的锁策略???例如:通过允许共享访问,使得数据库操作可以并行执行。而且,请求的合理优先访问,使得操作可以获得最高优先级! 再次声明,对于存储引擎的选择是非常重要的。InnoDB数据库引擎可以在不需要你手动操作的情况下处理绝大部分的有关于锁的问题,支持更好的并发操作,并且减少你调整代码的实验次数!

6,对于缓存的内存配置是否正确???这是说,是否足够大去支持频繁的数据访问,但并不是大到超出物理空间并产生分页。主要的内存区域被配置到InnoDB的缓冲池,MyISAM的主键缓存,和Mysql的查询缓存!

二、基于硬件级别的优化

当数据库操作访问变得越来越频繁的时候,任何数据库的性能都受限于硬件设施。 一个DBA必须评估是否可以通过调整应用程序或者配置去规避这些瓶颈,或者是否需要更多的硬件资源。 典型的系统瓶颈通常有以下情况:

1,磁盘寻找。他花费时间在磁盘上去找到一条数据。在现代化的磁盘中,这个时间通常意味着慢于10ms。所以,在理论上,我们可以在1秒钟内进行100次寻找。对于一个单表的优化来说,通过用新的磁盘去提升这个寻找时间,是非常缓慢,并且非常困难的。去对此进行优化的方式是:分发这些数据到更多的磁盘!

2,磁盘读写。当磁盘处于正确的位置,我们需要读写数据。对于现代化的磁盘来说,一个磁盘至少能支持每秒10-20MB的吞吐量。优化此类状况比磁盘寻找更容易,因为你可以从多个磁盘中并行读取!

3,CPU周期。当数据在主内存中时,我们必须处理它才能得到结果。拥有较大的表与内存量的平衡是最常见的限制因素。但通过使用较小的表单,速度通常不是问题!

4,内存带宽。当CPU需要容纳更多的数据(更多是相对于CPU缓存),主内存带宽成为了一个瓶颈。对于大多数系统来说,这虽然并不是一个常见的瓶颈,但也是一个需要注意的点。

三、性能和简单便携的平衡

在一个便携式的Mysql程序中,应用高性能的SQL扩展语句:在一个语句块中使用/*! */,注释Mysql特定的关键字。其他的SQL服务器,忽略被注释的关键字!

【mysql 优化 1】优化概述的更多相关文章

  1. 优秀后端架构师必会知识:史上最全MySQL大表优化方案总结

    本文原作者“ manong”,原创发表于segmentfault,原文链接:segmentfault.com/a/1190000006158186 1.引言   MySQL作为开源技术的代表作之一,是 ...

  2. MySQL 大表优化方案(长文)

    当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...

  3. DB-MySQL:MySQL 语句性能优化

    ylbtech-DB-MySQL:MySQL 语句性能优化 1.返回顶部 1. MySQL概述1.数据库设计 3范式2.数据库分表分库---会员系统() 水平分割(分页如何查询)MyChar .垂直3 ...

  4. mysql库表优化实例

    一.SQL优化 1.优化SQL一般步骤 1.1 查看SQL执行频率 SHOW STATUS LIKE 'Com_%'; Com_select:执行SELECT操作的次数,一次查询累加1.其他类似 以下 ...

  5. Mysql的SQL优化指北

    概述 在一次和技术大佬的聊天中被问到,平时我是怎么做Mysql的优化的?在这个问题上我只回答出了几点,感觉回答的不够完美,所以我打算整理一次SQL的优化问题. 要知道怎么优化首先要知道一条SQL是怎么 ...

  6. mysql查询性能优化

    mysql查询过程: 客户端发送查询请求. 服务器检查查询缓存,如果命中缓存,则返回结果,否则,继续执行. 服务器进行sql解析,预处理,再由优化器生成执行计划. Mysql调用存储引擎API执行优化 ...

  7. MYSQL数据库的优化

    我们究竟应该如何对MySQL数据库进行优化?下面我就从MySQL对硬件的选择.MySQL的安装.my.cnf的优化.MySQL如何进行架构设计及数据切分等方面来说明这个问题. 服务器物理硬件的优化 在 ...

  8. 1229【MySQL】性能优化之 Index Condition Pushdown

    转自http://blog.itpub.net/22664653/viewspace-1210844/  [MySQL]性能优化之 Index Condition Pushdown2014-07-06 ...

  9. mysql中的优化, 简单的说了一下垂直分表, 水平分表(有几种模运算),读写分离.

    一.mysql中的优化 where语句的优化 1.尽量避免在 where 子句中对字段进行表达式操作select id from uinfo_jifen where jifen/60 > 100 ...

  10. MySQL 调优/优化的 100 个建议

    MySQL 调优/优化的 100 个建议   MySQL是一个强大的开源数据库.随着MySQL上的应用越来越多,MySQL逐渐遇到了瓶颈.这里提供 101 条优化 MySQL 的建议.有些技巧适合特定 ...

随机推荐

  1. 随记:UWP开发中怎么使当前页面拓展到标题栏

    public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); CoreAp ...

  2. ansible 通过堡垒机/跳板机 访问目标机器需求实战(ssh agent forward)

    一. 需求背景: 在我们使用ansible的过程中经常会遇到这样的情况,我们要管理的机器都在内网中,这些内网机器的登录都是通过跳板机或者堡垒机登录.我们的ansible机器不能直接管理到这些后端的机器 ...

  3. 小技巧:unicode RLO

    unicode 控制字符 RLO 可以将位于其后的文字翻转. 于是可以被病毒利用. 如图 重命名文件,在gpj前插入unicode RLO,之后若不小心,可能会被欺骗,误以为是jpg文件. 如果修改程 ...

  4. python 列表 字典转json

    一.Dictionary 转为JSON 将dict转为JSON,这里利用包json import jsonaItem = {}aItem["id"] = "2203&qu ...

  5. C#算术运算符

    一.C#算术运算符 C#语言的算术运算符主要用于数学计算中. 二.示例 using System;using System.Collections.Generic;using System.Linq; ...

  6. Spring3中好用的工具类收集

    1) 请求工具类 org.springframework.web.bind.ServletRequestUtils //取请求参数的整数值: public static Integer getIntP ...

  7. cocos2dx观察者模式EventListenerCustom的使用(代替NotificationCenter)

    在cocos2dx 3.x版本已经被弃用,改用EventDispatcher代替. 观察者模式是MVC模式的一种,一个model可以对应很多个观察者view,当model收到事件通知时,对应的view ...

  8. 53. Maximum Subarray@python

    Given an integer array nums, find the contiguous subarray (containing at least one number) which has ...

  9. NOIP模拟赛 篮球比赛2

    篮球比赛2(basketball2.*) 由于Czhou举行了众多noip模拟赛,也导致放学后篮球比赛次数急剧增加.神牛们身体素质突飞猛进,并且球技不断精进.这引起了体育老师彩哥的注意,为了给校篮球队 ...

  10. 201621123080 《Java程序设计》第2周学习总结

    Week02-Java基本语法与类库 1. 本周学习总结 本周主要学习了java的数据类型.运算符,String类,java的简单输入输出与流程控制. 在做题上对String和数组的理解与区分仍不够深 ...