New (backward-compatible) connect protocol that allows you to specify the database to use when connecting, to get much faster connections to a specific database.
The mysql_real_connect()
call is changed
to:
mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, uint port, const char *unix_socket, uint client_flag)
Each connection is handled by its own thread, rather than by
the master accept()
thread. This fixes
permanently the telnet bug that was a topic on the mail list
some time ago.
All TCP/IP connections are now checked with
backward-resolution of the hostname to get better security.
mysqld
now has a local hostname resolver
cache so connections should actually be faster than before,
even with this feature.
A site automatically will be blocked from future connections if someone repeatedly connects with an ``improper header'' (like when one uses telnet).
You can now refer to tables in different databases with
references of the form tbl_name@db_name
or db_name.tbl_name
. This makes it
possible to give a user read access to some tables and write
access to others simply by keeping them in different
databases!
Added --user
option to
mysqld
, to allow it to run as another
Unix user (if it is started as the Unix
root
user).
Added caching of users and access rights (for faster access rights checking)
Normal users (not anonymous ones) can change their password
with mysqladmin password "new_password"
.
This uses encrypted passwords that are not logged in the
normal MySQL log!
All important string functions are now coded in assembler for x86 Linux machines. This gives a speedup of 10% in many cases.
For tables that have many columns, the column names are now hashed for much faster column name lookup (this will speed up some benchmark tests a lot!)
Some benchmarks are changed to get better individual timing. (Some loops were so short that a specific test took < 2 seconds. The loops have been changed to take about 20 seconds to make it easier to compare different databases. A test that took 1-2 seconds before now takes 11-24 seconds, which is much better)
Re-arranged SELECT
code to handle some
very specific queries involving group functions (like
COUNT(*)
) without a GROUP
BY
but with HAVING
. The
following now works:
mysql> SELECT COUNT(*) as C FROM table HAVING C > 1;
Changed the protocol for field functions to be faster and
avoid some calls to malloc()
.
Added -T32
option to
mysqld
, for running all queries under the
main thread. This makes it possible to debug
mysqld
under Linux with
gdb
!
Added optimization of not_null_column IS
NULL
(needed for some Access queries).
Allow STRAIGHT_JOIN
to be used between
two tables to force the optimizer to join them in a specific
order.
String functions now return VARCHAR
rather than CHAR
and the column type is
now VARCHAR
for fields saved as
VARCHAR
. This should make the
MyODBC
driver better, but may break some
old MySQL clients that don't handle
FIELD_TYPE_VARCHAR
the same way as
FIELD_TYPE_CHAR
.
CREATE INDEX
and DROP
INDEX
are now implemented through ALTER
TABLE
. CREATE TABLE
is still
the recommended (fast) way to create indexes.
Added --set-variable
option
wait_timeout
to
mysqld
.
Added time column to mysqladmin
processlist
to show how long a query has taken or
how long a thread has slept.
Added lots of new variables to show
variables
and some new to show
status
.
Added new type YEAR
.
YEAR
is stored in 1 byte with allowable
values of 0, and 1901 to 2155.
Added new DATE
type that is stored in 3
bytes rather than 4 bytes. All new tables are created with
the new date type if you don't use the
--old-protocol
option to
mysqld
.
Fixed bug in record caches; for some queries, you could get
Error from table handler: #
on some
operating systems.
Added --enable-assembler
option to
configure
, for x86 machines (tested on
Linux + gcc
). This will enable assembler
functions for the most important string functions for more
speed!
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.