【发布时间】:2012-12-07 10:13:03
【问题描述】:
在通过 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 是否会对性能造成潜在影响?
【问题讨论】:
-
您正在使用任何特定的存储引擎? InnoDB/MyISAM/NDB 等
-
@gertvdijk 我添加了它——我对有关 InnoDB 的解决方案特别感兴趣——但基本上,如果有区别,MyISAM 和其他存储引擎也会很有趣
标签: mysql performance text storage blob