为了争论,假设我试图在 MySQL 表中表示一个非常简单的文件系统。请注意,这并不是我正在做的事情,它只是为问题提供了一个简单的基础。所以不要费心告诉我存储文件的更好方法。该表的架构如下:
varchar path
varchar filename
blob content
上述模式的问题在于,只要查询不一定需要内容字段,它的性能就会很差,因为内容字段可能非常大。例如,如果我想执行一个列出给定路径中所有文件的查询,MySQL 引擎(为了读取文件名字段)会将每一行读取到与 where 子句匹配的内存中。这意味着这个查询不需要的内容仍然需要加载到内存中,这会损害性能。
这个问题的典型解决方案是将内容移动到一个单独的表中,该表总是由 id 直接访问。这种方法的问题在于它增加了插入和选择的复杂性。内容直接附加到单行不再是显而易见的。
所以,我的问题(终于!)是这个。有没有办法将 blob 留在模式中,但导致 MySQL 仅在特别请求时才抓取它?我想知道是否可以在列上放置备用存储引擎或修饰符。谢谢!