mysql:优化

Wesley13
• 阅读 585

看了描述大概明白题主困惑是什么了。题主应该是误以为,由begin,增删改查语句,commit组成的才叫事务。其实一般这种叫事务块。我原来也有这种误解。而没有begin,end包围的单独的每条语句也都是事务(如果开了自动提交的话,而在很多数据库里默认都开,比如题主说的mysql)。再就是写冲突问题。并发写的时候,单机数据库一般就是加锁,像mysql,分布式的多会用乐观提交,先写,提交的时候发现冲突了再回滚。

https://www.jianshu.com/p/9457c88c52d1

在创建表的时候可以选择用哪个引擎:

create table xxx
(
...
)
ENGINE=InnoDB;

 视图就是检索表的动态变量

磁盘IO是数据库的性能瓶颈

复制的搭建

数据的切分

MyISAM是mysql5.1及之前版本的默认引擎,很久未被更新。现在选用的都是innodb

数据库:物理操作系统文件或其他形式文件类型的集合。在mysql数据库中,数据库文件可以是frm、myd、myi、ibd结尾的文件。当使用ndb引擎时,数据库的文件可能不是操作系统上的文件,而是存放于内存之中的文件,但是定义仍然不变。

实例:mysql数据库由后台线程以及一个共享内存区组成。共享内存可以被运行的后台线程所共享。需要牢记的是,数据库实例才是真正用于操作数据库文件的。

这两个词有时可以互换使用,不过两者的概念完全不同。在mysql数据库中,实例与数据库的关系通常是一一对应的,即一个实例对应一个数据库,一个数据库对应一个实例。但是,在集群情况下可能存在一个数据库被多个数据实例使用的情况。

mysql被设计为一个单进程多线程架构的数据库,这点与SQL Server比较类似,但与Oracle多进程的架构有所不同(Oracle的Windows版本也是单进程多线程架构的)。这也就是说,mysql数据库实例在系统上的表现就是一个进程。

mysql由以下几部分组成:

连接池组件

管理服务和工具组件

SQL接口组件

查询分析器组件

优化器组件

缓冲(Cache)组件

插件式存储引擎

物理文件

存储引擎是基于表的,而不是数据库。

mysql存储

看my.ini/my.cnf文件.的datadir

该文件名下面类似a.frm、a.MYD、a.MYI等就是数据库的文件

myisam innodb 区别(不同类型不能相互复制)


同大多数数据库一样,InnoDB有页的概念(也可以称为块),页是InnoDB磁盘管理的最小单位。

我们知道对于MyISAM引擎而言,数据文件和索引文件是分离的。通过索引查找到后,就得到了数据的物理地址,然后根据地址定位数据文件中的记录即可。这种方式也叫"非聚集索引"。
而对于Innodb引擎而言,数据文件本身是索引文件!通俗点说,叶子节点上,MyISAM存储的是记录的物理地址,而Innodb上存储的是数据内容,这种方式即"聚集索引"。

参考:

《mysql技术内幕(innodb存储引擎)》

MyISAM与InnoDB两者之间区别与选择

为什么现在的MySQL都要使用innoDB引擎

InnoDB还是MyISAM 再谈MySQL存储引擎的选择

从程序员的角度深入理解MySQL

暂时的学习路线是《MySQL必知必会》-〉《MySQL技术内幕》-〉《高性能MySQL》。


怎样看mysql性能

慢查询日志

mysql> show variables like '%slow%';

mysql> show global status like '%slow%';

连接数

mysql> show variables like 'max_connections';

进程使用情况

show global status like ‘Thread%’;

https://www.cnblogs.com/jackchen001/p/6964411.html

https://www.cnblogs.com/fjping0606/p/5821289.html

查询优化、索引优化、库表结构优化(Schema 与数据类型优化 )需要齐头并进,一个不落。

不建议mysql分区表

日志

mysql数据库常见的日志文件有:

错误日志(error log)

二进制日志(binlog)

慢查询日志(slow query log)

查询日志(log)

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这