我应该在大型EAV表中使用时间戳或分隔时间列吗?

时间:2017-06-19 20:45:32

标签: mysql sql postgresql database-design entity-attribute-value

我有一个非常长的EAV模型表。 我的列是精简ID,时间戳,值。 实际上我在ID和Timestamp上创建了一个索引,以提高我的查询性能,但它似乎仍然很慢.. 如果我将时间戳拆分为分隔的整数字段并在这些字段上创建索引,会发生什么?像这样的东西: 年(Int),月(Int),日(Int),时间(TimeStamp),ID,值。 它会提高性能吗? 今天我使用了两种db,MySql和PostgreSQL,但对两者都有同样的疑问。

2 个答案:

答案 0 :(得分:1)

这绝对是错误的方向。新指数不会提高业绩。此外,您的一些查询可能会让您遇到麻烦。想想例如关于条件

where tstamp between '2015-11-22' and '2016-02-03'

并尝试编写它以便它可以使用新索引。

答案 1 :(得分:1)

(至少在MySQL ......)

分开日期时间。

使用分区。

使用多个表(每月一个/用户/等)。

考虑EAV的替代品;那种模式天生就是坏事。 (我添加了一个标签;看看其他讨论。)

使用合适的复合材料'索引。

请提供SHOW CREATE TABLE和一些SELECTs,以便我们更具体地为您提供帮助。

请将此模式用于日期范围:

WHERE dt >= '2017-02-26'
  AND dt  < '2017-02-26' + INTERVAL 7 DAY