MYSQL子查询计数缓慢

MYSQL子查询计数缓慢,mysql,Mysql,我有下面的查询,它提取了我需要的信息,但是使用起来太慢了。它基本上是一个对两个表的select查询,它拉入不同的列,还包括来自另一个表的计数。我希望能在这方面得到一些帮助,因为我已经挣扎了几天了。我在tblDriver状态栏上有一个索引 SELECT date_format(`tblAvailability`.`adate`,'%e %b %Y') AS `adate`, date_format(`tblAvailability`.`adate`,'%a') AS `aday`, `tblV

我有下面的查询,它提取了我需要的信息,但是使用起来太慢了。它基本上是一个对两个表的select查询,它拉入不同的列,还包括来自另一个表的计数。我希望能在这方面得到一些帮助,因为我已经挣扎了几天了。我在tblDriver状态栏上有一个索引

SELECT date_format(`tblAvailability`.`adate`,'%e %b %Y') AS `adate`,
  date_format(`tblAvailability`.`adate`,'%a') AS `aday`, `tblVenue`.`name` AS `name`, 
  tblAvailability.cars, `tblAvailability`.`adate` AS `bdate`,
`tblAvailability`.`totalslots` AS `totslots`,
(SELECT count(*) FROM `tblDriver` WHERE ((`tblDriver`.`status` <> 'refunded') and (`tblDriver`.`status` <> 'rejected') and (`tblDriver`.`status` <> 'rebook') and (`tblDriver`.`status` <> 'rebook-cust') and (`tblDriver`.`eventid` = `tblAvailability`.`id`))) AS `bslots` 
    FROM (`tblAvailability` join `tblVenue` on((`tblAvailability`.`idvenue` = `tblVenue`.`id`))) 
    WHERE ((`tblAvailability`.`adate` > now()) 
    AND (`tblAvailability`.`status` <> 'inactive') and (`tblAvailability`.`status` <> 'removed')) 
    GROUP BY `tblAvailability`.`adate`,`tblVenue`.`name` 
    ORDER BY `tblAvailability`.`adate`,`tblVenue`.`name`

这是您的查询,稍微整理一下:

SELECT date_format(a.`adate`,'%e %b %Y') AS adate, date_format(a.adate, '%a') AS aday, 
       v.name, a.cars, a.adate AS bdate, a.`totalslots` AS `totslots`,
       (SELECT count(*)
        FROM `tblDriver` d
        WHERE d.status not in ('refunded', 'rejected', 'rebook', 'rebook-cust') and
              d.eventid = a.id
       ) AS bslots 
FROM tblAvailability a join
     tblVenue v
     on a.idvenue = v.id
WHERE a.adate > now() AND
      a.status not in ('inactive', 'removed')
GROUP BY a.adate, v.name
ORDER BY a.adate, v.name;
既然它有点可读性,就可以提出建议了。driverstatus上的索引可能没有帮助。尝试以下索引:

tblDriver(eventid, status)
tblAvailability(adate, status, idvenue)
tblVenue(id)

最后一个可能不需要,因为vention.id可能被声明为主键。

太好了。非常感谢。还感谢您提供的整理示例。我将对此进行研究,并从您建议的格式/布局中学习。我想我的学习方式有点混乱正如你所想,我确实有第三个索引,但其他两个索引帮助加快了速度。现在我已经意识到,这只是一天中的第一节课,我通过将总和加在a.totalslots上整理了totslots。只需要计算出如何对子查询中的BSlot求和。