首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL LONGTEXT分页

MySQL LONGTEXT分页
EN

Stack Overflow用户
提问于 2012-09-22 19:15:21
回答 1查看 349关注 0票数 2

我有包含LONGTEXT的表格帖子。我的问题是,我想检索特定帖子的一部分(基本上是分页)。

我使用以下查询:

代码语言:javascript
复制
SELECT SUBSTRING(post_content,1000,1000) FROM posts WHERE id=x

这在某种程度上是好的,但问题是位置和长度。大多数时候,第一个单词和最后一个单词是不完整的,这是有意义的。

如何从位置x检索长度为y的完整单词?

EN

回答 1

Stack Overflow用户

发布于 2012-09-22 20:15:33

您这样做的目的可能是为了节省MySQL服务器和运行应用程序的机器之间的网络流量开销。实际上,您并没有在MySQL服务器上保存任何其他类型的工作负载。它必须从磁盘获取LONGTEXT项,然后通过SUBSTRING运行它。

根据可靠的性能分析,您可能已经决定必须保存此网络流量。既然您知道这个分析并不能节省太多的MySQL服务器工作负载,那么您可能想要重新审视它。你的节省将是微不足道的,除非你有无数的非常长的LONGTEXT项目和大量的流量来检索和显示它们的一部分。

换句话说,这是一个优化任务。YAGNI?http://en.wikipedia.org/wiki/YAGNI

如果您确实需要它,您将不得不创建软件来逐字处理LONGTEXT项。你最好的办法就是在你的客户端软件中做到这一点。从检索第一页开始,加上文章的k或两个部分。然后,解析文本以查找完整的单词。在第一页中找到最后一个完整的单词及其后面的空格之后,该字符位置就是下一页的开始位置。

在MySQL存储过程中,这类任务是一个巨大的难题。此外,当您在存储过程中执行此操作时,将在共享且难以扩展的资源( MySQL服务器计算机)上使用处理周期,而不是在可克隆的客户端计算机上使用处理周期。

我知道我没有给你干净的代码让你按你说的做。但这显然不是一个好主意去做你所建议的。

编辑

一个观察结果是:1 of的服务器内存大约需要USD20。像memcached这样的缓存系统在有效利用USD100价值的内存方面做得很好。对于您所描述的用例来说,这已经足够了。

另一个观察结果是:许多为大型文档提供服务的公司使用文件系统而不是DBMS来存储这些文档。文件系统可以很容易地在内容服务器之间共享或复制,并且文件可以被随机访问,而不需要任何开销。

将整本书存储在单个BLOB或CLOB中有点创新。如果你能把书分成几个部分--页面?章节?千字块?--并为每个段创建单独的数据行,您的DBMS将比您所描述的更好地扩展。

如果你无论如何都要这么做,下面就是你要做的:

  1. 在每个段中检索的字符总是比所需的多100个字符。例如,当您需要字符30000 - 35000时,请检索30000 -35100。检索段后,在数据中查找第一个分词符(第一个分词符除外),并从该word.
  2. similarly,开始显示在额外的100个字节中找到第一个分词符,并显示到该分词符。

因此,您获取的数据可能是30000 - 35100,显示的数据可能是30013 - 35048,但它可能是完整的单词。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12543247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档