文档章节

MySQL优化(2)

eatnothing
 eatnothing
发布于 2016/05/25 09:48
字数 1468
阅读 62
收藏 2

Mysql

Mysql被设计为一个单进程多线程架构的数据库。

在mysql命令行中可以使用system调用linux命令

Mysql数据库区别于其他数据库的特点是其插件式的表存储引擎

InnoDB存储引擎
  • InnoDB存储引擎支持事务,其设计目标是面向在线事务处理,支持行锁设计,支持外键,默认读取操作不会产生锁
  • InnoDB存储引擎的表单单独存放在一个ibd文件中.
  • InnoDB通过多版本并发控制(MVCC)来获得高并发性,并且实现了sql标准的四种隔离级别。
  • 对于表中的数据,InnoDB存储引擎采用了聚集的方式,因此每张表的存储都是按主键的顺序进行存放,如果没有显示的定义主键,InnoDB存储引擎会为每一行生成6个字节的ROWID,并以此为主键。
MyISAM存储引擎
  • MyISAM存储引擎不支持事务,支持表锁设计,支持全文索引
  • MyISAM只缓存索引文件,不缓冲数据文件
  • MyISAM存储引擎表由MYD和MYI组成,MYD用来存放数据文件,MYI用来存放索引文件
Memory存储引擎
  • Memory存储引擎将表中的数据存储到内存中,如果数据库重启或者发生故障,表中的数据都会消失,适用于临时存储数据的临时表,
  • Memory默认的索引是哈希索引
  • 支持表锁,不支持TEXT和BLOB类型,并发性能较差

可以使用SHOW ENGINES\G;查看MySQL数据库所支持的存储引擎

连接MySQL:连接MySQL操作是一个连接进程和MySQL数据库实例进行通信。常见的进程通信方式有:管道,共享内存,TCP/IP套接字,UNIX域套接字。

InnoDB存储引擎:是MySql5.5默认的引擎,InnoDB存储引擎是多线程的模型,因此后台有不同的线程来处理不痛的任务

master thread: 负责将缓冲池的数据异步刷新到磁盘,保证数据的一致性

IO Thread:InnoDB使用了大量AIO(Async IO)来处理写IO请求

Purge Thread:Purge Thread来回收已经使用并分配的undo页面

InnoDB存储引擎会监控对表上各索引的查询,如果观察到建立索引可以带来速度提升,则建立哈希索引,称之为自适应哈希索引,一般时间复杂度为o(1)

异步IO:当前数据库系统都采用异步IO来处理磁盘操作(AIO),与AIO相对的是Sync IO既每次进行一次IO操作,需要等待此次操作结束才能继续接下来的操作

日志文件

日志文件分为:1)错误日志2)二进制日志3)慢查询日志4)查询日志

错误日志:用户可以通过命令show variables like 'log_error'定位文件位置,默认错误文件名为主机名称,

慢查询日志:可以在Mysql启动时设置一个阀值,将运行时间超过该值的所有sql语句都记录到慢查询日志中,

查询慢查询时间show variables like 'long_query_time'\G

查询是否设置慢查询show variables like '%slow%'

设置打开慢查询set global slow_query_long ='on'

Mysql5.1开始可以将慢查询日志记录放入一张表中show create table mysql.slow_log\G,参数log_out指定了慢查询输出的格式,默认为FILEshow variables like 'log_output'\G 可以将它改为TABLEset global log_output='table'

二进制日志:主要有一下集中作用 1)恢复 2)赋值 3)审计

在UNIX系统下本地连接Mysql可以采用UNIX域套接字方式,位置在show variables like 'socket'\G

索引组织表:如果在创建表的时候没有显示的创建主键,则InnoDB会按照下列方式来选择或者创建主键 1)首先判断表中是否有非空的唯一索引,如果有,则将该列定义为主键 2)当表中有多个非空唯一索引,InnoDB存储引擎将选择建表时第一个定义的非空唯一索引为主键

约束:实体完整性保证表中有一个主键,用户可以通过设置Primary Key和Unique Key约束来保证实体的完整性 对错误的约束:如向not null的字段插入一个null的值,Mysql数据库会将其更改为0再进行插入,如果用户想通过约束对于数据库非法数据的插入或更新,既MYSQL报错而不是警告,那么用户必须设置参数sql_mode用来严格审查输入的数set sql_mode = 'strict_trans_tables';

