F.1 Things that must done in the real near future

  • One way replication
  • Transactions
  • Subqueries. select id from t where grp in (select grp from g where u > 100)
  • Allow mysqld to support many character sets at the same time.
  • If you perform an ALTER TABLE on a table that is symlinked to another disk, create temporary tables on this disk.
  • RENAME table as table, table as table [,...]
  • FreeBSD and MIT-pthreads; Do sleeping threads take CPU?
  • Allow join on key parts (optimization issue).
  • Entry for DECRYPT().
  • Remember FOREIGN key definitions in the `.frm' file.
  • Server side cursors.
  • Allow users to change startup options.
  • Add --ansi option to MySQL (to change || -> CONCAT())
  • Don't add automatic DEFAULT values to columns. Give an error when using an INSERT that doesn't contain a column that doesn't have a DEFAULT.
  • Caching of queries and results. This should be done as a separated module that examines each query and if this is query is in the cache the cached result should be returned. When one updates a table one should remove as few queries as possible from the cache. This should give a big speed bost on machines with much RAM where queries are often repeated (like WWW applications). One idea would be to only cache queries of type: SELECT CACHED ....
  • Fix `libmysql.c' to allow two mysql_query() commands in a row without reading results or give a nice error message when one does this.
  • Optimize BIT type to take 1 bit (now BIT takes 1 char).
  • Check why MIT-pthreads ctime() doesn't work on some FreeBSD systems.
  • Check if locked threads take any CPU.
  • Add ORDER BY to update. This would be handy with functions like: generate_id(start,step).
  • Add an IMAGE option to LOAD DATA INFILE to not update TIMESTAMP and AUTO_INCREMENT fields.
  • Make LOAD DATA INFILE understand a syntax like:
    LOAD DATA INFILE 'file_name.txt' INTO TABLE tbl_name
    TEXT_FIELDS (text_field1, text_field2, text_field3)
    SET table_field1=concatenate(text_field1, text_field2), table_field3=23
    IGNORE text_field3
    
  • Add true VARCHAR support (There is already support for this in MyISAM).
  • Automatic output from mysql to netscape.
  • LOCK DATABASES. (with various options)
  • NATURAL JOIN.
  • Change sort to allocate memory in ``hunks'' to get better memory utilization.
  • DECIMAL and NUMERIC types can't read exponential numbers; Field_decimal::store(const char *from,uint len) must be recoded to fix this.
  • Fix mysql.cc to do fewer malloc() calls when hashing field names.
  • Functions: ADD_TO_SET(value,set) and REMOVE_FROM_SET(value,set)
  • Add use of t1 JOIN t2 ON ... and t1 JOIN t2 USING ... Currently, you can only use this syntax with LEFT JOIN.
  • Add full support for unsigned long long type.
  • Function CASE.
  • Many more variables for show status. Counts for: INSERT/DELETE/UPDATE statements. Records reads and updated. Selects on 1 table and selects with joins. Mean number of tables in select. Key buffer read/write hits (logical and real). ORDER BY, GROUP BY, temporary tables created.
  • 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 handler interface for table information so 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.
  • Add support for UNICODE.
  • NATURAL JOIN.
  • Oracle like CONNECT BY PRIOR ... to search hierarchy structures.
  • RENAME DATABASE
  • mysqladmin copy database new-database.
  • Processlist should show number of queries/thread.
  • IGNORE option to the UPDATE statement (this will delete all rows that gets a dupplicate key error while updating).
  • Change the format of DATETIME to store fractions of seconds.
  • Add all missing ANSI92 and ODBC 3.0 types.
  • Change table names from empty strings to NULL for calculated columns.