3

我正在设计一个存储有关产品项目信息的表(InnoDB)。

项目->

  • item_id (PK)
  • 价格
  • 重量
  • 库存计数
  • 类别ID
  • 说明(BLOB,最大 2K)

此表主要用于获取给定项目的所有数据,但有时仅可以读取描述字段。项目数据很少更新,包括描述字段。

我有 2 个查询:

  • 为了更快的读取操作,最好将表分成 2 部分,1 部分具有固定宽度字段,而其他部分具有 blob 'description' 字段?我认为我缺少的基本理解是描述字段的可变长度是否会影响项目数据的查找时间。

  • 如果我有很多item数据,比如10M,这个表的更新速度和上面提到的隔离表相比如何。

4

1 回答 1

2

InnoDB 没有从固定宽度的行中获得优势。这是一个 MyISAM 优化。

在 InnoDB 中,长 BLOB/TEXT/VARCHAR 列可能会溢出到额外的存储页面(和内存,因为缓冲池与表空间具有相同的页面组织)。

适合该行主页的短 BLOB/TEXT/VARCHAR 将与其他列一起存在。即使它们溢出,默认行格式 (COMPACT) 仍然包括这么大列的前 768 个字节。

有关更多详细信息,您可能想阅读http://www.mysqlperformanceblog.com/2010/02/09/blob-storage-in-innodb/

因此,如果您担心每页适合更多行,您可以拆分表并将您的描述列存储在另一个表中。

更新时,它就更不重要了,因为 InnoDB 在更新时写入其日志文件,并且日志文件不像表空间那样按页面组织。稍后,缓冲池中修改的页面被写入表空间,但您的应用程序不必等待,它发生在后台。

但是,它可能没有您想象的那么大的好处,并且通过使用索引来缩小查询必须访问的行数可能是一种更好的优化策略。

于 2013-02-21T20:21:59.507 回答