优化MySQL数据库结构

时间:2012-01-25 08:53:10

标签: mysql database

我想创建一个效率很高的数据库结构。现在数据库看起来像这样:

data (type:primary; data is unique because miliseconds) | category | price | plenty different columns of data
201201231100121234                                      |   3      |   0   |
201201231100121249                                      |   14     |   5   |
  1. 假设我有大约15个主要类别,所以我想保留每个记录在特定表中,取决于类别。因此,如果用户将在特定类别中进行搜索,则查询将仅针对特定表中的所有记录。所以这是一个很好的解决方案,对吗?

  2. 但是如果用户想要查看所有类别的所有记录按数据排序怎么办?可能我需要使用UNION,但使用临时表的速度搜索比将所有类别保存在一个表中要糟糕得多,对吧?可能我只允许用户搜索所选类别,而不是所有类别。

  3. 最后一个问题是关于排序。当用户使用“数据”列进行排序时:“按数据排序asc LIMIT 0,10”或“按数据排序限制0,10”排序,则搜索速度很快,因为数据是唯一的。但是当用户想要按价格排序(不能是唯一的)时,那么查询没有解决方案可以有更多的性能吗?有什么解决方案吗?

2 个答案:

答案 0 :(得分:0)

我认为你应该只保留一张桌子。

为什么不使用AUTO_INCREMENT而不是毫秒?

答案 1 :(得分:0)

  

所以我想把每条记录保存在特定的表格中

不 - 这是一个坏主意,它使管理数据的代码更加复杂,并且与正确索引的表相比,不会带来任何可衡量的性能优势。当然可能存在改变结构的情况如果不同类别具有与它们相关联的不同字段集 - 但这最好通过在具有类别特定字段的单个表中保持公共字段集来表示。在其他表中使用1:1非强制连接。

你的第3点似乎有点困惑。没有什么可以阻止你在其他列上添加索引,但是,使用你的例子,假设你有20条记录,每条记录都有价格的最大值 - 你希望在SORT BY price DESC LIMIT 0,10时看到哪些记录?