php - MySQL 慢检查大表中是否存在行

标签 php mysql

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

查询看起来像这样:

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/

相关文章:

php - 如何使用 PHP 检查目录是否为空?

php - 使用ajax post方法的变量不起作用

php - 多个表上的 SQL 查询

mysql - SQL 查询 INNER JOIN 与三个表

php - 如何使用 PHP 更改 HTML 中的类?

c# - 为什么 PHP 会给出意想不到的输出?

php - 设置 PDO 连接超时时间小于 1 秒

php - 为 mysql 配置 php.ini

php - 我可以从 mySQL 中检索 lat 和 lng 一起放在一列中的 google map 坐标吗?

mysql - 如果值与唯一列冲突则更新忽略