【MySQL】性能调优(二):表结构。建表及存储引擎几点建议

1.建表的几点建议

  • 不要用外键、触发器、视图
    • 降低了可读性;
    • 影响数据库性能,应该把把计算的事情交给程序,数据库专心做存储;
    • 数据的完整性应该在程序中检查
  • 关于大文件存储:
    • 不要用数据库存储图片(比如base64编码)或者大文件;
    • 把文件放在 NAS 上,数据库只需要存储URI(相对路径),在应用中配置 NAS 服务器地址。
  • 关于表拆分:
    • 将不常用的字段拆分出去,避免列数过多和数据量过大。
    • 比如在业务系统中,要记录所有接收和发送的消息,这个消息是 XML 格式的,用 blob 或者 text 存储,用来追踪和判断重复,可以建立一张表专门用来存储报文。

2.存储引擎的选择

为不同的业务表选择不同的存储引擎,例如:

  • 查询插入操作多的业务表,用 MyISAM。
  • 临时数据用 Memeroy。
  • 常规的并发大更新多的表用 InnoDB。

MyISAM(3 个文件)

应用范围比较小。表级锁定限制了读/写的性能,因此在Web 和数据仓库配置中,它通常用于只读或以读为主的工作。

  • 支持表级别的锁(插入和更新会锁表)。不支持事务

  • 拥有较高的插入(insert)和查询(select)速度

  • 存储了表的行数(count速度更快)。(怎么快速向数据库插入100万条数据?我们有一种先用MyISAM插入数据,然后修改存储引擎为InnoDB的操作)

  • 适用:只读之类的数据分析的项目

InnoDB(2 个文件)

mysql5.7中的默认存储引擎。 InnoDB是一个事务安全(与ACID兼容)的MySQL存储引擎,它具有提交、回滚和崩溃恢复功能来保护用户数据。InnoDB行级锁(不升级为更粗粒度的锁)和Oracle风格的一致非锁读提高了多用户并发性和性能。InnoDB将用户数据存储在聚集索引中,以减少基于主键的常见查询的I/O。为了保持数据完整性,InnoDB还支持外键引用完整性约束。

  • 支持事务,支持外键,因此数据的完整性、一致性更高

  • 支持行级别的锁和表级别的锁

    扫描二维码关注公众号,回复: 12648064 查看本文章
  • 支持读写并发,写不阻塞读(MVCC)

  • 特殊的索引存放方式,可以减少IO,提升查询效率

  • 适用:经常更新的表,存在并发读写或者有事务处理的业务系统

Memory(1 个文件)

将所有数据存储在RAM中,以便在需要快速查找非关键数据的环境中快速访问。这个引擎以前被称为堆引擎。其使用案例正在减少; InnoDB及其缓冲池内存区域提供了一种通用、持久的方法来将大部分或所有数据保存在内存中,而ndbcluster为大型分布式数据集提供了快速的键值查找。

  • 把数据放在内存里面,读写的速度很快,但是数据库重启或者崩溃,数据会全部消失。只适合做临时表。
  • 将表中的数据存储到内存中

CSV(3 个文件)

它的表实际上是带有逗号分隔值的文本文件。 csv表允许以csv格式导入或转储数据,以便与读写相同格式的脚本和应用程序交换数据。因为csv 表没有索引,所以通常在正常操作期间将数据保存在innodb表中,并且只在导入或导出阶段使用csv表。

不允许空行,不支持索引。格式通用,可以直接编辑,适合在不同数据库之间导入导出。

Archive(2 个文件)

这些紧凑的未索引的表用于存储和检索大量很少引用的历史、存档或安全审计信息。

不支持索引,不支持update delete.

猜你喜欢

转载自blog.csdn.net/qq_33762302/article/details/114048804