我在 MySQL 下做一些关于非规范化的测试。我有三张桌子t1, t2, t3
t1 = { c1 ,c2,h1}
t2 = { c1 , c3 }
t3 = { c3 , c4, c5, c6}
主键 外键
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 需要这么长时间才能完成呢?有什么我做的不对吗?