当TEXT列中的数据线性增长时,MySQL查询时间呈指数级增长

时间:2011-08-11 14:56:52

标签: mysql performance

我们有一个目前有一个TEXT列的表,列的平均长度约为2,000个字符。如果平均值为5k,10k,20k等,我们想看看选择该列的查询的性能是什么。

我们设置了一个独立的测试,发现随着TEXT列的长度线性增加,查询时间呈指数增长。

任何人都可以快速思考这可能是什么原因。可以提供更多信息,但非常直接。

4 个答案:

答案 0 :(得分:1)

其中一个原因可能是因为TEXTBLOB字段不与所有其他“常规”字段一起存储,因此数据库引擎实际上需要从另一个磁盘区域中提取这些字段。

我们需要查看您的查询是否只是按ID字段查找,还是在TEXT字段中搜索?在后一种情况下,随着存储文本的平均长度增加,数据库处理的数据量也会增加,并且会以指数方式增长。

答案 1 :(得分:0)

您只能选择要使用limit查看的这些字段:

SELECT field1, f2, f3 FROM table1 ORDER BY id LIMIT 0,30

接下来的30行

SELECT field1, f2, f3 FROM table1 ORDER BY id LIMIT 30,30

你无论如何都不能一次读取10k行,这将使你的选择更快。

答案 2 :(得分:0)

这与mysql在磁盘读取周期中读取的数据量有关 以及在数据发送周期中可以通过网络发送多少数据

当数据量增长时,将有更多的开销

  • 磁盘读取周期(mysql花费更多时间进行记录搜索)
  • 数据发送(需要更多周期以允许通过网络传输数据)

并非所有数据都存储在内存中,尤其是文本和blob上 mysql需要从磁盘中找到数据,
并转回客户

换句话说,mysql索引很快,
因为它不需要磁盘读取

答案 3 :(得分:0)

这是一个非常疯狂的猜测,但这可能是一个低级别的实现问题,MySql不希望您一次检索这么多数据,因此它必须为内部使用重新分配更大的内存块并复制数据从旧位置到新位置并随着数据的增长一遍又一遍地重复这一点,这是我脑海中唯一可以解释查询时间呈指数上升而数据呈线性增长的因素。您的解决方案是限制一次检索的数据量。