我试图在Mysql中优化一个查询,现在这个查询需要0,5秒,表只有2500行。我有两张桌子,一张是票,另一张是分组的票。
Tickets:
- ID : Int (Primary Key)
- Name of the ticket: text
GroupTickets:
- ID : Int (Primary Key)
- ID_relation: Int -> the id of the group of the tickets
- ID_Ticket: Int -> the id of the ticket我的问题是:
Select T.id, T.name, Count(GP.id_relation)
FROM Tickets as T, GroupTickets as GP
WHERE GP.id_relation IN (
Select id_relation from GroupTickets
Where id_ticket=T.id
)where子句中的select使mysql将按每一行进行一次选择,因此在表有数百万行的将来,这个查询将很难处理。
我错了吗?有人知道更好的方法来获取这些信息吗?我需要知道一张票是否与查询中的其他票证组合在一起。
诚挚的问候。
发布于 2017-07-10 08:20:08
试试这个(您的查询有一个冗余的IN SELECT .)
Select T.id, T.name, Count(GP.id) AS RC
FROM Tickets as T
INNER JOIN GroupTickets as GP ON GP.ID_TICKET = T.ID
GROUP BY T.ID, T.name关于新问题的新版本,如下所示:可能是您想要的东西:
SELECT A.ID, A.NAME, B.ID_RELATION, C.RC
FROM TICKETS A
INNER JOIN GROUPTICKETS B ON B.ID_TICKET = A.ID
INNER JOIN (SELECT ID_RELATION, COUNT(*) AS RC
FROM GROUPTICKETS A
GROUP BY ID_RELATION) C ON C.ID_RELATION = B.ID_RELATION
;也可能有用
CREATE INDEX GROUPTICKETS_IX01 ON GROUPTICKETS(ID_RELATION, ID_TICKET);https://stackoverflow.com/questions/45007001
复制相似问题