我想为一个表使用许多文本字段,但是它们可能非常大,因此对这个表的行执行复杂的操作,比如与大表的联接可能变得棘手或非常慢。
我知道文本字段没有存储在内存中,因此它们禁止缓存它们的行,因此我希望关闭从磁盘加载的文本字段,使此表的行保持在快速内存中,并允许在必要时加载文本“手动加载”。
这个是可能的吗?
发布于 2021-03-30 18:22:19
也许吧。也就是说,没有设置来实现这一点;但是,重写查询可以实现这一点。
请向我们展示导致这种情况的查询。同时,以下是一些可能的例子:
SELECT * ...加载所有文本列。如果不需要所有的列,请详细说明所需的内容,而不是使用*。SELECT big_text FROM t WHERE ... ORDER BY ... LIMIT 10 --在某些情况下,优化器可以专注于所需的10行,并且只加载那些行的big_text。对于其他情况,在发现所需的10行之前,它会加载“所有”行的big_text。这通常是可以解决的。但我需要你的SQL来说服你。JOIN是另一种情况,在这种情况下,前一项可能或不显示其丑陋的头部。发布于 2021-03-30 23:32:01
将文本列移动到单独的表中。这个新表将具有与原始表相同的键。当新行到达时,用相同的键值将小列写入原始表,将文本列写入新表。这种技术被称为垂直分区。如果需要,可以有多个新表,每个表都包含一个或多个文本列。
使用原始表执行复杂查询。仅在需要时才使用此结果集连接到包含文本的表。
https://dba.stackexchange.com/questions/288977
复制相似问题