我有表 User 和表 Order,现在我想查找超过 100 个订单的用户的名称,我可以进行如下查询:
SELECT U.name
FROM User U
WHERE 100 < (
SELECT COUNT(*) FROM Orders O
WHERE O.uid=U.uid
)
由于相关子查询,这很慢。
因此,我认为我可以通过创建一个视图来优化它,该视图包含每个用户下了多少订单,如下所示
View UserOrderCount
uid orderCount
0 11
1 108
2 100
3 99
4 32
5 67
那么查询就简单多了:
SELECT U.name
FROM User U, UserOrderCount C
WHERE 100 < C.orderCount And U.uid=C.cid;
但这需要更多时间,我不知道为什么......请对此有所了解,提前谢谢!
编辑:
以下是视图的创建方式:
CREATE VIEW UserOrderCount
AS
select U.uid, count(*) AS orderCount
from User U, orders O
group by U.uid;