php - SQL执行时间太长

标签 php mysql optimization long-integer

我目前正在开发一个需要“类似系列”面板的项目。我有一个针对该系列及其流派之一的表格。需要选择与所选电影至少有 4 个类型相同的电影。

我提出了这个查询:

SELECT s_id,stitle,sdesc FROM s_genre 
INNER JOIN series ON s_genre.s_id=series.id 
WHERE s_id IN (
    SELECT s_id FROM s_genre 
    INNER JOIN (SELECT g_id FROM s_genre WHERE s_id = $mid) a USING (g_id) 
    GROUP BY s_id HAVING COUNT(s_id)>3
) AND s_id != $mid 
ORDER BY RAND() 
LIMIT 5

它可以工作,但加载需要近 20 秒:(

有什么想法可以减少加载时间吗?任何建议表示赞赏:)

提前致谢。

看起来问题是由“ORDER BY RAND()”引起的...删除它会将加载时间减少到 0.5 秒

最佳答案

虽然 ORDER BY rand() 似乎是主要问题,但可能值得重新编码查询以对子查询进行联接:-

SELECT s_genre.s_id,
        series.stitle,
        series.sdesc 
FROM s_genre 
INNER JOIN series ON s_genre.s_id = series.id 
INNER JOIN 
(
    SELECT a.s_id 
    FROM s_genre a
    INNER JOIN s_genre b
    ON a.g_id = b.g_id
    WHERE b.s_id = $mid
    GROUP BY a.s_id 
    HAVING COUNT(a.s_id) > 3
) sub0
ON s_genre.s_id = sub0.s_id
WHERE s_genre.s_id != $mid 
ORDER BY RAND() 
LIMIT 5

有一些技术可以选择随机记录,但使用此查询这样做可能会有点困惑。大多数依赖于行的分布相当均匀的唯一标识符,并且(虽然我假设 s_genre.s_id 是唯一的 id)查询将在这些范围内生成漏洞,并且它们无疑会在该范围内产生漏洞。

关于php - SQL执行时间太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24380956/

相关文章:

php - PHP 中的登录表单无法使用 google 登录

MYSQL - 子查询问题

performance - 在函数运行时测量函数完成的时间

c - sqlite3 C API无法打开/关闭超过1024个数据库

php - ObjectManager 方法 createQuery() 似乎不存在

php - 搜索结果分页

php - 使用 php mysqli 创建账本并根据 DR 和 CR 获取余额

php - 为什么这个 MySQL 选择查询会减慢速度?

html - PageSpeed 洞察 : Load css files after the closing </html>

php - 未知列 "in field list form "