View Code对于这个直方图,查询现在大约需要0.5秒。为什么呢? 主要原因可以通过谓词“web_page.wp_char_count BETWEEN 5000 AND 5200 "得到。在没有任何统计数据可用的情况下,优化器假定表“web_page”中有11.11%的行匹配给定的谓词。然而,这是错误的。通过验证表里的数据,我们可以看到只有1.6%匹配这个谓词(60行中有一行):
mysql> SELECT
-> (SELECT COUNT(*) FROM web_page WHERE web_page.wp_char_count BETWEEN 5000 AND 5200)
-> /
-> (SELECT COUNT(*) FROM web_page) AS ratio;
+--------+
| ratio |
+--------+
| 0.0167 |
+--------+
1 row in set (0.00 sec)
复制代码
有了直方图统计信息,优化器现在知道了这一点,并在连接顺序中提前推入表(译注:原文是pushes the table earlier in the join order,应该是将相关的表选为驱动表,符合小表驱动大表的原则),从而生成执行计划,执行速度提高三倍。Query 61