C++ CSS HTML Java JavaScript MySQL Oracle PERL PHP SQL Unix VBScript XHTML XML Сети
MySQL and the Future (MySQL 4.0)
 
MySQL and the Future (The TODO)
===============================

This section summarises the features that we plan to implement in
`MySQL Server'. The lists are broken up per version, and the items are
approximately in the order they will be done.

*Note*: If you are an enterprise level user with an urgent need for a
particular feature, please contact 

New Features Planned For 4.1
----------------------------

 4.1
features::.

   * Stable OpenSSL support (MySQL 4.0 supports rudimentary, not 100%
     tested, support for OpenSSL).

   * Character set casts and syntax for handling multiple character
     sets.

   * More testing of prepared statements and multiple characters sets
     for one table.

Development of other things has already shifted to the 5.0 tree.

New Features Planned For 5.0
----------------------------

 is also a
small chance that some of these features will be added to MySQL 4.1.
For a list what is already done in MySQL 4.1, see *Note Nutshell 4.1
features::.

For those wishing to take a look at the bleeding edge of MySQL
development, we have made our BitKeeper repository for MySQL version
5.0 publicly available.  *Note Installing source tree::.

Stored Procedures
        * Stored procedures are currently being implemented.  This
          effort is based on SQL-99, which has a basic syntax similar
          (but not identical) to Oracle PL/SQL. We will also implement
          the SQL-99 framework to hook in external languages, and
          (where possible) compatibility with, for example, PL/SQL and
          T-SQL.

New functionality
        * Elementary cursor support.

        * Visible `RTREE' index for MyISAM tables.  In 4.1 RTREE
          indexes are used internally for geometrical data, but not
          directly usable.

        * Dynamic length rows for HEAP tables.

Standards compliance, portability and migration
        * Add true `VARCHAR' support (there is already support for this
          in `MyISAM').

 will require less memory and
          be much faster.

        * Allow `DELETE' on `MyISAM' tables to use the record cache.
          To do this, we need to update the threads record cache when
          we update the `.MYD' file.

        * Better in-memory (`HEAP') tables:
             * Dynamic size rows.

             * Faster row handling (less copying).

 in database, table, and column
          names.

Usability enhancements
        * Resolving the issue of `RENAME TABLE' on a table used in an
          active `MERGE' table possibly corrupting the table.

New Features Planned For 5.1
----------------------------

New functionality
        * `FOREIGN KEY' support for all table types.

        * Column-level constraints.

        * Fail-safe replication.

        * Online backup with very low performance penalty.  The online
          backup will make it easy to add a new replication slave
          without taking down the master.

 structures and do more
          efficient foreign key support.

        * Optimise `BIT' type to take 1 bit (now `BIT' takes 1 char).

Usability enhancements
        * Add options to the client/server protocol to get progress
          notes for long running commands.

        * Implement `RENAME DATABASE'. To make this safe for all
          storage engines, it should work as follows:
             * Create the new database.

             * For every table do a rename of the table to another
               database, as we do with the `RENAME' command.

             * Drop the old database.

        * New internal file interface change.  This will make all file
          handling much more general and make it easier to add
          extensions like RAID.  (The current implementation is a hack.)

New Features Planned for the Near Future
----------------------------------------

New functionality
        * Oracle-like `CONNECT BY PRIOR ...' to search tree-like
          (hierarchical) structures.

        * Add all missing SQL-92 and ODBC 3.0 types.

        * Add `SUM(DISTINCT)'.

        * `INSERT SQL_CONCURRENT' and `mysqld --concurrent-insert' to do
          a concurrent insert at the end of the file if the file is
          read-locked.

        * Allow update of variables in `UPDATE' statements. For example:
          `UPDATE TABLE foo SET @a=a+b,a=@a, b=@a+c'.

        * Change when user variables are updated so that one can use
          them with `GROUP BY', as in the following example: `SELECT
          id, @a:=COUNT(*), SUM(sum_col)/@a FROM table_name GROUP BY
          id'.

        * Add an `IMAGE' option to `LOAD DATA INFILE' to not update
          `TIMESTAMP' and `AUTO_INCREMENT' fields.

        * Added `LOAD DATA INFILE ... UPDATE' syntax.
             * For tables with primary keys, if the data contains the
               primary key, entries matching that primary key are
               updated from the remainder of the columns. However,
               columns *missing* from the incoming data feed are not
               touched.

             * For tables with primary keys that are missing some part
               of the key in the incoming data stream, or that have no
               primary key, the feed is treated as a `LOAD DATA INFILE
               ... REPLACE INTO' now.

        * Make `LOAD DATA INFILE' understand syntax like:
               LOAD DATA INFILE 'file_name.txt' INTO TABLE tbl_name
                    TEXT_FIELDS (text_field1, text_field2, text_field3)
                    SET table_field1=CONCAT(text_field1, text_field2),
                        table_field3=23
                    IGNORE text_field3
          This can be used to skip over extra columns in the text file,
          or update columns based on expressions of the read data.

        * New functions for working with `SET' type columns:
             * `ADD_TO_SET(value,set)'

             * `REMOVE_FROM_SET(value,set)'

        * If you abort `mysql' in the middle of a query, you should open
          another connection and kill the old running query.
          Alternatively, an attempt should be made to detect this in
          the server.

        * Add a storage engine interface for table information so that
          you can use it as a system table. This would be a bit slow if
          you requested information about all tables, but very
          flexible.  `SHOW INFO FROM tbl_name' for basic table
          information should be implemented.

        * Allow `SELECT a FROM crash_me LEFT JOIN crash_me2 USING (a)';
          in this case `a' is assumed to come from the `crash_me' table.

        * `DELETE' and `REPLACE' options to the `UPDATE' statement
          (this will delete rows when one gets a duplicate key error
          while updating).

        * Change the format of `DATETIME' to store fractions of seconds.

        * Make it possible to use the new GNU regexp library instead of
          the current one (the GNU library should be much faster than
          the old one).

 doesn't have a `DEFAULT'.

        * Add `ANY()', `EVERY()', and `SOME()' group functions. In
          standard SQL these work only on boolean columns, but we can
          extend these to work on any columns/expressions by applying:
          value == 0 -> FALSE and value <> 0 -> TRUE.

        * Fix that the type for `MAX(column)' is the same as the column
          type:
               mysql> CREATE TABLE t1 (a DATE);
               mysql> INSERT INTO t1 VALUES (NOW());
               mysql> CREATE TABLE t2 SELECT MAX(a) FROM t1;
               mysql> SHOW COLUMNS FROM t2;

Speed enhancements
        * Don't allow more than a defined number of threads to run
          MyISAM recover at the same time.

        * Change `INSERT ... SELECT' to optionally use concurrent
          inserts.

        * Add an option to periodically flush key pages for tables with
          delayed keys if they haven't been used in a while.

        * Allow join on key parts (optimisation issue).

        * Add simulation of `pread()'/`pwrite()' on Windows to enable
          concurrent inserts.

        * A logfile analyser that could parse out information about
          which tables are hit most often, how often multi-table joins
          are executed, etc.  It should help users identify areas or
          table design that could be optimised to execute much more
          efficient queries.

