Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 历史记录/审核表的设计建议_Mysql_Database_Database Design_Data Structures_Database Partitioning - Fatal编程技术网

Mysql 历史记录/审核表的设计建议

Mysql 历史记录/审核表的设计建议,mysql,database,database-design,data-structures,database-partitioning,Mysql,Database,Database Design,Data Structures,Database Partitioning,我需要随时跟踪许多项目及其状态 范例 ItemId Location DateTime State 1 Mall A 2010-02-03 07:00 on_sale 1 Mall A 2010-02-20 08:22 sold 2 Warehouse 2010-02-02 09:00 on_sale 2 Transit 2010-03-02 16:20 transit 2 Mall B

我需要随时跟踪许多项目及其状态

范例

ItemId Location  DateTime           State
   1   Mall A    2010-02-03 07:00   on_sale
   1   Mall A    2010-02-20 08:22   sold
   2   Warehouse 2010-02-02 09:00   on_sale
   2   Transit   2010-03-02 16:20   transit
   2   Mall B    2010-03-03 10:10   on_sale
   2   Mall B    2010-03-12 12:11   sold
现在,这是一个巨大的表,我使用MySQL的伪秩函数来执行查询

然而,这是非常缓慢的。查询无法使用索引,因为对于任何特定项,它必须先找到秩=1的项,然后才能执行任何筛选

SELECT 
    item_sorted.*, IF(@prev <> item_sorted.item_id, @rownum := 1, @rownum := @rownum+1) AS rank,
    @prev := item_sorted.item_id
FROM ...
您在实现此类功能方面有哪些经验? 您会推荐什么样的数据库设计? 像Oracle或支持T-SQL的DBs这样的数据库会因为支持分区查询而更好吗


提前感谢您的任何想法

让我从一个问题开始:

这张桌子的主要目标是什么?在其中插入数据还是从中检索数据

两种可能性:

对于插入:我建议您对此进行规范化,您将有很多冗余。 检索:这是一个很好的方式。我建议为每组设置一个代理密钥。 如果要比较时间消耗,请尝试安装PostgreSQL并查看结果。 您不需要使用Oracle或MS-SQL,PostgreSQL应该足够好了

我知道我的建议与数据分区无关,但有一个类似的表在工作,这就是我如何做的,它工作得很好


希望我能帮忙,

主要是检索。让我今晚试一试,看看是否有效!谢谢成年男子2年后我记起了,现在我回来报到了,哈哈。。。无论如何,PostgreSQL在使用分区查询时提供了更好的性能