Mysql优化之——Scheme优化与数据类型优化

本文介绍了MySQL中不同类型数据的特点及适用场景,如DECIMAL、VARCHAR、CHAR等,并讨论了如何选择合适的数据类型作为主键。此外,还探讨了表结构设计原则,包括避免过多表关联,以及列定义中NULL值的影响。

一些需要注意的数据类型小知识

  1. 整数类型 DECIMAL会进行精确的计算,mysql服务器里自带的,cpu原生的一般都是浮点计算,使用金额等数据DECIMAL类型会比较适合,但是开销挺大的,可以把小数型的金额乘以小数点位数转化为整形以BIGINT的类型存储在MYSQL里。
  2. 字符类型 VARCHAR 不定长,CHAR定长。 VARCHAR 更新可能会带来磁盘重新整理,且需要额外的字符位数来存储长度信息。 CHAR类型适合来存储短的或者长度固定的数据(密码的MD5加密值),CHAR类型的值末尾的空白会被截除。
  3. 适用于长类型的数据 BLOB(二进制存储)和TEXT(字符类型存储)对这两种数据类型排序时,只检索每列数据的max_sort_length 写SQL 这样写: ORDER BY SUSTRING(column,length)

选择合适的数据类型来做为主键

  1. MySQL不推荐使用字符串类型来当作主键,因为消耗空间。
  2. MD5(),SHA1()等函数产生的随机字符串可能会导致INSERT SELECT 等语句变得很慢。(因为随机值的写入位置不同需要处理索引文件,尤其是聚簇索引这种带有排序性质的索引结构,同时读取的时候反问磁盘的位置也是随机的)
  3. 导致无法缓存比较“常用”的数据。

表的结构的设计

  1. 表的设计的范式与反范式(此后会专门写一篇文章来详细描述数据库设计的范式原理)
  2. 数据的查询不要关联太多的表(反范式的设计有时候是可以考虑的),在《高性能MySQL》中推荐:在保证查询速度与并发性的前提下,单个查询的表的关联数一般在12个表以内
  3. 列尽量不要使用允许 NULL 的设定
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值