目前,我通过检查用户是否已在我们的观看表中记录观看来检查用户是否观看过视频。
查询看起来像这样:
SELECT EXISTS(SELECT 1 FROM views WHERE videoid=:vid AND userid=:uid)
当显示带有视频缩略图的页面时,如果用户已经看过该视频,我们会覆盖“已观看”,这类似于 youtube 上的功能。
问题是这个查询的计算速度相当慢,因为 View 表有大量行 - 40 或 50 毫秒。如果一个页面显示了 60 个视频缩略图,则在呈现页面之前有 3 整秒的 SQL 延迟。
我的问题是结构性的,还是我可以做些什么来加快查询的执行速度?
最佳答案
views
上没有覆盖 videoid 和 userid 列的索引,因此数据库可能会进行全表扫描。添加索引应该有所帮助。例如:
alter table views add index (videoid, userid);
如果查询仍然很慢,请发布查询的执行计划。
关于php - MySQL 慢检查大表中是否存在行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35680779/