The following features are implemented in MySQL 5.0:
BIT
Data
Type: Can be used to store numbers in binary
notation. See Section 10.1.1, “Overview of Numeric Types”.
Cursors: Elementary support
for server-side cursors. For information about using cursors
within stored routines, see Section 12.7.5, “Cursors”. For
information about using cursors from within the C API, see
Section 20.8.7.3, “mysql_stmt_attr_set()
”.
Information Schema: The
introduction of the INFORMATION_SCHEMA
database in MySQL 5.0 provided a standards-compliant means for
accessing the MySQL Server's metadata; that is, data about the
databases (schemas) on the server and the objects which they
contain. See Chapter 19, INFORMATION_SCHEMA
Tables.
Instance Manager: Can be used to start and stop the MySQL Server, even from a remote host. See Section 4.6.10, “mysqlmanager — The MySQL Instance Manager”.
Precision Math: MySQL 5.0 introduced stricter criteria for acceptance or rejection of data, and implemented a new library for fixed-point arithmetic. These contributed to a much higher degree of accuracy for mathematical operations and greater control over invalid values. See Section 11.13, “Precision Math”.
Storage Engines: Storage
engines added in MySQL 5.0 include ARCHIVE
and FEDERATED
. See
Section 13.8, “The ARCHIVE
Storage Engine”, and
Section 13.7, “The FEDERATED
Storage Engine”.
Stored Routines: Support for named stored procedures and stored functions was implemented in MySQL 5.0. See Section 18.2, “Using Stored Routines (Procedures and Functions)”.
Strict Mode and Standard Error Handling: MySQL 5.0 added a strict mode where by it follows standard SQL in a number of ways in which it did not previously. Support for standard SQLSTATE error messages was also implemented. See Section 5.1.7, “Server SQL Modes”.
Triggers: MySQL 5.0 added limited support for triggers. See Section 18.3, “Using Triggers”, and Section 1.8.5.3, “Stored Routines and Triggers”.
VARCHAR
Data Type: The effective maximum length of a
VARCHAR
column was increased to
65,535 bytes, and stripping of trailing whitespace was
eliminated. (The actual maximum length of a
VARCHAR
is determined by the
maximum row size and the character set you use. The maximum
effective column length is subject to a
row size of 65,535 bytes, which is shared among all columns.)
See Section 10.4, “String Types”.
Views: MySQL 5.0 added support for named, updatable views. See Section 18.4, “Using Views”, and Section 1.8.5.5, “Views”.
XA Transactions: See Section 12.3.7, “XA Transactions”.
MySQL Enterprise. For assistance in maximizing your usage of the many new features of MySQL, subscribe to MySQL Enterprise. For more information, see http://www.mysql.com/products/enterprise/advisors.html.
Performance enhancements: A number of improvements were made in MySQL 5.0 to improve the speed of certain types of queries and in the handling of certain types. These include:
MySQL 5.0 introduces a new “greedy” optimizer
which can greatly reduce the time required to arrive at a
query execution plan. This is particularly noticeable
where several tables are to be joined and no good join
keys can otherwise be found. Without the greedy optimizer,
the complexity of the search for an execution plan is
calculated as
, where
N
!N
is the number of tables to be
joined. The greedy optimizer reduces this to
,
where N
!/(D
-1)!D
is the depth of the
search. Although the greedy optimizer does not guarantee
the best possible of all execution plans (this is
currently being worked on), it can reduce the time spent
arriving at an execution plan for a join involving a great
many tables — 30, 40, or more — by a factor of
as much as 1,000. This should eliminate most if not all
situations where users thought that the optimizer had hung
when trying to perform joins across many tables.
Use of the Index Merge method to
obtain better optimization of
AND
and
OR
relations over different
keys. (Previously, these were optimized only where both
relations in the WHERE
clause involved
the same key.) This also applies to other one-to-one
comparison operators (>
,
<
, and so on), including
=
and the IN
operator. This means that MySQL can use multiple indexes
in retrieving results for conditions such as
WHERE key1 > 4 OR key2 < 7
and
even combinations of conditions such as WHERE
(key1 > 4 OR key2 < 7) AND (key3 >= 10 OR key4 =
1)
. See
Section 7.2.6, “Index Merge Optimization”.
A new equality detector finds and optimizes
“hidden” equalities in joins. For example, a
WHERE
clause such as
t1.c1=t2.c2 AND t2.c2=t3.c3 AND t1.c1 < 5
implies these other conditions
t1.c1=t3.c3 AND t2.c2 < 5 AND t3.c3 < 5
These optimizations can be applied with any combination of
AND
and
OR
operators. See
Section 7.2.11, “Nested Join Optimization”, and
Section 7.2.12, “Outer Join Simplification”.
Optimization of NOT IN
and NOT
BETWEEN
relations, reducing or eliminating table
scans for queries making use of them by mean of range
analysis. The performance of MySQL with regard to these
relations now matches its performance with regard to
IN
and BETWEEN
.
The VARCHAR
data type as
implemented in MySQL 5.0 is more efficient than in
previous versions, due to the elimination of the old (and
nonstandard) removal of trailing spaces during retrieval.
The addition of a true BIT
column type; this type is much more efficient for storage
and retrieval of Boolean values than the workarounds
required in MySQL in versions previous to 5.0.
Performance Improvements in the
InnoDB
Storage Engine:
New compact storage format which can save up to 20% of
the disk space required in previous
MySQL/InnoDB
versions.
Faster recovery from a failed or aborted
ALTER TABLE
.
Faster implementation of TRUNCATE
TABLE
.
Performance Improvements in the
NDBCLUSTER
Storage
Engine:
Faster handling of queries that use
IN
and BETWEEN
.
Condition pushdown: In cases involving the comparison of an unindexed column with a constant, this condition is “pushed down” to the cluster where it is evaluated in all partitions simultaneously, eliminating the need to send nonmatching records over the network. This can make such queries 10 to 100 times faster than in MySQL 4.1 Cluster.
See Section 12.8.2, “EXPLAIN
Syntax”, for more information.
(See Chapter 17, MySQL Cluster.)
For those wishing to take a look at the bleeding edge of MySQL development, we make our Bazaar repository for MySQL publicly available. See Section 2.16.3, “Installing from the Development Source Tree”.
User Comments
Add your own comment.