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