关于MYSQL的优化全面详解_Mysql

先说一下最常见基本的系统瓶颈:

1、硬盘搜索。现代磁盘的平均时间通常小于10ms,因此理论上我们每秒能够大约搜索1000次,这样我们在这样一个磁盘上搜索一个数据,很难优化,一个办法就是将数据分布在多个磁盘。
2、IO读写。就磁盘来讲,一般传输10-20Mb/s,同样的,优化可以从多个磁盘并行读写。
3、CPU周期。我们将数据读入内存后,需要对它进行处理并获取我们需要的结果。表相对于内存较小时常见的限制因素。但是对于小表,速度通常不成问题。
4、内存带宽。当CPU需要的数据超出CPU缓存,主缓存带宽就成为内存的一个瓶颈。

再说一下mysql设计上边的瓶颈:(本人了解一下它的数据库引擎,wiki上边说的一些缺陷)
MyISAM是MySQL的默认数据库引擎 (5.5版之前),由早期的ISAM所改良。虽然性能极佳,但却有一个缺点:不支持code error!(transaction)。不过,在这几年的发展下,MySQL也导入了InnoDB (另一种数据库引擎),以强化code error!与并发违规处理机制,后来就逐渐取代MyISAM。
每个MyISAM数据表,皆由存储在硬盘上的3个文件所组成,每个文件都以数据表名称为主文件名,并搭配不同扩展名区分文件类型:
.frm--存储数据表定义,此文件非MyISAM引擎的一部份。
.MYD--存放真正的数据。
.MYI--存储索引信息。

1、InnoDB可借由交易记录档 (Transaction Log) 来恢复程序崩溃 (crash),或非预期退出所造成的数据错误;而MyISAM遇到错误,必须完整扫描后才能重建索引,或修正未写入硬盘的错误。InnoDB的修复时间,大略都是固定的,但MyISAM的修复时间,则与数据量的多寡成正比。相对而言,随着数据量的增加,InnoDB会有较佳的稳定性。
2、MyISAM必须依靠操作系统来管理读取与写入的高速缓存,而InnoDB则是有自己的读写高速缓存管理机制。(InnoDB不会将被修改的code error!立即交给操作系统) 因此在某些情况下,InnoDB的数据访问会比MyISAM更有效率。
3、InnoDB目前并不支持MyISAM所提供的压缩与 terse row formats,所以对硬盘与高速缓存的使用量较大。因此MySQL从5.0版开始,提供另一个负载较轻的格式,他可减少约略 20% 的系统负载,而压缩功能已计划于未来的新版中推出。
4、当操作完全兼容ACID (code error!) 时,虽然InnoDB会自动合并数笔连接,但每次有code error!产生时,仍至少须写入硬盘一次,因此对于某些硬盘或磁盘阵列,会造成每秒200次的code error!处理上限。若希望达到更高的性能且保持code error!的完整性,就必使用软盘高速缓存与电池备援。当然 InnoDB 也提供数种对性能冲击较低的模式,但相对的也会降低code error!的完整性。而MyISAM则无此问题,但这并非因为它比较先进,这只是因为它不支持code error!。

(InnoDB,是MySQL的数据库引擎之一,为MySQL AB发行binary的标准之一。InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。)

时间: 2024-09-10 15:53:28

关于MYSQL的优化全面详解_Mysql的相关文章

Mysql Limit 分页查询优化详解_Mysql

select * from table LIMIT 5,10; #返回第6-15行数据 select * from table LIMIT 5; #返回前5行 select * from table LIMIT 0,5; #返回前5行 我们来写分页 物理分页 select * from table LIMIT (当前页-1)*每页显示条数,每页显示条数; MySQL之Limit简单优化.md 同样是取90000条后100条记录,传统方式还是改造方式? 传统方式是先取了前90001条记录,取其中最

Mysql my.ini 配置文件详解_Mysql

