本文的内容是总结一些MySQL的常见使用技巧,以供没有DBA的团队参考。如无特殊说明,存储引擎以InnoDB为准。
MySQL的特点
了解MySQL的特点有助于更好的使用MySQL,MySQL和其它常见数据库最大的不同在于存在存储引擎这个概念,存储引擎负责存储和读取数据。不同的存储引擎具有不同的特点,用户可以根据业务的特点选择适合的存储引擎,甚至是开发一个新的引擎。MySQL的逻辑架构大致如下:
![095a683e38af02792df45cfb1a0436e3.png](https://i-blog.csdnimg.cn/blog_migrate/0af58e6614a9365a973d78ed629d2387.jpeg)
MySQL默认的存储引擎是InnoDB,该存储引擎的主要特点是:
- 支持事务处理
- 支持行级锁
- 数据存储在表空间中,表空间由一些列数据文件组成
- 采用MVVC(多版本并发控制)机制实现高并发
- 表基于主键的聚簇索引建立
- 支持热备份
其它常见存储引擎特点概述:
- MyISAM:老版本MySQL的默认引擎,不支持事务和行级锁,开发者可以手动控制表锁;支持全文索引;崩溃后无法安全恢复;支持压缩表,压缩表数据不可修改,但占用空间较少,可以提高查询性能
- Archive:只支持Insert和Select,批量插入很快,通过全表扫描查询数据
- SCV:把一个SCV文件当做一个表处理
- Memory:数据存储在内存中
还有很多,不再一一列举。
数据类型优化
选择数据类型的原则:
- 选择占用空间小的数据类型
- 选择简单的类型
- 避免不必要的可空列
占用空间小的类型更节省硬件资源,如磁盘、内存和CPU。尽量使用简单的类型,如能用int
就不用char
,因为后者的排序涉及到字符集的选择,比使用int
复杂。可空列使用更多的存储空间,如果在可空列上创建索引,MySQL需要额外的字节做记录。创建表时,默认都是可空,容易被开发者忽视,最好是手动改为不可空,如果要存储的数据确实不会有空值的话。
整型类型
整型类型包括:
- tinyint
- smallint
- mediumint
- int
- bigint
它们分别使用8、16、24、32和64位存储数字,它们可以表示
![98b019312a570d118f603b03044a3603.png](https://i-blog.csdnimg.cn/blog_migrate/722563be249e6bcf46d7e9873721c43d.jpeg)
范围的数字,前面可以加unsigned修饰,这样可以让正数的可表示范围提高1倍,但是无法表示负数。另外,为整型指定长度没什么卵用,数据类型定下来,长度也就相应定下来了。
小数类型
- float
- double
- decimal
float
和double
就是通常意义上的float
和double
,前者使用32位存储数据,后者使用64位存储数据,和整型一样,为它们指定长度没什么卵用。
decimal
类型比较复杂,支持精确计算,占用的空间也大,decimal
使用每4个字节表示9个数字,如decimal(18,9)
表示数字长度是18,其中小数位9个数字,整数部分9个数字,加上小数点本身,共占用9个字节。考虑到decimal
占用空间较多,以及精度计算很复杂,数据量大的时候可以考虑用bigint
代替之,可以在持久化和读取