Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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,是否有其他方法优化此查询 select c.* FROM companies AS c JOIN users AS u USING(companyid) JOIN jobs AS j USING(userid) JOIN useraccounts AS ua USING(userid) WHERE j.jobid = 123; 我假设已经创建了适当的索引-这始终是任何查询优化的第一步。 不管索引如何,在这种情况下值得尝试的一种解决方案是反连接: select c.*

是否有其他方法优化此查询

select c.* 
FROM companies AS c 
  JOIN users AS u USING(companyid) 
  JOIN jobs AS j USING(userid) 
  JOIN useraccounts AS ua USING(userid) 
WHERE j.jobid = 123; 

我假设已经创建了适当的索引-这始终是任何查询优化的第一步。

不管索引如何,在这种情况下值得尝试的一种解决方案是反连接:

select c.* 
FROM companies AS c 
WHERE EXISTS (
  SELECT 1 FROM users AS u 
  JOIN jobs AS j USING(userid) 
  JOIN useraccounts AS ua USING(userid)
  WHERE u.companyid = c.companyid
    AND j.jobid = 123
) 
; 

但是,此查询仅列出不同的公司,而原始查询可能会将同一公司相乘多次。

一种方法是只选择实际需要的列!为什么你参与其中却从不从中选择价值观?另外,您没有说明您有哪些表结构,启用了哪些索引,等等
说明了什么?是否使用索引。。。你们有指数吗?