1

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

4

0 回答 0