你认为视图不是MySQL的性能优势是对的.
他们的目的是使构建在其上的其他查询更易于阅读,并确保其他用户和程序员更有可能正确使用数据.将它们视为一种虚拟去标准化数据的方法,而不会影响实际对数据进行非规范化的大小/性能影响.
就像最简单的情况一样,我们只需要接受订单和订单项.每个订单都有一个订单项.
订单表可能包含以下列:
ID
Status
Created_at
Paid_on
line_items表可能包含以下列:
LI_ID
order_id
sku_id
quantity
price
在编写代码和查询时,您会发现您将一直在进行以下连接 –
orders
join line_items on line_items.order_id = orders.id
这可以通过创建视图来简化:
create view 'order_lines' as
select * from orders
join line_items on line_items.order_id = orders.id
所以你的查询将来自:
select orders.id, sum(price) from orders
join line_items on line_items.order_id = orders.id
where created_at >= '2011-12-01' and created_at < '2012-01-01
group by orders.id;
至:
select id, sum(price) from order_lines
where created_at >= '2011-12-01' and created_at < '2012-01-01
group by id;
DB将以完全相同的方式执行这两种方式,但更容易阅读.不可否认,在这种情况下,阅读并不容易,但更容易阅读和编码.