Mysql不支持传统的check约束,但是通过enum和set类型可以解决部分约束需求,也可以创建触发器来对表进行约束,最多可以为一个表建立6个触发器,当前Mysql只支持for each row触发方式按照每行进行触发

外键约束:外键用来保证参照完整性,一般来说,称被引用的表为父表,引用的表为子表.可定义的操作

  • cascade:当父表发生delete或update操作时,相应的子表中的数据进行delete或update操作
  • no action:当父表发生delete或update操作时跑出错误不允许这类操作发生
  • restrict:表示父表进行delete或update操作时,抛出错误,不允许这类发生

Mysql查看表的命令是show tables,但是会把视图和基本表都列出来,如果用户只想看到基本表那么执行select * from information_schema.tables where table_type ='base table' and table_schema =database()\G; 如果用户只想看到视图执行select * from information_schema.views where table_schema=database()\G;.

© 著作权归作者所有

eatnothing
粉丝 38
博文 128
码字总数 68736
作品 0
昌平
程序员
私信 提问
MySQL基础、管理、高级、用法、架构、优化好文章收集

基础 管理 高级 1、mysql分区技术 http://my.oschina.net/liting/blog/465149 2、mysql 外键(foreign key)的详解和实例 用法 1、mysql实现用拼音搜索中文的数据库实现 http://my.oschina....

tomener
2016/04/25
149
0
Mysql:优化分析(值得深思)

Mysql优化分析 Mysql作为现在的主流关系型数据库,在优化上值得深思啊! 不能只停留在如何使用Mysql,而不去思考如何优化的问题啊。 在谈到Mysql优化方面,Mysql在这方面有专门的文档说明这个...

王木东
2018/07/13
0
0
高性能MySQL06-查询优化(慢查询)

一、分析原因 SQL语句慢查询的原因有多种,如: 1)数据方面: 需要查询的表数据量太大导致性能下降; 是否向数据库请求了不需要的数据行或数据列; MySQL是否在扫描额外的记录 2)SQL语句太...

架构师springboot
05/15
0
0
【上海】大型美资互联网公司招聘DBA(MYSQl)【猎头职位】

有意向的同学请把简历发送至poversky@live.jp,在title中注明投递职位。也可以通过 qq了解职位详情178350902。 大型美资互联网公司招聘DBA(MYSQl) 薪酬-年薪15 - 20w 职位描述: 1、支持和...

Caffrey
2012/03/23
290
3
mysql操作系统和硬件的优化

mysql操作系统和硬件的优化 一、CPU 那个更好,更快的CPU还是更多的CPU?、 二、平衡内存和磁盘资源 三、随机的I/O和顺序的I/O 四、 使用固态硬盘(闪存) 五、raid的性能优化:不做过多的记...

技术小胖子
2017/11/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【AI实战】手把手教你深度学习文字识别(文字检测篇:基于MSER, CTPN, SegLink, EAST等方法)

文字检测是文字识别过程中的一个非常重要的环节,文字检测的主要目标是将图片中的文字区域位置检测出来,以便于进行后面的文字识别,只有找到了文本所在区域,才能对其内容进行识别。 文字检...

雪饼
今天
8
0
思维导图XMind 8 Pro 绿化方法(附序列号)

按部就班: Step 1 -全新下载最新版本的 Xmind 8(注必须是英文官方的版本,中文代{过}{滤}理网站的版本修改过,无法使用pj); Step 2 -安装完毕后,点击文末的下载按钮下载pj补丁文件包,将...

一只小青蛙
今天
10
0
数据结构(ER数据库)设计规范

表命名规范 表命名的规则分为3个层级,层级之间通过_分割,例如b_r_identity、d_l_identity。规约为: [leavel]_[type]_[name] [leavel] 表示数据库表的层级和功能,分为: s:业务无关的系统...

随风溜达的向日葵
今天
7
0
阿里Sentinel控制台源码修改-对接Apollo规则持久化

https://github.com/alibaba/Sentinel/wiki/%E5%9C%A8%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Sentinel 动态规则扩展 https://github.com/alibaba/Sentinel/wiki......

jxlgzwh
昨天
10
0
在Linux系统中创建SSH服务器别名

如果你经常通过 SSH 访问许多不同的远程系统,这个技巧将为你节省一些时间。你可以通过 SSH 为频繁访问的系统创建 SSH 别名,这样你就不必记住所有不同的用户名、主机名、SSH 端口号和 IP 地...

老孟的Linux私房菜
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部