MySQL


影响数据库慢的因素:

1、服务器硬件 :当数据容量大于服务器内存时,增加服务器内存。定时写入磁盘,而不是每次都写入磁盘,内存频率高,读取数据快。

(1)磁盘:1、传统磁盘

                       2、RAID磁盘                

2、服务器系统

3、数据库存储引擎的选择

4、数据库参数配置

5、数据库结构设计和sql语句选择

MySQL行级锁、表级锁、页级锁详细介绍:

表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写操作。如果你是写锁,则其它进程则读也不允许
行级,,仅对指定的记录进行加锁,这样其它进程还是可以对同一个表中的其它记录进行操作。
页级,表级锁速度快,但冲突多,行级冲突少,但速度慢。所以取了折衷的页级,一次锁定相邻的一组记录。

1) 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
2) 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
3) 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

MySQL常用数据引擎:

1:MyISAM

      (1)不支持事物

      (2)存储结构:数据文件(.MYD),索引文件(.MYI)和结构文件(.frm),可以在不同服务器上拷贝数据文件和索引文件。

     (3)加锁和并发

 加锁:对整张表进行加锁,而不是行。
          并发:在读数据的时候,所有的表上都可以获得共享锁(读锁),每个连接都不互相干扰。
                 在写数据的时候,获得排他锁,会把整个表进行加锁,而其他的连接请求(读,写请求)都处于等待中。
   (4) 修复表
   (5)延迟更新索引。MYISAM 默认把DELAY_KEY_WRITE开启, 整个选项是MYISAM引擎独有的。
   (6)压缩表
  (7)列索引。可以基于BLOB或TEXT类型列的前500个字符,创建相关索引。
总结: myisam在索引层和压缩层的卓越贡献,所以我们经常把myisam用于slave层,供客户端去读取。而myisam在写库操作的时候会产生排他锁,如果     写操作一直占用的话,那么其他连接请求一直就处于等待中,从而造成堵塞,甚至能把服务器dang掉。
        适用场景:(1)非事物型应用(2)只读型应用(3)空间型应用
2、InnoDB
      InnoDB表由共享表空间、日志文件组(redo文件组)、表结构定义文件组成。
 1、InnoDB支持行级锁,行级锁可以最大程度的支持并发,行级锁是游存储引擎层进行实现的。

使用共享表空间存储方式时,Innodb的所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成,一个表可以跨多个文件 存在,所  以其大小限制不再是文件大小的限制,而是其自身的限制。从Innodb的官方文档中可以看到,其表空间的最大限制为64TB,也就是说,Innodb的单表限制基本上也在64TB左右了,当然这个大小是包括这个表的所有索引等其他相关数据。而在使用单独表空间存储方式时,每个表的数据以一个单独的文件来存放,这个时候的单表限制,又变成文件系统的大小限制了。

共享表空间与独占表空间可以通过参数innodb_file_per_table来转换,若为1,则开启独占表空间,否则,开启共享表存储。

在服务器资源有限,单表数据不是特别多的情况下独立表空间明显比共享方式效率更高 . 但是MySQL 默认是共享表空间 

共享表空间与独占表空间可以通过参数innodb_file_per_table来转换,若为1,则开启独占表空间,否则,开启共享表存储。

在服务器资源有限,单表数据不是特别多的情况下独立表空间明显比共享方式效率更高 . 但是MySQL 默认是共享表空间 

具体的共享表空间和独立表空间优缺点如下:

共享表空间:
优点:
可以放表空间分成多个文件存放到各个磁盘上(表空间文件大小不受表大小的限制,如一个表可以分布在不同步的文件上)。数据和文件放在一起方便管理。
缺点:
所有的数据和索引存放到一个文件中以为着将有一个很常大的文件,虽然可以把一个大文件分成多个小文件,但是多个表及索引在表空间中混合存储,这样对于一个表做了大量删除操作后表空间中将会有大量的空隙,特别是对于统计分析,日值系统这类应用最不适合用共享表空间。

独立表空间:在配置文件(my.cnf)中设置: innodb_file_per_table

优点:
1.  每个表都有自已独立的表空间。
2.  每个表的数据和索引都会存在自已的表空间中。
3.  可以实现单表在不同的数据库中移动。
4.  空间可以回收(除drop table操作处,表空不能自已回收)
a)         Drop table操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以通过:alter table TableName engine=innodb;回缩不用的空间。
b)         对于使innodb-pluginInnodb使用truncate table也会使空间收缩。
c)         对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理。
缺点:
单表增加过大,如超过100G

3、CSV存储引擎

 (1)以CSV格式进行数据存储

 (2)所有的列必须都不能为null

 (3)不支持索引

  (4)不适合大表,不适合在线处理

  适合作为数据交换的中间表

Archive存储引擎:

  (1)已Zlib对表数据进行压缩,磁盘I/O更少;

  (2)数据存储在ARZ为后缀的文件中

  (3)只支持insert和select操作

  (4)只允许在自增ID上加索引

Memory存储引擎: 

  (1)所有数据保存在内存中,数据易丢失

  (2)支持HASH(等值查找)索引和BTree(范围查找)索引

  (3)所有字段都为固定长度varchar(10)和char(10)

  (4)不支持BLOG和TEXT等大字段

  (5)使用表级锁

  使用场景:

   (1)用于查找或者映射表,例如邮编和地区的对应表

   (2)用于保存数据分析中产生的中间表

   (3)用于缓存周期性聚合数据的结果

Federated引擎:默认禁止

    (1)提供访问远程MySQL服务器上表的方法

    (2)本地不存储数据,数据全部方放在远程服务器上

    (3)本地需要保存表结构和远程服务器的连接信息

MySQL配置文件详解:http://www.jb51.net/article/48082.htm

基准测试:
              免费的基准测试:mysqlslap,sysbench

MySQL数据类型: http://mrxiong.blog.51cto.com/287318/1651098/

数据库结构优化:
   
            1、关联表越多,性能越差

范式和反范式: http://www.2cto.com/database/201505/398621.html   http://www.2cto.com/database/201207/138230.html

优化:

1、sql语句优化。select *,NOT NULL之类的 少用  http://www.cnblogs.com/zengxiangzhan/archive/2009/12/04/1617186.html

2、建立索引。

     索引优化:  http://www.jb51.net/article/76702.htm

       (1)索引列上不能使用表达式或函数

       (2)联合索引,经常被使用的列优先,选择性高的列优先,宽度小的列优先

       (3)覆盖索引,可以优化缓存,减少磁盘IO操作,可以减少随机IO,随机IO操作变为顺序IO操作,可以避免对InnoDB主键索引的二次查询

       (4)使用索引扫描来优化排序

3、分库分表,MyCat中间件(少用大表),大表历史数据的归档

4、处理大事务:(1)避免处理太多数据,(2)移出事物中不必要的select操作

5、数据库参数优化。

6、数据库表结构优化。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值