1、show variables like 'autocommit'; 查看是否是自动提交
set autocommit=0; //设置不是自动提交
set autocommit=1; //设置为自动提交
2、mysql服务器层不管理事务, 事务是由下层的存储引擎实现的, 所以在同一个事务中, 使用多种存储引擎是不可靠的
如果在事务中混合使用事务型和非事务型的表(如InnoDB和MyISAM表),正常提交的情况下不会有问题, 但是如果回滚,非事务型表上就无法撤消
3、隐式和显示锁定
隐式锁定:在事务执行过程中, 随时都可以执行锁定, 锁只有在执行commit或rollback时才释放, InnoDB会根据隔离级别在需要的时候自动加锁
InnoDB显式锁定:
select ... lock in share mode
select ... for update
mysql 也支持lock tables 和unlock tables语句,这是服务器层实现的, 和存储引擎无关, 他们有自己的用途,不能替代事务处理,如果应用需要用到事务, 还是应该选择事务存储引擎
4、多版本并发控制MVCC?
是行级锁的一个变种,避免加锁操作,大都实现非阻塞读操作, 写操作也只锁定必要的行
分为:乐观并发控制, 悲观并发控制
5、存储引擎
每个表会有同名的.frm文件,保存表的定义
6、show tables status;显示所有表的信息
show table status like 'iv_log'; //显示表iv_log表信息, 表名,存储引擎, 行数
index_length:索引的大小(以字节为单位)
auto_increment:下一个auto_increment的值
7、InnoDB引擎
InnoDB数据存储在表空间
采用MVCC支持高并发
InnoDB事务模型和锁
崩溃回复, MyISAM不能恢复
8、MyISAM存储引擎
不支持事务和行级锁
对整张表加锁, 而不是针对行
索引特性:对于blob、text等长字段, 也可以基于前500个字符创建索引
不建议混合使用多个存储引擎
对于只记录日志的表, 则可以使用MyISAM
对于只读多,写少, 可以使用MyISAM
不要轻易相信MyISAM比InnoDB快
9、修改表的存储引擎
alter table mytable engine = InnoDB;
问题:执行时间长,mysql会按行将数据从原表复制到一张新的表, 替代方案, 手工分批进行表复制
性能:响应时间
性能优化的副产品:吞吐量, 如果响应时间快了, 吞吐量就会多
搞清楚时间花在哪里
优化第二个原则:无法测量就无法有效地优化, 所以第一步应该测量时间花在什么地方
很多人在优化时, 都将精力放在修改一些东西上, 很少进行精确的测量。我们的做法完全相反,将90%的时间来测量响应花在哪里。如果通过测量没找到答案,要么是测量方式错了, 要么是测量的不够完整。
测出时间花费在哪里, 和知道为什么花在那里, 是两码事
10、set profiling = 1; //在服务器上执行的所有语句,都会测量其耗费的时间
当一条查询提交给服务器时,些工具会记录剖析信息到一张临时表
show profiles;//显示所有查询
show profile from query 1; //显示查询序号为1的查询详细,显示每个步骤及其花费时间
11、show processlist; //显示所有连接数据库的进程
12、数据类型的优化
更小的通常更好:尽量使用可以正确存储数据的最小数据类型, 因为占用更少的磁盘、内存、cpu
简单就好:简单数据类型操作需要更少的cpu周期, 如日期使用日期类型,ip地址使用整型
尽量避免NULL:因为查询中包含null的列,使得索引、索引统计和值比较都更复杂
当为NULL的列被索引时, 每个索引记录需要一个额外的字节
如果在该列上建索引,则设计成not NULL
13、整数类型
tinyint 占用空间:8
smallint 16
mediumint 24
int 32
bigint 64
存储值的范围从:-2指数(N-1) 到 2指数(n-1)-1 n是存储空间的位数
可选属性:unsigned, 存储范围提高一倍
tinyint unsigned 0-255
有符号和无符号使用相同的存储空间, 并具有相同的性能,
mysql可以为整数类型指定宽度, 如int(11), 对大多数应用这是没意义的:它不会限制值的合法范围,只是规定了mysql的一些交互工具(客户端)用来显示字符的个数, 对于存储和计算来说, int(1)和int(20)都是相同的
14、实数类型
带有小数, 它们不只是为了存储小数部分, 也可以使用decimal存储比bigint还大的整数
float, double占用的比decimal空间少
decimal:存储精确的小数
对于数据量大时, 可以使用bigint替换decimal, 如将货币单位改为分
15、字段串类型
varchar、char存储与存储引擎有关
varchar:可变长字符串, 越短的字符串占用的空间越少, varchar需要使用一个或两个额外字节记录字符串的长度如果列的最大长度小于或等于255字节,则使用一个字节表示, 否则使用两个字节
如:使用latin1字符集,varchar(10)的列需要11个字符存储空间, varchar(1000)需要1002个字节
varchar节省了存储空间,所以对性能也有帮助, 但是行是变长的, 在update时可能使用行变得比原来更长,这导致做额外的工作。innoDB需要分裂页来使行可以放进页内
char:定长,适合存储很短的字符串, 长度固定, 如存储密码的MD5值, 不容易产生碎片
char(1):只需要一个字节, 但varchar(1)需要2个字节, 另外一个记录长度
16、blob、text类型
专门的存储区存储, 使用一个指针,指向实际的值
17、日期和时间类型
datatime:范围:1001年到9999,精度为秒, 使用8个字节
timestamp:范围:1970.1.1到2038, 使用8个字节
存放微秒怎么办?
没有提供合适的数据,可以使用bigint存储
18、设计的陷阱
太多的列:服务器层和存储引擎层之间通过行缓冲格式拷贝数据,然后在服务器层将缓冲内容解码成各个列
19、范式和反范式
范式的优点:更新操作比反范式的要快, 只修改更少的数据, 表小,
缺点:关联表查询
反范式的优点:避免关联
混用范式化和反范式化
20、缓存表和汇总表
21、计数器表
用户的朋友数
网站的访问量:一条数据,并发慢, 可以创建100数据, 然后随机更新其中一条数据,再统计100数据的sum
22、更快的读,更慢的写
增加额外索引
增加冗余列
创建缓存表和汇总表
相关推荐
【狂神MySQL笔记】是一份全面且深入的MySQL学习资源,涵盖了从基础到高级的各种MySQL技术知识点。作为数据库领域的核心工具,MySQL因其高效、稳定、开源等特性,被广泛应用于各种规模的企业和项目中。这份笔记旨在...
尚硅谷的MySQL笔记可能是为了帮助学习者深入理解和掌握MySQL的相关知识而编写的。这份笔记可能包含了从基础概念到高级特性的全面讲解,包括但不限于SQL语言、数据类型、数据库设计、索引、事务处理、视图、存储过程...
这份"MySQL笔记"涵盖了其主要知识点,并且每个概念都配有实例,使得学习更为直观易懂。以下是对这些笔记的详细解析: 一、基础概念 MySQL的基础部分包括数据库、表、字段、记录等基本元素的创建、修改和删除。理解...
### MySQL 笔记知识点梳理 #### 一、数据库概述与分类 - **Microsoft SQL Server**:易用性好,适合企业级应用。 - **MySQL**:开源免费,广泛应用于中小型项目及个人项目。 - **Oracle**:适用于Java开发者,特别...
MySQL笔记
"狂神说Java"的MySQL笔记可能深入探讨了如何在Java编程环境中与MySQL进行交互,这对于我们理解数据库管理和开发至关重要。以下是对这个主题的详细阐述: 1. **MySQL基础**: - 数据库概念:MySQL是一个用于存储和...
mysql笔记
总的来说,这个MySQL笔记涵盖了数据库管理的各个方面,通过一天的学习,你可以建立起对MySQL的初步理解,并具备基本的数据库操作能力。然而,要想成为真正的MySQL专家,还需要不断实践和深入学习更高级的主题,如...
mysql笔记 mysql笔记 mysql笔记 mysql笔记 mysql笔记 mysql笔记 mysql笔记 mysql笔记
这份"mysql笔记及考试答案.zip"压缩包包含了深入学习MySQL的重要资源,包括一个PDF格式的MySQL笔记和一个包含考试试题及答案的文件,这对于复习MySQL知识或者准备相关考试非常有帮助。 MySQL笔记可能涵盖了以下几个...
MySQL笔记.md
老杜MySQL笔记总结.md(全)
这份"MySQL笔记资料"涵盖了全面的MySQL学习内容,包括基础理论、实战技巧以及优化策略,旨在帮助用户深入理解和掌握这个强大的数据存储与管理工具。 一、MySQL基础知识 在MySQL的学习之初,你需要了解其基本概念,...
这只是MySQL笔记的部分内容,实际上MySQL的功能远不止这些,还包括视图、索引、事务处理、存储过程、触发器、函数等多个高级特性。了解并掌握这些内容,将有助于在实际项目中更高效地管理和操作数据。
"MySQL笔记合集.pdf" MySQL 是一款开源的关系数据库管理系统(RDBMS),是一种relational database management system(RDBMS),是当下最流行的数据库管理系统之一。MySQL 的主要特点是开源、免费、跨平台、支持...
本笔记将深入探讨MySQL的基础知识,帮助你全面掌握这个强大的数据存储和管理工具。 首先,我们要理解数据库的基本概念。数据库是一个组织和存储数据的系统,允许用户通过结构化查询语言(SQL)进行数据的检索、更新...
- 如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果 - 如果只有INSERT和SELECT操作,可以选择Archive,...
MySQL笔记,老杜,初级MySQL笔记