Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在mysql中使用=integer比使用=varchar快吗?_Php_Mysql - Fatal编程技术网

Php 在mysql中使用=integer比使用=varchar快吗?

Php 在mysql中使用=integer比使用=varchar快吗?,php,mysql,Php,Mysql,出于某种原因,我需要在sql中使用日期范围作为“where”条件。 我需要在我的表中添加一个新的字段data_范围,它应该是varchar或integer,我想知道它在mysql中使用=integer比使用=varchar快吗?这是显而易见的吗 select * from table where date_range = '2013-10-01__2013-10-30' use varchar select * from table where date_range = 201310012013

出于某种原因,我需要在sql中使用日期范围作为“where”条件。
我需要在我的表中添加一个新的字段data_范围,它应该是varchar或integer,我想知道它在mysql中使用=integer比使用=varchar快吗?这是显而易见的吗

select * from table where date_range = '2013-10-01__2013-10-30' use varchar
select * from table where date_range = 2013100120131030 // use integer

从逻辑上讲,整数比较使用的字节更少,速度更快

这是真的,但我从未注意到其中的区别。这可能不会对你产生明显的影响,除非你需要花时间来决定。

主要的问题是,“WHERE子句、
int
varchar
中什么更快?”不是你在这里应该考虑的问题

首先,您的值太大,不能是
int
,必须位于
bigint
字段中;其次,您可能也不想使用
varchar
,而是更喜欢
char
(因为您知道字符串的长度是恒定的)。现在,有了这些更改,除非您一次要对数十万(或数百万)条记录执行数千次查询,否则您不会注意到性能影响(尤其是如果您对表进行了正确的索引)

现在,真正的问题是。你有两个日期,你要将它们合并到一个列中-你不应该这样做。在一篇评论中,你提到你正在从Google Analytics接收这样的值;但是,你应该能够将该值拆分为两个单独的日期值,并将其存储到两个单独的列中(都是
日期
类型)

我不确定您接收它们的格式是什么,因为您的问题用两种不同的格式显示它们(一种是用
分隔的
varchar
,另一种是不带分隔符的整数)

带分隔符的字符串(也用于分隔yyyy-mm-dd,使其非常简单):

不带分隔符的字符串/整数,保留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));
以上三种方法可在上查看


如果两个日期位于两个单独的变量中,则可以将它们存储在数据库中的两个单独的列中。如果数据库查询始终使用“开始”和“结束”进行查询日期,您可以将两列索引到同一个索引中;否则,您可以分别对它们进行索引。无论使用何种用例,因为您将使用它们,添加索引将是确保您追求的速度/优化的重要步骤=]

如果
2013100120131030
确实是您使用的数字的大小,
int
太小,您需要
bigint
;请参阅了解更多信息。糟糕。您不能使用date_from/date_to列对,并使用正确的数据类型吗?我从google analytics获得数据,它只有一个日期范围,用于将数据存储到我的数据库中,不能使用两个日期稀疏的日期并存储在两个单独的列中?ga的度量和维度ions不能使用date-prameter,我只能从开始日期到结束日期搜索数据。@mingfish_004
date
参数是您存储在数据库中的数据;您可以按照ga接受的任何格式格式化并发送给ga。根据您发送给我的链接,他们的格式是yyyy-mm-dd,与存储在mysql da中的格式相同tabase-因此它应该运行良好=]
// 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));