参考博文 1 。
Mysql的优化大全

知识点

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.数据库引擎的选择:

Mysql的优化大全

5.锁扩展

  • 表级锁(table-level lock):lock tables <table_name1>,<table_name2>... read/write,unlock tables <table_name1>,<table_name2>...。其中read是共享锁,一旦锁定任何客户端都不可读;write是独占/写锁,只有加锁的客户端可读可写,其他客户端既不可读也不可写。锁定的是一张表或几张表。
  • 行级锁(row-level lock):锁定的是一行或几行记录。
  • 共享锁:select * from <table_name> where <条件> LOCK IN SHARE MODE;
  • 对查询的记录增加共享锁;select * from <table_name> where <条件> FOR UPDATE;,对查询的记录增加排他锁。
  • 间隙锁:这里值得注意的是:innodb的行锁,其实是一个子范围锁,依据条件锁定部分范围,而不是就映射到具体的行上,因此还有一个学名:间隙锁。比如select * from stu where id < 20 LOCK IN SHARE MODE会锁定id在20左右以下的范围,你可能无法插入id为18或22的一条新纪录。

索引

索引相关博文 ,点击这里

相关文章:

  • 2021-08-31
  • 2021-12-07
  • 2021-10-26
  • 2022-12-23
  • 2021-10-15
  • 2021-10-29
  • 2021-10-10
  • 2021-09-30
猜你喜欢
  • 2021-12-31
  • 2022-03-10
  • 2021-11-05
  • 2021-12-09
  • 2021-12-31
  • 2021-07-23
  • 2022-01-13
相关资源
相似解决方案