日期时间mysql默认值、索引和主键

日期时间mysql默认值、索引和主键,mysql,foreign-keys,indexing,Mysql,Foreign Keys,Indexing,我在mysql中有很多日期时间列 我应该将默认值设置为无还是0000-00-00:00:00 在我的表中还有一个主键,它是一个自动递增的值 我应该在查询where子句中显示的所有列上添加索引吗 是否建议在主键上也设置外键,这样会加快我的mysql连接速度 我应该将默认值设置为无还是0000-00-00:00:00 如果“无日期”是可接受的,则使用空值。将日期时间置零只意味着需要检查它,而不是NULL,但是检查速度会变慢,并且存储/检索它会浪费空间/带宽 我应该在查询中出现的所有列上添加索引吗 W

我在mysql中有很多日期时间列

我应该将默认值设置为无还是0000-00-00:00:00

在我的表中还有一个主键,它是一个自动递增的值

我应该在查询
where
子句中显示的所有列上添加索引吗

是否建议在主键上也设置外键,这样会加快我的mysql
连接速度

我应该将默认值设置为无还是0000-00-00:00:00

如果“无日期”是可接受的,则使用空值。将日期时间置零只意味着需要检查它,而不是NULL,但是检查速度会变慢,并且存储/检索它会浪费空间/带宽

我应该在查询中出现的所有列上添加索引吗 WHERE条款

否,仅向具有最大唯一值的列添加索引。我不知道MySQL的查询计划器是否比以前更好了,但是通过确保这些列首先出现在WHERE子句中,您也可以获得更好的性能。原因是,一旦您使用一个where子句将查询结果限制为少量行,就可以使用线性扫描像使用索引一样快速地检查其余的子句,因此冗余索引只会占用磁盘和(特别重要的)RAM

建议也在主键上设置外键吗 它能加速我的mysql加入吗

不,外键的目的是对数据施加有效性约束,与查询性能无关。也就是说,您仍然应该尽可能使用外键,因为它们提供的保证使管理数据变得更加容易