请教关于数据类型TEXT、MEDIUMTEXT的选择问题

djj0628 2011-01-12 10:44:36
有个问题困扰我好久了,自己不知道该怎么办,上来请教大家。

我用mysql存储许多文章,utf8格式,文章主体内容用text数据类型存储,但是utf8的text只能存储23000个汉字左右,虽然一般的文章也够用了,但总有些文章是大于这个字节的,难道要分开存储?那样程序会比较麻烦。或者用mediumtext等更大的数据类型?这样去搜索全文的时候会不会慢很多呢?因为我的这些文章都是需要全文检索的。(或者干脆存储在硬盘上?可是那样搜索起来更麻烦。)

请问大家我这种情况该怎么办才好呢?多谢!
...全文
1033 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
djj0628 2011-01-13
  • 打赏
  • 举报
回复
顶,请问还有人指教一下吗?
djj0628 2011-01-12
  • 打赏
  • 举报
回复
$Sql = "select SQL_CALC_FOUND_ROWS a.*, b.Language as BLanguage, b.ClassId as BClassId, b.OLState as BState from ".$bodyTable." a, ".$mainTable." b 
where 1=1 and b.AuthorId='$getAuthorId'".$searchSql.$SqlLan.$SqlCls." and a.Pass='Y' and a.TowerId = b.Id limit ".$startpage.",$psize";
djj0628 2011-01-12
  • 打赏
  • 举报
回复
请问ls大侠说的全文搜索是不是就是我现在用的直接在数据库中搜索?总量十几二十万篇文章,具体搜索对象几百篇或几千篇文章——我这样的情况直接在数据库里搜索,能支持多少在线人数呢?

我目前是直接搜索的,看看我的搜索语句:
$Sql = "select SQL_CALC_FOUND_ROWS a.*, b.Language as BLanguage, b.ClassId as BClassId, b.OLState as BState from ".$bodyTable." a, ".$mainTable." b where 1=1 and b.AuthorId='$getAuthorId'".$searchSql.$SqlLan.$SqlCls." and a.Pass='Y' and a.TowerId = b.Id limit ".$startpage.",$psize";
ACMAIN_CHM 2011-01-12
  • 打赏
  • 举报
回复
还是用全文搜索吧。
djj0628 2011-01-12
  • 打赏
  • 举报
回复
我可能做起来会很吃力,其实我前期的数据量也不会很多,顶多也就十几二十万篇文章吧,而且具体搜索的时候只是针对特别揪出来的几百篇文章,顶多几千篇文章。
就是说我要对付的数据量也就这么多而已,如果网站真的发展的好,以后要应付更多文章,那我会找更加专业的程序人员来的,我只是个半吊子,暂时先应付一下。

所以,请问有没有比较简单的解决方案可以解决我目前的问题呢?多谢指教!
小小小小周 2011-01-12
  • 打赏
  • 举报
回复
用第3方插件做搜索吧,如 coreseek.
djj0628 2011-01-12
  • 打赏
  • 举报
回复
我搜索就是针对某一类文章,一般不会很多,最多也就几千篇吧,但总的文章可能有几百万篇的。就是说我先将某些文章的ID揪出来,然后再根据这些ID去数据库中搜索其文章的具体内容。没有什么特定的关键字,因为用户有可能使用任何关键字进行搜索,而且不仅仅是搜索标题,而是要搜索全文的文章内容。

我搜索的情况基本就是这样,我对效率问题也不是很懂,请教大家我这种情况应该怎么解决才好呢?
ACMAIN_CHM 2011-01-12
  • 打赏
  • 举报
回复
[Quote]我搜索也不是针对所有文章,一般只是针对几十篇、几百篇文章,个别情况针对上千篇或几千篇文章,请问我这样的情况怎么搜索比较好呢?[/Quote]问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧
小小小小周 2011-01-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 djj0628 的回复:]

我搜索也不是针对所有文章,一般只是针对几十篇、几百篇文章,个别情况针对上千篇或几千篇文章,请问我这样的情况怎么搜索比较好呢?
[/Quote]
文章里面的关键字搜索还是?要是不是这样的话,干嘛不加个标题字段,那个可以用 =或则like 了
djj0628 2011-01-12
  • 打赏
  • 举报
回复
我搜索也不是针对所有文章,一般只是针对几十篇、几百篇文章,个别情况针对上千篇或几千篇文章,请问我这样的情况怎么搜索比较好呢?
小小小小周 2011-01-12
  • 打赏
  • 举报
回复
楼主用coreseek 这个来做全文索引.不区分存储引擎;那可是相当的速度;
djj0628 2011-01-12
  • 打赏
  • 举报
回复
我也可以将文章都生成一个单独的文本放在硬盘上,然后在数据库中只存储其路径,但是我觉得这样全文搜素起来恐怕就会慢得多了吧?因为我是需要搜索它们的。
请问有什么好的解决方法吗?
ljf_ljf 2011-01-12
  • 打赏
  • 举报
回复
楼主其实可以换个想法i就是文档按文件形式存储在固定位置。数据库只是存储文档路径(或者文件名称等等。)
这样既不影响速度也是一个有效方法。

我自己一直看法是: 大对象或者大文本在有条件的情况下,都是不要存储在数据库中。
djj0628 2011-01-12
  • 打赏
  • 举报
回复
哦,那我试试吧,多谢ls两位!
ACMAIN_CHM 2011-01-12
  • 打赏
  • 举报
回复
没有关系,你直接用最大的就可以了。 对查询效率的影响微乎其微。
djj0628 2011-01-12
  • 打赏
  • 举报
回复
用InnoDB类型不是搜索很快吗?我全文搜索也不是所有的文章,而是挑出来的某些文章,一般也就几十篇或几百篇、上千篇,请问到底要怎么解决才好呢?我对效率问题不太了解,请多指教!
rucypli 2011-01-12
  • 打赏
  • 举报
回复
LONGTEXT总够了吧
存储可以在库里 全文搜索还是不要用数据库搞了
djj0628 2011-01-12
  • 打赏
  • 举报
回复
好吧,那我先这样支撑着吧,暂时应该不会有太多数据。
ljf_ljf 2011-01-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 djj0628 的回复:]

我也可以将文章都生成一个单独的文本放在硬盘上,然后在数据库中只存储其路径,但是我觉得这样全文搜素起来恐怕就会慢得多了吧?因为我是需要搜索它们的。
请问有什么好的解决方法吗?
[/Quote]

若需要搜索文章中关键字是比较麻烦;那么,你只能存储在数据库中进行搜索。
当你文章多了,数据库始终是挺不住的;到时侯你也是只能优化查询方法或者进行分级搜索等手段。

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