Mysql my.ini 配置文件详解 #BEGIN CONFIG INFO #DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负载大 #TYPE: SYSTEM #END CONFIG INFO # # 此mysql配置文件例子针对4G内存 # 主要使用INNODB #处理复杂队列并且连接数量较少的mysql服务器 # # 将此文件复制到/etc/my.cnf 作为全局设置, # mysql-data-dir/my.cnf 作为服务器指定设置 # (@loc

MySQL常用聚合函数详解_Mysql

一.AVG AVG(col) 返回指定列的平均值 二.COUNT COUNT(col) 返回指定列中非NULL值的个数 三.MIN/MAX MIN(col):返回指定列的最小值 MAX(col):返回指定列的最大值 四.SUM SUM(col) 返回指定列的所有值之和 五.GROUP_CONCAT GROUP_CONCAT([DISTINCT] expr [,expr ...]              [ORDER BY {unsigned_integer | col_name | expr}

mysql中explain用法详解_Mysql

如果在select语句前放上关键词explain,mysql将解释它如何处理select,提供有关表如何联接和联接的次序. explain的每个输出行提供一个表的相关信息,并且每个行包括下面的列: 1,id   select识别符.这是select的查询序列号.2,select_type 可以为一下任何一种类型simple  简单select(不使用union或子查询)primary   最外面的selectunion    union中的第二个或后面的select语句dependent uni

MySQL用户权限管理详解_Mysql

用户权限管理主要有以下作用: 1. 可以限制用户访问哪些库.哪些表 2. 可以限制用户对哪些表执行SELECT.CREATE.DELETE.DELETE.ALTER等操作 3. 可以限制用户登录的IP或域名 4. 可以限制用户自己的权限是否可以授权给别的用户 一.用户授权 复制代码 代码如下: mysql> grant all privileges on *.* to 'yangxin'@'%' identified by 'yangxin123456' with grant option;  

MySQL外键使用详解_Mysql

最近有开始做一个实验室管理系统,因为分了几个表进行存储·所以要维护表间的关联··研究了一下MySQL的外键. (1)只有InnoDB类型的表才可以使用外键,mysql默认是MyISAM,这种类型不支持外键约束 (2)外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作: (3)外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据. 使两张表形成关联,外键只能引用外表中的列的值! (4)建立外键的前提: 两个表必须是InnoDB表类型. 使用在外键关系的域必须为索

MySQL的表分区详解_Mysql

一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了.如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区.当然也可根据其他的条件分区. 二.为什么要对表进行分区为了改善大型表以及具有各种访问模式的表的可伸缩性,可管理性和提高数据库效率.分区的一些优点包括:      1).与单个磁盘或文件系统分区相比,可以存储更多的数据.      2).对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关的

MySQL笔记之数据类型详解_Mysql

字符型数据 字符型数据可以使用定长或变长的字符串来实现,其不同点在于固定长度的字符串使用空格向右填充,以保证占用同样的字节数;变长字符串不需要向右填充,并且所有字节数可变. char                         定长型,字节长度固定,最大长度为255字节,可以使用char(20)这种方式限定长度,查询速度快,但不灵活 varchar                    变长型,字节长度随数据量变化,最多可存储65535字节,varchar(20)可以限定长度,查询速度不及c

深入mysql基础知识的详解_Mysql

1.每个客户端连接都会从服务器进程中分到一个属于它的线程.而该连接的相应查询都都会通过该线程处理. 2.服务器会缓存线程.因此并不会为每个新连接创建或者销毁线程. 3.当发起对MySQL服务器的连接时,服务器会对 username,host,password进行验证.而一旦连接上,服务器就会检测其权限. 4.MySQL查询缓存只会保存 SELECT 语句和相应的结果.在解析查询之前会询问查询缓存,如果查询缓存中能找到相应的结果就直接返回结果. 5.MySQL的 data 文件夹下会根据每个数据库