数据库表结构优化

时间:2017-03-09 22:23:05

标签: mysql database

我试图最小化MySQL数据库查询时间。这是我的情况....我有以下表格:

  • 商店表
    • ID字段
    • 名称字段
    • 位置字段
  • 货架表
    • ID字段
    • 商店ID字段
    • 名称字段
  • ShelfItems表
    • ID字段
    • 货架ID字段
    • 项目ID字段
    • 项目名称字段
    • 位置字段
    • 评级字段

当我的程序(内置于C ++)启动时,它会将数据库中的所有存储加载到它们自己的对象&将它们存储在列表中。

然后它将DB中的所有货架存储到他们自己的对象中(每个商店可以有0到10个货架),并将它们分配给相应的商店对象。

最后,它将DB中的所有ShelfItem加载到它们自己的对象中,并将它们分配给相应的Shelf对象。每个Shelf对象可以容纳0到130个ShelfItems。

然后当软件关闭时,它会重新保存所有商店,然后是所有货架,然后是所有ShelfItem。

我的问题是可以有很多保存&一次加载请求,这可能导致查询时间超过预期。所以我试图对此进行优化。

将序列化货架和将货架物品放入一个字符串并将其作为一个列存储在Stores表中,读取/写入速度会更快吗?

结果会使Stores表看起来更像......

  • 商店表
    • ID字段
    • 名称字段
    • 位置字段
    • 序列化货架字段(将包含货架及其ShelfItems)

1 个答案:

答案 0 :(得分:0)

那(存储在一个字符串中)通常是一个坏主意,或者当它是个好主意时 - 使用NoSQL解决方案往往是一个更好的主意。我不确定你的应用程序是如何使用的,但可能不需要同时考虑所有ShelfItems,你通常会考虑延迟加载以仅在需要时加载项目。这种方法的中间立场是预加载经常使用的物品或批次。这可以通过使用Cache来促进,但是这可以带来许多其他考虑因素,例如何时刷新数据。您还应该只更新已更改的项目以防止某些保存...