我有一个表'客户'和一个子表'订单'。MySQL:在这种情况下我需要索引吗?
对于某个视图,我需要为每个客户显示最后订单。
由于您无法在连接中使用LIMIT,因此我首先使用了一个带有LEFT JOIN,GROUP_CONCAT和SUBSTRING_INDEX的复杂解决方案来获取最后的订单,但是这非常缓慢,因为有数百万条记录。
然后,我想只是将最后一个OrderID存储在客户表中,每当Orders表发生变化时都会通过触发器进行更新。然后,我只需在该字段的LastOrderID上执行LEFT JOIN即可。
在这种情况下,LastOrderID字段的索引是否有用?或者不会使用它,因为源表始终是客户端,所以在此字段上没有排序,搜索等操作?
我问的原因是,实际上它有点复杂,我可能实际上需要大约20个这样的领域。
更新:
我现在查询是:
SELECT *
FROM Clients AS c
LEFT JOIN Orders AS o ON o.OrderID=c.LastOrderID
会在客户端上LastOrderID指数提高速度,或者是不是neccessary?
我有一个正常的指标在订单中的ClientID上。虽然我没有使用外键。这会提高性能,还是外键只对数据完整性重要? – Dylan
不是必需的。只要检查你的基础知识是否已完成,订单中的clientID上的索引就不会是等待发生的可伸缩性问题。我建议在ClientID和OrderNumber DESC上都有关键字,这样服务器只需检查客户端命令块的开始,然后找到它找到的第一行。涉及的读取量较少。 – KingCronus