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
Mysql ';比如';vs';加入';查询_Mysql_Performance_Scale - Fatal编程技术网

Mysql ';比如';vs';加入';查询

Mysql ';比如';vs';加入';查询,mysql,performance,scale,Mysql,Performance,Scale,我有两张桌子——视频和播放列表 通常,我会为1-Many关系创建两个相应的表和一个多值表,以便: 视频=[主键、视频ID、标题等] 播放列表=[主键、标题等] 播放列表\视频=[VideosFK,playlifk] 或者,我一直在考虑只创建这两个表,并且在Playlists表中有一个字段,该字段有一个逗号分隔的VideoFK字符串。我的应用程序可以对id字符串进行“拆分”,然后根据id数组从缓存中检索元素,因此: 视频=[主键、视频ID、标题等] 播放列表=[pk、视频ID、标题等] 示例数据如

我有两张桌子——视频和播放列表

通常,我会为1-Many关系创建两个相应的表和一个多值表,以便:

视频=[主键、视频ID、标题等]
播放列表=[主键、标题等]
播放列表\视频=[VideosFK,playlifk]

或者,我一直在考虑只创建这两个表,并且在Playlists表中有一个字段,该字段有一个逗号分隔的VideoFK字符串。我的应用程序可以对id字符串进行“拆分”,然后根据id数组从缓存中检索元素,因此:

视频=[主键、视频ID、标题等]
播放列表=[pk、视频ID、标题等]

示例数据如下所示:
视频-1,“abcd”,标题,…
视频-2,“efgh”,另一个标题,…
视频-3,“ijkl”和另一个,…
视频-4,“mnop”和另一个,…

播放列表-1,“abcd、efgh、ijkl、mnop”…

使用这种结构,如果我想查找其中包含视频的所有播放列表,我可以使用以下方法设置查询:

SELECT * 
 FROM Playlists 
WHERE videoIds like '%VideoID%';
否则,我可以在传统模型中执行标准联接查询:

SELECT * 
  FROM Playlists 
 WHERE pk in (SELECT PlaylistFK 
               FROM Playlists_Videos pv 
              WHERE VideoFK = '%videoPK%');
虽然这是可行的,但我想了解我自己在做什么,并且很好奇MySQL在较低级别上做了什么。注意事项是什么?缩放时,这是如何执行的

谢谢


编辑--“VideoID”包含在一个varchar中,varchar是一个逗号分隔的唯一字符串视频标识符字符串(YouTube视频ID)

请考虑一下:

WHERE videoIds like '%VideoID%';
如果
videoid
值为1,则该值将匹配:

  • 十,
  • 十一,
  • 二十一,
  • 三十一
  • 等等
为了您自己(和我们自己)的利益,请使用三表设置:

  • 视频=[主键、视频ID、标题等]
  • 播放列表=[主键、标题等]
  • 播放列表\视频=[VideosFK,playlifk]

没错,我不应该把VideoID看作是一个整数键,我应该明确指出它是一个唯一的字符串。(这是youtube视频id)