Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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_Optimization_Explode - Fatal编程技术网

Php 如果我将明细行合并到标题表中的单个列中,会更快吗?

Php 如果我将明细行合并到标题表中的单个列中,会更快吗?,php,mysql,optimization,explode,Php,Mysql,Optimization,Explode,所以我有一个图片库网站,以相册的形式组织,所以 存储相册图像的db表,基本上有这个方案: album_id | images_link 112 | 1.jpg 112 | 2.jpg 112 | 3.jpg 112 | 4.jpg 112 | 5.jpg 112 | 6.jpg 112 | 7.jpg 112 | 8.jpg 112 | 9.jpg 因此,为了避免出现超长的数据库表,我考虑将相册的所有图

所以我有一个图片库网站,以相册的形式组织,所以 存储相册图像的db表,基本上有这个方案:

album_id | images_link
112      | 1.jpg
112      | 2.jpg
112      | 3.jpg
112      | 4.jpg
112      | 5.jpg
112      | 6.jpg
112      | 7.jpg
112      | 8.jpg
112      | 9.jpg

因此,为了避免出现超长的数据库表,我考虑将相册的所有图像存储到一个单元格中,如下所示:

album_id | images_link
112      | 1.jpg, 2.jpg, 3.jpg, 4.jpg, 5.jpg, 6.jpg, 7.jpg, 8.jpg, 9.jpg
我的意思是数据库的大小当然会保持不变,但会有很大的差异 要读取的行数更少。 我将使用explode函数来分割和服务每个图像文件链接。这是吗 明智的选择?我不确定explode函数是否像抓取一个文件一样需要内存 大型数据库。我想听听你的意见

问题是图像名称没有那么短,图像链接行设置为27个字符 所以我设定了每张相册30张图片的限制,所以一个单元格可以 到达810个字符到以后的时间。我从来没有用varchar来存储那么多字节,是吗 在这种情况下,最好使用VARCHAR还是文本?我知道瓦查尔更快


提前谢谢。

不,不要那样做。拥有“超长数据库表”没有问题。将子项聚合到单个列中可能存在许多问题

你说“要读的行将显著减少。”你是否想象如果你不使用细节表,而将所有内容都塞进标题表,会有某种速度提升?不会的


你现在拥有的方式就是应该做的方式。保持这种方式,继续学习。

不,不要那样做。拥有“超长数据库表”没有问题。将子项聚合到单个列中可能存在许多问题

你说“要读的行将显著减少。”你是否想象如果你不使用细节表,而将所有内容都塞进标题表,会有某种速度提升?不会的


你现在拥有的方式就是应该做的方式。保持这种方式,继续学习。

你的第一个计划比第二个好

更适合维护:

  • 仅添加一行以放置新图像
  • 仅删除一行以退出图像
  • 如果要编辑图像的路径,只需更新即可 那一排
稍后,如果你想列出galery的第一个图像,你只需要做一个连接


对于第二个模式,在categories表中有一个名为“图像列表”的字段没有什么区别。…

第一个模式比第二个好

更适合维护:

  • 仅添加一行以放置新图像
  • 仅删除一行以退出图像
  • 如果要编辑图像的路径,只需更新即可 那一排
稍后,如果你想列出galery的第一个图像,你只需要做一个连接


对于第二个模式,在categories表中有一个名为“图像列表”的字段没有什么区别。…

您应该保留原始表结构,因为维护图像链接列将成为一场噩梦。如果要删除相册id=112和图像链接=3.jpg的行,会发生什么情况

如果要将读取简化为一行,请尝试使用group_concat进行查询

SELECT GROUP_CONCAT(images_link) FROM tbl_album_images WHERE album_id='112'
哪个应该返回

1.jpg,2.jpg,3.jpg,4.jpg,5.jpg,6.jpg,7.jpg,8.jpg,9.jpg

编辑:我确信这是显而易见的,但也要确保你在相册id上有一个索引,你应该保持你原来的表结构,因为维护images链接列将成为一场噩梦。如果要删除相册id=112和图像链接=3.jpg的行,会发生什么情况

如果要将读取简化为一行,请尝试使用group_concat进行查询

SELECT GROUP_CONCAT(images_link) FROM tbl_album_images WHERE album_id='112'
哪个应该返回

1.jpg,2.jpg,3.jpg,4.jpg,5.jpg,6.jpg,7.jpg,8.jpg,9.jpg

编辑:我肯定这是显而易见的,但也要确保你有专辑id的索引,这不是一个好主意。如果要删除单个图像,则必须分解、删除、内爆、更新,而不仅仅是一个
DELETE
命令。目前的方式是在SQLRead中执行此操作的正确方式请阅读此:。简短回答:是的,真的很糟糕。类似的:有一条编程格言说“过早优化是万恶之源”。将逗号分隔的列表放入一列就是过早优化的缩影。你不知道你有什么性能问题,如果有的话。你在想象它会很慢。您的解决方案将使将来的维护变得更加困难。实际上,这更像是过早的去优化。这不是一个好主意。如果要删除单个图像,则必须分解、删除、内爆、更新,而不仅仅是一个
DELETE
命令。目前的方式是在SQLRead中执行此操作的正确方式请阅读此:。简短回答:是的,真的很糟糕。类似的:有一条编程格言说“过早优化是万恶之源”。将逗号分隔的列表放入一列就是过早优化的缩影。你不知道你有什么性能问题,如果有的话。你在想象它会很慢。您的解决方案将使将来的维护变得更加困难。实际上这更像是过早的去优化。谢谢您的回答。我知道这对维护来说更好,但是性能呢?为了性能更好,数据库系统已经做好了准备。再次感谢您,如果您不介意看一下我向Andy Lester提出的问题,我将不胜感激。谢谢您的回答。我知道这对维护来说更好,但是性能呢?为了性能更好,数据库系统已经准备好了。再次感谢您,如果您不介意看一下我向Andy Lester提出的问题,我将不胜感激。感谢您的回答/建议。除了成为一个长db之外,它的另一个“问题”是,如果用户升级到更高的计划(他可以在每个相册中添加更多图像)。所以如果他一开始