--------+ | count(*) | +----------+ | 1298576 | +----------+ 1 row in set (1.71 sec)
执行了将近2秒。
mysql> select count(*) from t_group_david; +----------+ | count(*) | +----------+ | 1298576 | +----------+ 1 row in set (0.00 sec) 几乎是瞬间的。
mysql> select count(*) from t_group where user_name <> ''david''; +----------+ | count(*) | +----------+ | 9090032 | +----------+ 1 row in set (9.26 sec) 执行了将近10秒,可以想象,这个是实际的项目中是不能忍受的。 mysql> select (select count(*) from t_group) - (select count(*) from t_group_david) as total; +---------+ | total | +---------+ | 9090032 | +---------+ 1 row in set (0.00 sec) 几乎是瞬间的。
我们来看看聚集函数。 对于原表的操作。
mysql> select min(money),max(money) from t_group where user_name = ''david''; +------------+------------+ | min(money) | max(money) | +------------+------------+ | -6.41 | 500.59 | +------------+------------+ 1 row in set (0.00 sec) 最小,最大值都是FULL INDEX SCAN。所以是瞬间的。 mysql> select sum(money),avg(money) from t_group where user_name = ''david''; +--------------+------------+ | sum(money) | avg(money) | +--------------+------------+ | 319992383.84 | 246.417910 | +--------------+------------+ 1 row in set (2.15 sec) 其他聚集函数的结果就不是FULL INDEX SCAN了。耗时2.15秒。
对于小表的操作。 mysql> select min(money),max(money) from t_group_david; +------------+------------+ | min(money) | max(money) | +------------+------------+ | -6.41 | 500.59 | +------------+------------+ 1 row in set (1.50 sec) 最大最小值完全是FULL TABLE SCAN,耗时1.50秒,不划算。以此看来。 mysql> select sum(money),avg(money) from t_group_david; +--------------+------------+ | sum(money) | avg(money) | +--------------+------------+ | 319992383.84 | 246.417910 | +--------------+------------+ 1 row in set (1.68 sec)
取得这两个结果也是花了快2秒,快了一点。
我们来看看这个小表的结构。 mysql> |