原文地址: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. C++string类型转换为C数组

    #include <string> #include <iostream> using namespace std; int main(){ string str; str.a ...

  2. 无旋Treap【模板】P3369

    题目 详情见链接. 代码 #include<cstdio> #include<iostream> #define outd(x) printf("%d\n" ...

  3. webpack-dev-server配置指南webpack3.0

    最近正在研究webpack,听说webpack可以自己搭建一个小型的服务器(使用过vue-cli的朋友应该都见识到过),所以迫不及待的想要尝试一下.不过,在实际操作中发现,用webpack搭建服务器仍 ...

  4. UIDeviceOrientation 和 UIInterfaceOrientation

    有时候,我们处理自动布局时,需要获取到屏幕旋转方向: 以下为本人亲测: UIInterfaceOrientation: 我们需要在- (void)viewDidLoad或其他方法中添加观察者,检测屏幕 ...

  5. 前端开发面试题之JavaScript(转自公众号)(1)

    js基本数据类型:Undefine Number Null Boolean String; js内置对象:数据封装类对象:object.Array.Boolean.String: 其他:Functio ...

  6. 二叉搜索树详解(Java实现)

    1.二叉搜索树定义 二叉搜索树,是指一棵空树或者具有下列性质的二叉树: 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值: 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根 ...

  7. 扫雷游戏 NOIP(入门)

    题目描述: 扫雷游戏是一款十分经典的单机小游戏.它的精髓在于,通过已翻开格子所提示的周围格地雷数,来判断未翻开格子里是否是地雷. 现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格的周围格地雷 ...

  8. linux文件属性文文件类型知识

    文件类型分别介绍: 1.普通文件:我们通过用ls  -l来查看xxx.sql的属性,可以看到第一列内容为-rw-r--r--,值得注意的是第一个符号是-(英文字符减号),在Linux中,以这样的字符开 ...

  9. TB平台搭建之一

    最近在搭建公司的testbench,主要有一下总结: 1.TB主要有两部分:部分一,软件部分主要用C写的,她的作用是写硬件的驱动(其实就是让核的外围设备可以正常工作或工作到特定的环境上)甚至有可能写整 ...

  10. 怎么删除服务中的mysql服务

    可以进WINDOWS的管理里查看MYSQL的服务,把它停止或以DOS下用命令停止1.如果要卸载MYSQL执行下面命令:DOS下>mysqld -remove mysql2.启动MYSQL: DO ...