Mysql 查询获取数据花费的时间太长

Mysql 查询获取数据花费的时间太长,mysql,performance,mysql-slow-query-log,Mysql,Performance,Mysql Slow Query Log,我知道查询日志很慢,但这不只是针对超过最大执行时间的查询吗?我想我的问题有点不同 我正在运行下面的查询,对我来说,它似乎不应该出现问题。但是当我运行它的时候,运行时间超过了20秒,然后它就停在那里好长时间了!由于数据库性能问题,我不得不停止它 谁能解释一下我哪里出了问题。编码新手,所以请温柔一点 SELECT t1.oid, (SELECT DATE_FORMAT(t2.date, '%d/%m/%y') AS 'AVF Date'

我知道查询日志很慢,但这不只是针对超过最大执行时间的查询吗?我想我的问题有点不同

我正在运行下面的查询,对我来说,它似乎不应该出现问题。但是当我运行它的时候,运行时间超过了20秒,然后它就停在那里好长时间了!由于数据库性能问题,我不得不停止它

谁能解释一下我哪里出了问题。编码新手,所以请温柔一点

SELECT 
t1.oid,
(SELECT 
        DATE_FORMAT(t2.date,
                    '%d/%m/%y') AS 'AVF Date'
    FROM
        t2
    WHERE
        t1.oid = t2.fk_oid
            AND t2.type = '-25'
            AND YEAR(t2.date) BETWEEN 2005 AND 2014
    ORDER BY t2.date ASC
    LIMIT 1) AS 'AVF Date',
t2.site 
FROM
t1
left join t2 on t1.oid=t2.fk_oid
更新-好的,所以我需要的是如下。我们有一个患者数据库,这些患者在数据库中记录了治疗过程。我试图返回患者oid t1.oid以及他们在2005年至2014年期间进行的第一次手术,以及他们分别在t2.date和t2.site进行手术的地点,但前提是该手术属于特定类型t2.type='-25'

基本上是这样。所有在2005年至2014年间发生AVF的患者以及AVF的部位(本例中为左臂/右臂等)

我希望这能让事情更清楚一点

提前谢谢


Mikey

我认为您可以在选择中仅使用连接而不使用子查询,请尝试:

SELECT t1.oid, DATE_FORMAT(t2.date,'%d/%m/%y'),t2.site
FROM table1 AS t1
LEFT JOIN table2 AS t2
ON t1.oid = t2.fk_oid
WHERE
    t2.type = '-25'
    AND YEAR(t2.date) BETWEEN 2005 AND 2014
ORDER BY t2.date ASC
LIMIT 1;
附言:我还没有测试代码

SELECT  a.fk_oid AS oid,
        DATE_FORMAT(a.first_date, '%d/%m/%y') AS 'AVF Date',
        GROUP_CONCAT(b.site) AS "site(s)"
    FROM  
      ( SELECT  fk_oid,
                MIN(date) AS first_date
            FROM  site
            WHERE  date >  CURDATE() - INTERVAL 10 YEAR
              AND  date <= CURDATE()
              AND t2.type = -25
            GROUP BY  fk_oid 
      ) AS a
    JOIN  site AS b
    WHERE  b.fk_oid = a.fk_oid
      AND  b.date   = a.first_date ; 
内部查询查找每个oid的第一个\u日期。 外部查询获取站点,但进一步假设给定oid和日期可能有多个站点。 INDEXtype,性能需要日期 INDEXfk_oid,性能需要日期 我假设类型是数字,而不是字符串。
我重写了过去10年中的日期比较。如果没有未来的行,首先要获取id和日期:当查询运行缓慢时,请始终对其进行解释并将结果添加到您的问题中。非常感谢。这工作很快,但它返回了一些oid的多行,因为有不同日期的条目。如果有倍数,我想返回第一个日期。这就是为什么我认为子查询会起作用。很抱歉,我没有正确理解,你能再解释一下吗,这样我们就可以按你需要的方式完成它了?@MikeDWakelyn尝试将左连接更改为内部连接,看看它是否返回你想要的结果。谢谢-运行起来要快得多,但获取数据仍然太长,资源太多。@Gregory Hart-谢谢你的编辑,我已经在查询中添加了t2.site。谢谢大家的回答。有用的