Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
Mysql 在数据库中保存数组或创建不同的列_Mysql_Performance - Fatal编程技术网

Mysql 在数据库中保存数组或创建不同的列

Mysql 在数据库中保存数组或创建不同的列,mysql,performance,Mysql,Performance,我正在创建一个项目,我将让某人从20个类别中最多选择3个类别。因为它总是最多有3个类别,所以我不需要在数据库中再创建3列(category_1、category_2、category_3) 我设想在插入时,不用保存在3个不同的列中,而是将数组保存到“categories”列中 我的问题是,在获得信息的那一刻。如果我这样做,比如说搜索每一个有一个特定类别的记录,什么会更快?让它查看1列,这是一个数组(我想是用一个LIKE或类似的东西),还是查看3列 我希望我的问题是清楚的。谢谢。不要在数据库列中存

我正在创建一个项目,我将让某人从20个类别中最多选择3个类别。因为它总是最多有3个类别,所以我不需要在数据库中再创建3列(category_1、category_2、category_3)

我设想在插入时,不用保存在3个不同的列中,而是将数组保存到“categories”列中

我的问题是,在获得信息的那一刻。如果我这样做,比如说搜索每一个有一个特定类别的记录,什么会更快?让它查看1列,这是一个数组(我想是用一个LIKE或类似的东西),还是查看3列


我希望我的问题是清楚的。谢谢。

不要在数据库列中存储逗号分隔的列表(“数组”)。使用一个


(如果要强制执行“不超过3个类别”在数据库中,您可以向交叉引用表中添加一个额外的列
category\u number
。理想情况下,您可以使用检查约束将该列限制为值1、2和3,但MySQL不支持检查约束;相反,您可以将
category\u number
列作为另一列的外键表
允许的\u类别\u编号
有三行。)

我不想创建交叉引用表,因为它最多只有3个类别。我认为这只是为了在我的表中再创建3列。这不是更快吗?除了设计方面的考虑之外,一旦您开始编写查询,比如说
WHERE category_1=x或category_2=x或category_3=x
,或者(上帝禁止)其
WHERE
子句需要解析逗号分隔列表的查询,我非常怀疑它会比使用交叉参考表更快。好吧!我想这就是我要做的!我只是害怕连接的性能,以为会慢一些。谢谢使用主键的连接非常快,不用担心。