具有固定宽度和blob列的MySQL表设计

时间:2013-02-21 19:49:20

标签: mysql sql

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

项目 - >

  • item_id(PK)
  • 重量
  • stock_count
  • CATEGORY_ID
  • description(BLOB,max 2K)

但主要是读取此表以获取给定项目的所有数据 有时可以单独阅读描述字段。项目的不经常更新 数据,包括描述字段。

我有2个查询:

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

  • 如果我持有大量项目数据,比如10M,那么该表的更新速度如何 与上面提到的隔离表相比。

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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

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