Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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_Database Performance - Fatal编程技术网

Mysql 如何提高此查询的性能?

Mysql 如何提高此查询的性能?,mysql,database-performance,Mysql,Database Performance,我有以下MySQL查询,它需要超过421ms的时间,我如何优化它 SELECT j.*, c.cl_business_name, c.cl_short_name, m.me_last_name, m.me_first_name, o.co_name, j.jo_deleted_date FROM clients c, companies o, jobs j LEFT JOIN members m ON j.me_id = m.me_id WHERE ? AND j.jo_de

我有以下MySQL查询,它需要超过421ms的时间,我如何优化它

SELECT j.*, c.cl_business_name, c.cl_short_name, 
      m.me_last_name, m.me_first_name, o.co_name, j.jo_deleted_date 
FROM clients c, companies o, jobs j 
LEFT JOIN members m ON j.me_id = m.me_id 
WHERE ? AND j.jo_deleted = ? AND j.co_id = o.co_id AND j.cl_id = c.cl_id 
ORDER BY jo_deleted_date DESC

在这个位置,您需要一个连接条件(默认情况下,mysql使用内部连接)。本公司与客户之间没有任何关系。应该是这样的:“内部连接公司o ON o.id=c.companiesId”

要加快查询速度,请从较小表中最大的表加入

我只能猜测这个关系是什么样子,但这个查询应该可以帮助您完成

我可以想象,这就是为什么,为了这个响应时间

SELECT 
   j.*, 
   c.cl_business_name, 
   c.cl_short_name, 
   m.me_last_name, 
   m.me_first_name, 
   o.co_name 
   [, j.jo_deleted_date  -> can be ignored, is already in j.* included]
FROM clients c
INNER JOIN jobs j  ON j.cl_id = c.cl_id AND j.jo_deleted = ?
INNER JOIN companies o ON j.co_id = o.co_id   
LEFT JOIN members m ON j.me_id = m.me_id 
WHERE ? 
ORDER BY jo_deleted_date DESC

你有创建索引吗?421ms对于一个squillion行来说还不错。说真的,你能展示一下你的桌子设计和说明计划吗。请提供完整的查询,并替换?s。2.请同时提供此查询的解释结果。3.还提供索引列表及其在查询中的表上定义的列名。4.你确定不到半秒的运行时间就那么糟糕吗?我同意显式连接语法比隐式连接语法好,但是,就查询性能而言,几乎没有什么区别。当存在差异时,通常是因为不理解from子句中显式连接的优先级高于逗号运算符。公司和客户之间不必有直接的关系,他们通过工作表进行链接。