MySQL很难检查大表中是否存在行

时间:2016-02-28 09:25:00

标签: php mysql

目前,我通过检查该用户是否在我们的观看表中记录了一个视图来检查用户是否观看了视频。

查询如下所示:

SELECT EXISTS(SELECT 1 FROM views WHERE videoid=:vid AND userid=:uid)

当显示带有视频缩略图的页面时,如果用户已经观看了此视频,我们会叠加“看到”,类似于YouTube上的功能。

问题是这个查询的计算速度很慢,因为views表有很多行--40或50ms。如果一个页面显示了60个视频缩略图,则在呈现页面之前有3秒的SQL延迟。

我的问题是架构的,还是我可以做些什么来加快查询的执行速度?

1 个答案:

答案 0 :(得分:1)

views上没有涵盖videoid和userid列的索引,因此数据库可能正在进行全表扫描。添加索引应该有所帮助。例如:

alter table views add index (videoid, userid);

如果查询的执行计划仍然很慢,请将其发布。