拆分MySQL表以获得更好的性能

时间:2014-08-13 03:39:05

标签: mysql database performance

我正在开发一个小应用程序,我正在使用MySQL数据库来保存与应用程序相关的数据。

这让我想知道:

我有很多书(例如100张),每本书里面有数千张照片(平均约30,000张)。 我想在我的数据库中保存有关每张照片的信息,显然,我想知道照片是从哪本书中拍摄的。

我想知道如何设计我的数据库,使其尽可能高效。 我在想两个保存信息的选项:

(显而易见的)

  1. 创建2个表格: 一个。一张包含整张照片的桌子(来自所有书籍)(photoID,......,bookID) 湾一张可以装书的桌子。 (bookID,bookName)
    • bookID是书籍表bookID。
    • 的外键引用
  2. (我不确定的想法)

    1. 创建100个表,每个表将包含完全相同的字段。
    2. 我读过一些文章,说MySQL是为了保存数百万行而创建的,但是我发现很多人抱怨数据库读取速度慢。

      在我的应用程序中,我将处理大约300万行,我应该使用哪种方法来获得更好的性能?也许是我没想到的另一种方式?

      谢谢你!

1 个答案:

答案 0 :(得分:2)

首先考虑未来的管理,书籍的持续时间是否不变? 有没有增加书籍的机会?如果回答是肯定的,那么你将不得不为他们创建新的表并进行管理。

虽然这不是一项大任务,但却难以管理。第一种方法适用于300万(从数据库的角度来看,这不是一个很大的问题。我在单个表中管理了大约10亿行,性能可接受)

通过正确的索引和数据库调整(缓冲池,预取大小,缓存,过程等),您可以获得可接受的性能。

我想在您的案例中建议进行优化,尝试压缩存储在数据库中的图像。有许多无损压缩算法(图像质量保持不变),这将使压缩达到90%(减小90%的尺寸)。这将在您检索数据时提供帮助。