我在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的过程需要很长时间才能完成?我有什么不对的吗?