繁体   English   中英

查询执行时间慢

[英]Slow query execution time

SELECT p.id, 
       p.title, 
       p.slug, 
       p.content, 
       (SELECT url 
        FROM   gallery 
        WHERE  postid = p.id 
        LIMIT  1) AS url, 
       t.name 
FROM   posts AS p 
       INNER JOIN termrel AS tr 
         ON ( tr.object = p.id ) 
       INNER JOIN termtax AS tx 
         ON ( tx.id = tr.termtax_id ) 
       INNER JOIN terms AS t 
         ON ( t.id = tx.term_id ) 
WHERE  tx.taxonomy_id = 3 
       AND p.post_status IS NULL 
ORDER  BY t.name ASC 

该查询大约花费0.2407s来执行。 如何使其快速?

关联的子查询在逐行执行时可能具有低于标准的性能 要解决此问题,请将您的相关子查询移到常规子查询/派生表中并加入其中。 这样,它将不会在整个返回结果集中逐行执行代码,因为它将在select语句之前执行。

确认相关子查询的mysql特定链接不是mysql中的最佳选择。 如何优化 Answer指示msql非常不利于优化相关子查询

我使用sql-server,但是我确定mysql的原理是相同的 ,因此我希望这至少可以为您指明正确的方向。 您将需要对每笔贷款进行分区/返回结果,也许有些可能会干扰mysql特定的语法,并且我可以更新我的答案

select
    p.id
   ,p.title
   ,p.slug
   ,p.content
   ,t.name
   ,mySubQuery.value
from
    posts as p
    inner join termrel as tr
    on ( tr.object = p.id )
    inner join termtax as tx
    on ( tx.id = tr.termtax_id )
    inner join terms as t
    on ( t.id = tx.term_id )

    left join (
                -- use MYSQL function to partition the reslts and only return 1, I use sql-server, not sure of the RDMS specific syntax
                select
                id
                ,url
                from
                    gallery
                limit 1
              ) as mySubquery
    on mySubquery.id = p.id


where
    tx.taxonomy_id = 3
    and p.post_status is null
order by
    t.name asc 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM