mysql - 优化查询,花费更多时间执行

标签 mysql query-optimization

我有以下想要优化的简单查询:

SELECT a.id, a.name AS nam
FROM ghost a
WHERE a.name NOT 
IN (
SELECT ghost
FROM users
)
ORDER BY RAND( ) 
LIMIT 1

这个查询现在需要 5 秒才能执行,因为 Ghost 表有 1200 个名称记录。如果有人有优化方法来执行此查询,请,因为我想在 Ghost 表中添加更多名称,所以它会比现在大得多。但是,如果查询现在花费很长时间,那么如果我添加更多记录,这对我来说将是 hell ......

下面是两个表的结构: enter image description here enter image description here

最佳答案

可能尝试将其重写为联接,但 ORDER BY RAND() 会进一步损害性能

SELECT a.id, a.name AS nam
FROM ghost a
LEFT OUTER JOIN users b
ON a.name = b.ghost
WHERE b.ghost IS NULL
ORDER BY RAND( ) 
LIMIT 1

users 表在 Ghost 列上是否有索引?

要消除 RAND 的顺序,您可以尝试如下操作:-

SELECT a.id, a.name AS nam
FROM ghost a
INNER JOIN 
(
    SELECT RAND( ) * ( MAX( z.id ) - MIN( z.id ) ) + MIN( z.id ) AS id
    FROM ghost z
    LEFT OUTER JOIN users y
    ON z.name = b.ghost
    WHERE y.ghost IS NULL
) r2
ON a.id >= r2.Id
LEFT OUTER JOIN users b
ON a.name = b.ghost
WHERE b.ghost IS NULL
ORDER BY a.id ASC
LIMIT 1

关于mysql - 优化查询,花费更多时间执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17551674/

相关文章:

mysql - 如何进行所有插入然后检查外键约束? (SQL 事务因外键约束而失败)

php - 我运行什么查询来为 SQL 表中的每组值选择最高值?

php - 反序列化wordpress数据库来查询数据

sql - 为什么 SQL 忽略索引提示并选择不同的索引?

mysql - 通过paypal支付用户佣金,更新网站数据库

PHP 认证库

mysql - 如何加快此 SQL 查询速度

mysql - 2 列索引与 3 列索引性能方面

jquery - jQuery 代码的优化

mysql - 优化 SQL group by 和 join 查询