首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL优化查询

MYSQL优化查询
EN

Stack Overflow用户
提问于 2017-07-10 08:17:50
回答 1查看 61关注 0票数 0

我试图在Mysql中优化一个查询,现在这个查询需要0,5秒,表只有2500行。我有两张桌子,一张是票,另一张是分组的票。

代码语言:javascript
复制
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

我的问题是:

代码语言:javascript
复制
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将按每一行进行一次选择,因此在表有数百万行的将来,这个查询将很难处理。

我错了吗?有人知道更好的方法来获取这些信息吗?我需要知道一张票是否与查询中的其他票证组合在一起。

诚挚的问候。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-10 08:20:08

试试这个(您的查询有一个冗余的IN SELECT .)

代码语言:javascript
复制
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

关于新问题的新版本,如下所示:可能是您想要的东西:

代码语言:javascript
复制
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
;

也可能有用

代码语言:javascript
复制
CREATE INDEX GROUPTICKETS_IX01 ON GROUPTICKETS(ID_RELATION, ID_TICKET);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45007001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档