第17章:MySQL簇 / 17.9. MySQL簇发展的重要历程 / 17.9.1. MySQL 5.0中的MySQL簇变化

MySQL 5.0.3-beta以及更新的版本包含一些有趣的新特性:

·         下推条件:一种查询,如:

·                SELECT * FROM t1 WHERE non_indexed_attribute = 1;

它将使用全表扫描,并会在簇的数据节点内评估条件。因此,不需要在网络中发送用于评估的记录(也就是说,采用函数传输而不是数据传输)。对于这种查询类型,其速度快510倍。请注意,模目前该特性是默认禁止的(有待更彻底的测试),但在某些情况下也能良好工作。使用命令“SET engine-condition-pushdown=On; command”可启用该特性。作为可选方式,你也可以用新的“--engine-condition-pushdown”选项标志启动MySQL服务器,运行启用了该特性的mysqld

可以使用EXPLAIN来判定在何时使用了下推条件。

该变化的一项主要优点在于,能够以并行方式执行查询。这意味着,与以往相比,对非索引列的查询要快510倍,乘以数据节点的数目。原因在于,多个CPU能以并行方式执行查询。

·         降低了IndexMemory使用:MySQL 5.1中,每条记录约消耗25字节的索引内存,每个唯一索引每记录将使用25字节的索引内存(不含某些数据内存,这是因为它们保存在单独表中)。这是因为在索引内存中,不再需要保存主键。

·         MySQL簇启用了查询高速缓冲:关于配置和使用查询高速缓冲的更多信息,请参见5.13节,“MySQL查询高速缓冲”

·         新的优化:有一个需要给予特别关注的优化,即,目前在某些查询中使用了批式读取接口。例如,考虑下述查询:

·                SELECT * FROM t1 WHERE primary_key IN (1,2,3,4,5,6,7,8,9,10);

与以往的MySQL簇版本相比,该查询的执行速度快23倍,原因在于,全部10个 键查找是在1个批次中发出的,而不是一次发送一个。

·         限制元数据对象的数目:MySQL 4.1中,每个簇数据库最多可能包含1600个元数据对象,包括数据库表,系统表,索引和BLOB。在MySQL 5.0中,我们希望将该数值增加到20320。我们打算在2005年年中发布的MySQL 5.0.6 beta版中实现该增强特性。