Mysql “SQL优化”;是空的;具有左联接的查询

Mysql “SQL优化”;是空的;具有左联接的查询,mysql,left-join,isnull,sql-optimization,Mysql,Left Join,Isnull,Sql Optimization,我正在做一个涉及单词及其翻译的项目。翻译人员必须经常处理的问题之一(大约每10秒一次)是: 从PWP中选择* p.id=w.wordid上的左连接词w 其中w.code为空 或(w.代码“USER1”和w.代码“USER2”) 按兰德订购()限制10 接收用户尚未翻译的待翻译单词。在这种情况下,我们希望禁止USER2输入单词 pwords表有大约66k个条目,words表有大约55k个条目 这个查询大约需要500秒才能完成,而如果我删除IS NULL,查询需要0.0245毫秒。我的问题是:有没

我正在做一个涉及单词及其翻译的项目。翻译人员必须经常处理的问题之一(大约每10秒一次)是:

从PWP中选择*
p.id=w.wordid上的左连接词w
其中w.code为空
或(w.代码“USER1”和w.代码“USER2”)
按兰德订购()限制10
接收用户尚未翻译的待翻译单词。在这种情况下,我们希望禁止USER2输入单词

pwords表有大约66k个条目,words表有大约55k个条目

这个查询大约需要500秒才能完成,而如果我删除IS NULL,查询需要0.0245毫秒。我的问题是:有没有办法优化这个查询?我真的需要压缩数字

该场景是:USER1不希望words表中有来自USER2的任何数据库条目。它不希望自己的数据库条目来自同一个表。因此,我需要使用IS NULL或类似的方法从除USER1和USER2之外的所有用户(从其他用户或NULL条目)获取条目

tl;所以我的问题是:有没有办法让这个查询运行得更快?“为空”是否可优化


非常感谢所有帮助。

您可以尝试使用子查询以尽快筛选行(使用
WHERE
语句):

SELECT * 
FROM pwords p 
LEFT JOIN 
    (SELECT *
    FROM words w
    WHERE (w.code <> "USER1" AND w.code <> "USER2")) subq
ON p.id = subq.wordid
WHERE w.code IS NULL
ORDER BY rand() LIMIT 10

这使得查询下降到0.1326左右。非常感谢你!如果可以的话,我会投你一票!同样感谢你教我关于子查询的知识,作为一个业余爱好者,我以前从未遇到过它们。你仍然可以将其标记为正确答案:)有关MySQL中子查询的更多信息,请访问:
SELECT * 
FROM pwords p 
LEFT JOIN 
    (SELECT *
    FROM words w
    WHERE (w.code <> "USER1" AND w.code <> "USER2")) subq
ON p.id = subq.wordid
WHERE w.code IS NULL
ORDER BY rand() LIMIT 10
SELECT * 
FROM pwords p 
WHERE NOT EXISTS
    (SELECT *
    FROM words w
    WHERE p.id=w.wordid  AND (w.code <> "USER1" AND w.code <> "USER2")) 
ORDER BY rand() LIMIT 10