美文网首页
高性能MySQL读书笔记 - 第四章

高性能MySQL读书笔记 - 第四章

作者: 哲人王 | 来源:发表于2021-08-06 22:48 被阅读0次

第四章

选择数据类型,几个简单的原则:

  1. 更小的通常更好
  2. 简单就好,比如使用MySQL内建datetime、timestamp,不使用字符串存储时间。使用整数存储IP地址 SELECT INET_ATON('192.168.1.212'), INET_NTOA(3232235988)
  3. 尽量避免NULL

摘要

  • 当数据量比较大时候,可以考虑使用BIGINT代替DECIMAL,将存储的货币单位根据小数位数乘以相应倍数。
  • varchar 需要1或者2个额外字节存储字符串的长度,如果列的最大长度<=255字节,需要1个字节,否则2个字节。另外,varchar变长当更新时候,有可能会导致分裂页进行存储。Innodb会把过长的varchar存储为BLOB。
  • 下面情况适用varchar合适的: 字符串最大长度比平均长度大很多;列更新很少,所以碎片不是问题;使用了UTF-8复杂字符集,每个字符串使用不同的字符数存储。
  • varchar(255),定义的不是字节数,是字符数。
  • char(3)如果采用单字节字符集,存储需要3个字节。而varchar(3),需要4个字节
  • varchar(5)和varchar(200)存储 'hello'的空间开销是一样的,那么使用更短列有什么优势呢?事实证明有很大优势。更大的列会消耗更多的存储。因为MySQL通用会分配固定大小的内存块来保存内部值。尤其是使用内存临时表进行排序或操作时特别糟糕,在利用磁盘临时表也同样糟糕。
  • 不使用ENUM类型,如COLOR,现在要加一个YELLOW枚举,需要Alter table。如果改变原始枚举值,比如把WHITE变为RED,存储变为''空字符串。

选择标示列类型

标示列,一般是主键或者关联列。

  • 整数是标识列列的最后选择,很快并且可以Auto_increment
  • 如果可以避免使用字符串作为标示列,很消耗空间并且比数字慢。最多有6倍的性能下降。insert语句使用字符串做主键可能会导致页分裂、磁盘随机访问,innodb还会导致聚簇索引碎片。如果一定要使用UUID,应该移除-,使用UNHex函数转换为16字节数字,并存储在BINARY(16)[blob]列,检索是通过HEX函数来格式为十六进制。所以还是推荐使用整数。

范式和反范式

反范式是值schema把数据都放一张表里,可以很好避免关联

计数器表的优化

如果有一张表CREATE TABLE hit_counter(cnt int unsigned not null)
记录点击次数,每次更新这行数据事务来说,都有一个全局的互斥锁mutex。要获得更高性能可以采用分治思想,把热点行数据分拆。

CREATE TABLE hit_counter( slot tinyint unsigned not null primary key,
cnt int unsigned not null);
insert INTO hit_counter(slot, cnt) VALUE (RAND() * 100, 1)
ON DUPLICATE KEY UPDATE cnt = cnt + 1;

相关文章

  • 高性能MySQL之运行机制

    本文来自于拜读《高性能MySQL(第三版)》时的读书笔记作者:安明哲转载时请注明部分内容来自《高性能MySQL(第...

  • MySQL的逻辑架构

    MySQL的逻辑架构 MySQL的逻辑架构(from《高性能MySQL》)MySQL逻辑架构,来自:高性能MySQ...

  • 高性能MySQL第四章 读书笔记

    第4章 Schema与数据类型优化 数据类型的设定原则应该遵循更小的往往更好,越简单越好(如能用data就用dat...

  • 高性能MySQL读书笔记 - 第四章

    第四章 选择数据类型,几个简单的原则: 更小的通常更好 简单就好,比如使用MySQL内建datetime、time...

  • centos环境下mysql安装

    前言 节后和节前拉下很多的博客,这个月主要复习下mysq相关的内容,会记录下《高性能mysql的》读书笔记,以及个...

  • 《高性能MySQL 第3版(中文)》PDF高清完整版-免费下载

    《高性能MySQL 第3版(中文)》PDF高清完整版-免费下载 《高性能MySQL 第3版(中文)》PDF高清完整...

  • 高性能mysql 读书笔记

    date: 2017-01-12 13:19 来源: inside mysql 微信公众号 - 最喜欢的mysql...

  • 高性能MYSQL读书笔记

    1.锁有两种类型:读锁和写锁。读锁是共享的,或者说是相互不阻塞的,多个客户在同一时刻可以同时读取同一资源,而互不干...

  • <高性能Mysql>读书笔记

    1 Mysql架构与历史 事务机制ACID 原子性 (atomicity)对于一个事务来说,要么操作全部完成,要么...

  • MySQL书目

    MySQL数据库索引设计与优化 MySQL技术内幕 MySQL排错指南 高性能MySQL MySQL DBA修炼之道

网友评论

      本文标题:高性能MySQL读书笔记 - 第四章

      本文链接:https://www.haomeiwen.com/subject/jwzuvltx.html