Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql没有性能问题_Mysql - Fatal编程技术网

MySql没有性能问题

MySql没有性能问题,mysql,Mysql,我在一个表上运行下面的查询,表中有大约100k行,使用NOT in,性能非常糟糕。有没有其他方法可以达到同样的效果 SELECT c.Id, c.Name, c.address, c.town, c.county, c.postcode, FROM contractor AS c inner join Order w on w.Id = c.Id WHERE (c.valid = 1) and c.Id not in (select w.Id from Order w) ORDER BY c.N

我在一个表上运行下面的查询,表中有大约100k行,使用NOT in,性能非常糟糕。有没有其他方法可以达到同样的效果

SELECT c.Id, c.Name, c.address, c.town,
c.county, c.postcode, FROM contractor AS c
inner join Order w
on w.Id = c.Id WHERE (c.valid = 1) and c.Id not in
(select w.Id from Order w) ORDER BY c.Name ASC

谢谢

我个人看不到对代码的进一步改进,除了您可能希望为字段添加索引。一般规则是在
WHERE
子句中使用的列中添加索引。

您似乎有一个到
Order
的冗余内部联接
我相信下面的查询将产生相同的结果,并可能提高性能

SELECT  c.Id
        , c.Name
        , c.address
        , c.town
        , c.county
        , c.postcode
FROM    contractor AS c 
        left outer join Order w on w.Id = c.Id 
WHERE   (c.valid = 1) 
        and w.Id IS NULL
ORDER BY 
        c.Name ASC 

此查询不应返回任何行。您的联接只获得与w.Id相等的c.Id(因此处于从订单w中选择w.Id中)。此外,还有一个语法错误(c.邮政编码后的“,”),我想这是TS想要的,+1。嗨,谢谢你的建议。不幸的是,在我发言时,它仍在运行(2-3分钟)。。。有没有办法使用NOT EXISTS?它可能很慢,因为您尚未为列编制索引。在c.Id和w.Id列上放置一个索引,您应该可以很好地执行。正如Lex所说,您可能需要为列编制索引。您应该查看查询计划以确认这一点。