Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.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 什么更快?“爆炸”还是另一列?_Php_Mysql_Explode - Fatal编程技术网

Php 什么更快?“爆炸”还是另一列?

Php 什么更快?“爆炸”还是另一列?,php,mysql,explode,Php,Mysql,Explode,我的数据库中需要存储多个值,但它们的类型大致相同,所以现在我不知道在MySQL的VARCHAR字段中以字符串形式存储这些值是否更快,并用逗号分隔 然后在我需要的时候引爆它们 $values = explode(",", $stringFromDatabase); 其中,$stringFromDatabase是mysql\u query+mysql\u fetch\u数组中的字符串,并使用$value[0]、$value[1]等逐个获取它们 或 为每个变量(最多7行)添加另一列,然后为特定行调用

我的数据库中需要存储多个值,但它们的类型大致相同,所以现在我不知道在MySQL的VARCHAR字段中以字符串形式存储这些值是否更快,并用逗号分隔

然后在我需要的时候引爆它们

$values = explode(",", $stringFromDatabase);
其中,$stringFromDatabase是mysql\u query+mysql\u fetch\u数组中的字符串,并使用$value[0]、$value[1]等逐个获取它们

为每个变量(最多7行)添加另一列,然后为特定行调用数据库,并使用标准的mysql\u query+mysql\u fetch\u数组过程按列分别获取它们


那么,一列是用逗号连接的还是多列?重要的是要注意,我总是需要一个接一个的排序,当然排序并不重要,所以我认为第一个选项是更好、更快的?最好有多个列。不使用多值列是数据库规范化的一部分


在您的情况下-如果需要从多值1,2,3,4,5中选择3 on,该怎么办?这将是相当具有挑战性的。但对于多个列,我可以很容易地从Column3=3的表中选择*。

数据库的一般经验法则是列应该是原子的。换句话说,它们应该代表一条信息,并且只代表一条信息。将CSV列表塞进一列会打破这一原则,从长远来看会让你的生活更加艰难,尤其是在对你存储的数据进行分析时。我建议每个值有一列是最好的选择

为每个值使用单独的列。请参见

使用以下内容如何:

int AutoId, // your primary key int ColumnIndex // 1 for col 1 int ColumnValue // the value for e.g. for col 1 this does not need space for unused columns and gives the benefit to query like select ColumIndex, ColumnValue where AutoID = 42 order by ColumnIndex
你不应该问哪个更快。 速度不是唯一要考虑的因素。 太空火箭确实比你家里的汽车快,但你不能用火箭去购物中心。 所以,你应该问什么是正确的方法。
规范化数据库是唯一正确的方法

但他说他总是需要每个值,一个接一个。是的,但如果他试图查询满足条件的值。是的,我假设字符串较慢,因为我相信固定字段长度总是更好。但是,如果您不处理以EB为单位的数据,我想您不会注意到其中的细微差别:-除此之外,如果您的列表只是一个逗号分隔的varchar字段,则无法强制执行诸如值在SQL中只应在列表中出现一次这样的约束。或者,像此字段这样的约束实际上应该包含数字。谢谢你提醒我那件事。先把它做好,如果需要的话,再加快速度。但是你不知道你是否需要加快速度,或者你的优化是否会使解决方案出错,直到你有了真正有效的解决方案。我也有类似的问题,所以只想在这里发布。 int AutoId, // your primary key int ColumnIndex // 1 for col 1 int ColumnValue // the value for e.g. for col 1 this does not need space for unused columns and gives the benefit to query like select ColumIndex, ColumnValue where AutoID = 42 order by ColumnIndex