WHERE
主要问题,“在一个子句中什么更快,int
或者varchar
?” 这不是你应该追求的。
首先,您的价值太大而不能成为一个int
并且必须在一个bigint
字段中;其次,您可能不想使用varchar
任何一个,而是喜欢char
(因为您知道字符串的长度将是恒定的)。现在,有了这些更改中的任何一个,除非您一次对数十万(或数百万)条记录执行数千个查询 - 您不会注意到性能影响(特别是如果您索引表正确。
现在,真正的重点。您有两个日期,并且要将它们合并到一个列中 - 您不应该这样做。在评论中,您提到您从 Google Analytics 收到了这样的价值;但是,您应该能够将该值拆分为两个单独的日期值并将它们存储到两个单独的列中(均为一种date
类型)。
我不确定您收到的格式是什么,因为您的问题以两种不同的格式显示它们(一种以varchar
分隔__
,另一种为不带分隔符的整数)。当您使用 PHP 进行标记时,您可以通过以下方式将两种格式拆分为两个单独的变量:
带分隔符的字符串(也分隔 yyyy-mm-dd,使其非常容易):
// assuming a string with a __ delimiter
list($firstDate, $secondDate) = explode('__', $originalDate);
不带分隔符的字符串/整数,格式为 yyyymmdd:
// assuming a string that has no delimiters:
$firstDate = substr($originalDate, 0, 8);
$secondDate = substr($originalDate, 8);
不带分隔符的字符串/整数,强制采用 yyyy-mm-dd 格式:
// assuming an string that has no delimiters but adding them each in
$firstDate = sprintf("%s-%s-%s", substr($originalDate, 0, 4), substr($originalDate, 4, 2), substr($originalDate, 6, 2));
$secondDate = sprintf("%s-%s-%s", substr($originalDate, 8, 4), substr($originalDate, 12, 2), substr($originalDate, 14, 2));
以上三种方法可以在codepad上查看。
如果您将两个日期放在两个单独的变量中,则可以将它们存储在数据库中的两个单独列中。如果您的数据库查询将始终使用“开始”和“结束”日期进行查询,则可以将两列索引到同一个索引中;否则,您可以分别索引它们。无论用例如何,由于您将使用它们,因此添加索引将是确保您追求的速度/优化的重要步骤 =]