Mysql sql查询阻塞了服务器

Mysql sql查询阻塞了服务器,mysql,sql,Mysql,Sql,当我运行这个查询时,mysql服务器的cpu使用率保持在100%并阻塞服务器。我做错了什么 SELECT * FROM projects p, orders o, invoices i WHERE p.project_state = 'product' AND ( p.status = 'expired' OR p.status = 'finished' OR p.status = 'open' ) AND p.user_id = '12' AND i.projectid =0 GR

当我运行这个查询时,mysql服务器的cpu使用率保持在100%并阻塞服务器。我做错了什么

SELECT * 
FROM projects p, orders o, invoices i
WHERE p.project_state =  'product'
AND (
p.status =  'expired'
OR p.status =  'finished'
OR p.status =  'open'
)
AND p.user_id =  '12'
AND i.projectid =0
GROUP BY i.invoiceid
LIMIT 0 , 30

使用
EXPLAIN
查找查询计划。从中可以计算出需要哪些索引。这些指数将大大提高性能


您也没有以任何方式限制订单。

使用
EXPLAIN
查找查询计划。从中可以计算出需要哪些索引。这些指数将大大提高性能


此外,您没有以任何方式限制订单。

您包括订单表,但没有加入订单表。这将产生一个可能产生数百万行的完全交叉联接。

您正在包括orders表,但没有联接到它。这将产生一个可能产生数百万行的完全交叉联接。

您没有在表上放置任何联接。我相信默认情况下,这将进行交叉连接。这意味着,如果你有1000个项目、100000个订单和100000张发票,那么结果集将是100000000000(1万亿)条记录


您可能希望在这些表之间放置一些内部联接。

您没有在这些表上放置任何联接。我相信默认情况下,这将进行交叉连接。这意味着,如果你有1000个项目、100000个订单和100000张发票,那么结果集将是100000000000(1万亿)条记录


您可能希望在这些表之间放置一些内部联接。

检查
EXPLAIN SELECT*FROM…
的输出并发布它。即使有限制,该group by也将在整个表中运行,并且您的其他字段可能不会被索引。您还可以通过在('expired'、'finished'、'open')中写入
p.status,使
和(p.status
更好)
这是EXPLAIN的输出:id select_type table type mable_keys key key len ref rows Extra 1 SIMPLE i ref projectd projectd 4 const 255使用temporary;使用filesort 1 SIMPLE p ALL status,project_state NULL 745使用where 1 SIMPLE o ALL NULL NULL 156检查
EXPLAIN select*from…
并发布。即使有限制,group by也将在整个表中运行,并且您的其他字段可能不会被索引。您还可以通过在('expired'、'finished'、'open'中写入
p.status来改善
和(p.status
这是EXPLAIN:id select\u type table type可能的\u keys key key\u len ref rows额外1个简单i ref projectd projectd 4 const 255使用临时;使用filesort 1 SIMPLE p ALL status,project\u state NULL NULL 745使用其中1 SIMPLE o ALL NULL NULL 156+1他们需要一个
其中p.projectd=o.projectID和o.orderID=i.orderID
或非常相似。+1他们需要一个
,其中p.projectID=o.projectID和o.orderID=i.orderID
或非常相似。