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