Internationalisation

Usability enhancements
        * Return the original field types() when doing `SELECT
          MIN(column) ... GROUP BY'.

        * Make it possible to specify `long_query_time' with a
          granularity in microseconds.

        * Link the `myisampack' code into the server, enabling a PACK or
          COMPRESS command on the server.

        * Add a temporary key buffer cache during
          `INSERT/DELETE/UPDATE' so that we can gracefully recover if
          the index file gets full.

        * If you perform an `ALTER TABLE' on a table that is symlinked
          to another disk, create temporary tables on this disk.

        * Implement a `DATE/DATETIME' type that handles time zone
          information properly so that dealing with dates in different
          time zones is easier.

        * Fix configure so that one can compile all libraries (like
          `MyISAM') without threads.

        * Allow SQL variables in `LIMIT', like in `LIMIT @a,@b'.

        * Automatic output from `mysql' to a web browser.

        * `LOCK DATABASES' (with various options).

        
          BY' queries.

        * `mysqladmin copy database new-database'; requires `COPY'
          command to be added to `mysqld'.

        * Processlist should show number of queries/threads.

        * `SHOW HOSTS' for printing information about the hostname
          cache.

        * Change table names from empty strings to `NULL' for
          calculated columns.

        * Don't use `Item_copy_string' on numerical values to avoid
          number->string->number conversion in case of: `SELECT
          COUNT(*)*(id+0) FROM table_name GROUP BY id'

        * Change so that `ALTER TABLE' doesn't abort clients that
          execute `INSERT DELAYED'.

        * Fix so that when columns are referenced in an `UPDATE' clause,
          they contain the old values from before the update started.

New operating systems
        * Port of the MySQL clients to LynxOS.

New Features Planned for the Mid-Term Future
--------------------------------------------

   * Implement function:
     `get_changed_tables(timeout,table1,table2,...)'.

   * Change reading through tables to use memmap when possible. Now only
     compressed tables use memmap.

   * Make the automatic timestamp code nicer.  Add timestamps to the
     update log with `SET TIMESTAMP=#;'.

   * Use read/write mutex in some places to get more speed.

   * Simple views (stepwise implementation up to full functionality).
     *Note ANSI diff Views::.

   * Automatically close some tables if a table, temporary table, or
     temporary files gets error 23 (not enough open files).

   * When one finds a field=#, change all occurrences of field to #.
     Now this is only done for some simple cases.

   * Change all const expressions with calculated expressions if
     possible.

   * Optimise key = expression. At the moment only key = field or key =
     constant are optimised.

   * Join some of the copy functions for nicer code.

   * Change `sql_yacc.yy' to an inline parser to reduce its size and get
     better error messages (5 days).

   * Change the parser to use only one rule per different number of
     arguments in function.

   * Use of full calculation names in the order part (for ACCESS97).

   * `MINUS', `INTERSECT', and `FULL OUTER JOIN'.  (Currently `UNION'
     [in 4.0] and `LEFT|RIGHT OUTER JOIN' are supported.)

   * `SQL_OPTION MAX_SELECT_TIME=#' to put a time limit on a query.

   * Make the update log write to a database.

   * Enhance `LIMIT' to allow retrieval of data from the end of a
     result set.

   * Alarm around client connect/read/write functions.

   * Please note the changes to `mysqld_safe': according to FSSTND
     (which Debian tries to follow) PID files should go into
     `/var/run/ a single statement.

   * Allow a client to request logging.

   * Add use of `zlib()' for `gzip'-ed files to `LOAD DATA INFILE'.

   * Fix sorting and grouping of `BLOB' columns (partly solved now).

   * Change to use semaphores when counting threads.  One should first
     implement a semaphore library to MIT-pthreads.

   * Don't assign a new `AUTO_INCREMENT' value when one sets a column
     to 0.  Use `NULL' instead.

   * Add full support for `JOIN' with parentheses.

   * As an alternative for one thread/connection manage a pool of
     threads to handle the queries.

   * Allow one to get more than one lock with `GET_LOCK'.  When doing
     this, one must also handle the possible deadlocks this change will
     introduce.

Time is given according to amount of work, not real time.

New Features We Don't Plan to Do
--------------------------------

   * Nothing; we aim toward full compliance with SQL-92/SQL-99.

[Назад] [Содержание] [Вперед]

Главная