Mysql的优化大全
Mysql的优化大全
文章目录知识点1.Decimal
2.char和varchar
3.范式
4.数据库引擎的选择:
5.锁扩展
索引
参考博文 1 。
知识点
1.Decimal
DECIMAL(N,M)中M值的是小数部分的位数,若插入的值未指定小数部分或者小数部分不足M位则会自动补到M位小数,若插入的值小数部分超过了M为则会发生截断,截取前M位小数。N值得是整数部分加小数部分的总长度,也即插入的数字整数部分不能超过N-M位,否则不能成功插入,会报超出范围的错误。
2.char和varchar
1、char的长度是不可变的,而varchar的长度是可变的
??字段b:类型char(10), 值为:abc,存储为:abc (abc+7个空格)
??字段d:类型varchar(10), 值为:abc,存储为:abc (自动变为3个的长度)
2、超出长度自动截取
??字段c:类型char(3), 值为:abcdefg,存储为:abc(defg自动删除)
??字段e:类型varchar(3), 值为:abcdefg,存储为:abc (defg自动删除)
3、var(10)和char(10),都表示可存10个字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放10个
4、char最多可以存放255个字符
??varchar的最大长度为65535个字节,varchar可存放的字符数跟编码有关
?? 字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766个字符
?? 字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845个字符
5、char和varchar的最大长度限制是mysql规定的
3.范式
第二范式
??对主键的部分依赖:某个字段依赖复合主键中的一部分。
??解决方案:新增一个独立字段作为主键。
第三范式
??消除对主键的传递函数依赖。例子: 由主键id确定了什么课,又有什么课确定了什么老师,这就是传递函数依赖。
??解决方案:将表拆分成两张表。
4.数据库引擎的选择:
5.锁扩展
表级锁(table-level lock):lock tables ,... read/write,unlock tables ,...。其中read是共享锁,一旦锁定任何客户端都不可读;write是独占/写锁,只有加锁的客户端可读可写,其他客户端既不可读也不可写。锁定的是一张表或几张表。
行级锁(row-level lock):锁定的是一行或几行记录。
共享锁:select * from where LOCK IN SHARE MODE;,
对查询的记录增加共享锁;select * from where FOR UPDATE;,对查询的记录增加排他锁。
间隙锁:这里值得注意的是:innodb的行锁,其实是一个子范围锁,依据条件锁定部分范围,而不是就映射到具体的行上,因此还有一个学名:间隙锁。比如select * from stu where id < 20 LOCK IN SHARE MODE会锁定id在20左右以下的范围,你可能无法插入id为18或22的一条新纪录。
索引
索引相关博文 ,点击这里
Mysql的优化大全相关教程