我有一个带有deleted_at datetime列的表,其默认值为'0000-00-00 00:00:00'。我发出一个查询来检查尚未删除的行(具有上述默认值)。而不是通过where子句传递该字符串构造,是否有更好的方法?
我有以下工作,但想看看是否有更好的东西:
SELECT *, (IF(CAST(deleted_at AS time) IS NULL, 0, 1)) AS deleted FROM unicorn WHERE status_id = 1 HAVING deleted = 0;
VS
SELECT * FROM unicorn WHERE status_id = 1 AND deleted_at = '0000-00-00 00:00:00';
答案 0 :(得分:0)
如果第二种方式有效(我想不出任何理由,那么我就不会这样做)。当你CAST
你的专栏时,MySQL必须首先转换它才能运行你的查询,这涉及到开销。第二个包含要匹配的实际字符串。尝试在EXPLAIN
查询中运行SELECT
,您应该会看到差异。