为什么从视图中读取比从表中读取要慢?

时间:2012-05-27 11:52:31

标签: mysql performance denormalization

我在MySQL下做了一些关于非规范化的测试。我有三个表 t1,t2,t3

t1 = { c1 ,c2,h1}
t2 = { c1 c3 }
t3 = { c3 ,c4,c5,c6}
Pirmary Key 外键

t1有2000个元组,t2相同,t3为1000个元组。

我创建了一个程序来模拟500个并发用户,每个用户执行一个查询。这些是我得到的结果。

SELECT t3.c5 FROM t3
 INNER JOIN t2 ON t2.c3 = t3.c3
 INNER JOIN t1 ON t1.c1 = t2.c1
WHERE t3.c4 > 100

这需要2326毫秒

然后我使用之前的查询CREATE VIEW vista AS SELECT *...创建了一个视图,我再次启动了500个用户,但现在使用此查询:

SELECT c5 FROM vista WHERE c4 > 100

而且耗时2405毫秒! (超过使用JOIN)

然后我尝试了以下查询:

SELECT c5 FROM t3 WHERE c4 > 100

耗时827毫秒


那么,在视图上执行SELECT的过程需要很长时间才能完成?我有什么不对的吗?

0 个答案:

没有答案