我在mysql中有很多DATE TIME列。
我应该将默认值设为无或00:00:00
同样在我的桌子上,我有一个主键,它是一个自动增量值。
我应该在我的查询WHERE
子句中出现的所有列上添加索引吗?
是否建议在PRIMARY键上设置外键,是否会加速我的mysql JOINS
?
答案 0 :(得分:2)
我应该将默认值设为无或00:00:00
如果可以接受“无日期”,则使用NULL。将日期时间置零只意味着您需要检查而不是NULL,但检查会更慢并且您会浪费空间/带宽来存储/检索它。
我应该在我的查询中出现的所有列上添加索引 WHERE子句?
不,只将索引添加到具有最大唯一值数的列。我不知道MySQL的查询规划器是否比以前更好,但是你也可以通过确保这些列首先出现在WHERE子句中来获得更好的性能。原因是,一旦您将查询结果限制为具有一个where子句的少量行,其余的子句可以使用线性扫描检查与索引一样快,因此冗余索引只是占用磁盘和(特别重要的)RAM。
是否可以在PRIMARY键上设置外键 它加快了我的mysql JOINS?
不,外键的目的是对数据施加有效性限制,与查询性能无关。话虽这么说,你仍然应该尽可能使用外键,因为它们提供的保证使得管理数据变得更加容易。