在通过 SO 进行搜索时,我发现了两个相互矛盾的答案(甚至还有一个评论),但没有明确的答案:
问题是:如果将 TEXT/BLOB 字段存储在表之外,是否有任何性能优势?
我们猜测:
- 您选择正确(如果需要,仅选择 TEXT/BLOB,不选择 *)
- 表在有意义的地方被正确索引(所以这不是“如果你索引它”的问题)
- 数据库设计并不重要。这是一个在这种特殊情况下识别 MySQL 行为的问题,而不是解决某些数据库设计问题。假设这个数据库只有一个表(或两个,如果 TEXT/BLOB 被分开)
- 使用的引擎:innoDB(其他引擎也会很有趣,如果他们获取不同的结果)
这篇文章指出,将 TEXT/BLOB 放入单独的表中,只有在您已经以错误的方式进行 SELECT 时才会有所帮助(即使没有必要也总是选择 TEXT/BLOB) -基本上说明,TEXT/BLOB 在同一张表基本上是更好的解决方案(复杂性更低,不会影响性能等),因为 TEXT/BLOB 无论如何都是单独存储的
将 TEXT 列移动到另一个表中唯一会带来任何好处的情况是,如果它倾向于通常从表中选择所有列。这只是引入了第二种不良做法来弥补第一种不良做法。不言而喻,二错不等于三左。
然而,这篇文章指出:
当表有 TEXT 或 BLOB 列时,该表不能存储在内存中
这是否意味着在表中包含 TEXT/BLOB 已经足以影响性能?
我的问题基本上是:正确答案是什么?
如果SELECT
正确的话,是否将 TEXT/BLOB 存储到单独的表中真的很重要吗?
或者甚至在表中包含 TEXT/BLOB 是否会产生潜在的性能影响?