当我运行此查询时,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
答案 0 :(得分:5)
您包含订单表但未加入订单。这将产生一个完整的交叉连接,可能会产生数百万行。
答案 1 :(得分:0)
使用EXPLAIN
查找查询计划。从那里你可以找出所需的索引。这些指数将大大提高绩效。
此外,您不以任何方式限制订单。
答案 2 :(得分:0)
您没有在表格上添加任何联接。我相信默认情况下会进行交叉连接。这意味着如果您有1000个项目,100,000个订单和100,000个发票,结果集将是1,000,000,000,000(1万亿)记录。
您可能希望在这些表之间放置一些内部联接。