原文地址: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. POJ 1067 取石子游戏 (威佐夫博奕,公式)

    题意: 有两堆石子,两个人轮流取石子.规定每次有两种取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者为胜者.给定两堆石子数量,问先手的输赢? ...

  2. 2012-2013 ACM-ICPC, NEERC, Central Subregional Contest H Milestones1 (暴力)

    预处理+暴力,每个颜色都是独立的,求个前缀和,减一减判断一个在区间内颜色是否存在. 算了算复杂度好像有点勉强,但是还是过了,学了主席树以后用主席树在做一下 #include<bits/stdc+ ...

  3. Servlet中的属性(attribute)和参数(parameter)的区别

    1.引子 初学者对属性(attribute)和参数(parameter)容易搞混.没搞清他们的区别,项目中就可能出现一此莫名其妙的问题. 2.两者的区别 1) 属性(attribute) 属性是在后台 ...

  4. SubSonic框架使用图解

    简介:SubSonic框架是一个优秀的.开源的ORM映射框架,同时提供符合自身需要的代码生成器. 官方下载地址:http://subsonicproject.com/Download 明白了SubSo ...

  5. java基础—GUI编程(一)

    一.AWT介绍

  6. 深入理解ES6箭头函数的this以及各类this面试题总结

    ES6中新增了箭头函数这种语法,箭头函数以其简洁性和方便获取this的特性,俘获了大批粉丝儿 它也可能是面试中的宠儿, 我们关键要搞清楚 箭头函数和普通函数中的this 一针见血式总结: 普通函数中的 ...

  7. 【Python学习之五】高级特性3(切片、迭代、列表生成器、生成器、迭代器)

    3.列表生成器(List Comprehensions) 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式.举个例子,要生成list ...

  8. 02Vs2013常用路径配置

    1.设置头文件路径 项目 -> xxx属性页 -> 配置属性 -> C/C++ -> 常规 -> 附加包含目录. 2.包含 x.lib 库路径 项目 -> xxx属 ...

  9. destoon 列表页面增加手动选择排序方式

    在mobile/include/mall.inc.php  行60  $order = $MOD['order']; 之前增加 排序方式判断 如果有order参数则$order接受参数,没有就用默认  ...

  10. ubuntu 设置定时任务

    crontab -l  #查看详情crontab -e #设置定时任务 * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时 ...