SQL查询扼杀了服务器

时间:2011-10-06 05:54:42

标签: 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
GROUP BY i.invoiceid
LIMIT 0 , 30

3 个答案:

答案 0 :(得分:5)

您包含订单表但未加入订单。这将产生一个完整的交叉连接,可能会产生数百万行。

答案 1 :(得分:0)

使用EXPLAIN查找查询计划。从那里你可以找出所需的索引。这些指数将大大提高绩效。

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

答案 2 :(得分:0)

您没有在表格上添加任何联接。我相信默认情况下会进行交叉连接。这意味着如果您有1000个项目,100,000个订单和100,000个发票,结果集将是1,000,000,000,000(1万亿)记录。

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