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 contactNew 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.
[Назад] [Содержание] [Вперед]
| Главная |