Php MySQL性能:DATE vs TINYINT

Php MySQL性能:DATE vs TINYINT,php,mysql,Php,Mysql,通常我的表包含一个日期列,当它永久为空时为0000-00-00。添加额外的列TINYINT只是为了跟踪行是否处于永久活动状态,这样我的搜索性能会更好吗?还是只保留日期栏 SELECT columns FROM table_name WHERE date_is != '0000-00-00' 对 SELECT columns FROM table_name WHERE col_emplty != '1' TinyInt应该搜索得更快,不是吗?如果需要,可以将日期列的默认值设置为null。因此,

通常我的表包含一个日期列,当它永久为空时为0000-00-00。添加额外的列TINYINT只是为了跟踪行是否处于永久活动状态,这样我的搜索性能会更好吗?还是只保留日期栏

SELECT columns FROM table_name WHERE date_is != '0000-00-00'

SELECT columns FROM table_name WHERE col_emplty != '1'

TinyInt应该搜索得更快,不是吗?

如果需要,可以将日期列的默认值设置为null。因此,您只需检查数据是否
不为空
,因为添加一个额外的列只是为了查看下一列是否具有正确的日期格式是没有意义的。

添加一个新字段允许列为空将解决您的问题,但两者都是的好做法


如果99%的时间您要选择基于日期的数据(可以是任何日期的默认日期)或要更新此日期字段,您可以在此处创建一个int列,而不是日期类型,并将值保留为YYMMDD(例如:而不是保留“2015-04-19”(日期)将数据保留为20150419(10000*年+100*月+日期)并比较日期值),因为这是一个int列,所以搜索和更新表都会很快。

可能会更快,但您添加了一层冗余。为什么不尽可能地进行最佳设计,让您的dbms负责性能呢?您不认为您做得太多了吗?特别是当“日期”数据类型已经存在时,为什么不使用默认过程,而不是重新发明轮子呢?我不这么认为。如果您有大量数据,并且知道必须在date上应用where子句,则此过程会更好。与
相比,null
不适用于
。您必须使用
IS
operator@juergend谢谢,我忘了。谢谢你的回答,但是你认为+1列加1字节会影响表!0000-00-00将只是永久的,但在搜索结果中,我必须避免,表的设计是非常好的。但想象一下,该表将包含超过10K条记录,我必须选择不为NULL的行“0000-00-00”。如果检查日期不为空,则在clouse!?中使用TINYINT会更快!?无论您是否添加了一个额外的列,您仍然必须有一个“where”条件,并假设如果您有更多的列,如“created_at”、“last_activity”等基本上与日期-时间相关的列,那么您是否会添加更多的列,这些列的数据类型为微小的int?我想我已经表明了我的观点:染料肯定会有WHERE条件,但问题是在WHERE条件下有DATE或TINYINT会运行得更快吗。。是的,你是对的,我不能在where条件下为我想要的每一件新事物添加++列。但是在我的情况下+1 Tinyint会使搜索速度更快,这是我的问题。。