【问题标题】:Database Design mySQL one or many table(s) and use innodb or myisam for performance数据库设计 mySQL 一个或多个表并使用 innodb 或 myisam 来提高性能
【发布时间】:2012-01-31 03:03:06
【问题描述】:

我将允许用户上传以下文件 - PDF/视频/照片。用户上传的所有文件都显示在个人资料页面上。所有上传的文件都可以按名称或标签和文件类型搜索。

目前我会将所有文件存储在 一个 mySQL 表中,myisam 引擎用于全文和标签搜索,还 faster 用于选择数据.

假设如果他们在一张表中存储了超过 10+ 百万条记录,那么搜索最终会变慢。我正在考虑将单个表格分成三个单独的表格,例如在这种情况下,如果用户想要搜索所有文件类型,我会合并所有搜索。这会是更好的方法吗?

缺点是如果我在后期添加新文件类型,我将不得不创建一个新表,例如允许用户上传 zip 文件。

如果多个用户同时上传,innodb 会是更好的选择吗,innodb 具有行锁定功能,对吗?

谢谢,:)

编辑:我将文件路径存储在 db 表中,而不是实际文件本身。

【问题讨论】:

  • 你把文件也存到表里了吗?
  • @rene 哎呀,我将文件路径存储在表中,而不是实际文件本身。对此感到抱歉,
  • 名称/标签搜索真的需要全文搜索吗?
  • @Nanne fulltext 在这种情况下可能不需要,我可以使用 'LIKE' 。

标签: mysql performance database-design innodb myisam


【解决方案1】:

将文件信息保存在一个表格中,例如带有文件名、路径、大小、上传者、描述的文档,并为标签维护另一个表格,因为每个文档可以有多个标签。您还需要在标签文件中每行存储一个标签。

这将使您能够做一些花哨的事情,比如标签云,这个 Stack Overflow 页面左侧的标签链接

您可能还希望使用提供外键支持的 InnoDB,并在 MySQL 5.1.x 及更高版本的更高版本中获得更好的性能。从 5.6 开始也可能有全文索引

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    相关资源
    最近更新 更多