Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

Go to the first, previous, next, last section, table of contents.


F List of things we want to add to MySQL in the future (The TODO)

Everything in this list is in the order it will be done. If you want to affect the priority order, please register a license or support us and tell us what you want to have done more quickly. See section 3 Licensing or When do I have/want to pay for MySQL?.

19.7 Things that must done in the real near future

  • Delayed inserts for log tables.
  • Subqueries. 'select id from t where grp in (select grp from g where u > 100)
  • Optimize some queries to only use indexes.
  • FreeBSD and MIT-pthreads; Do sleeping threads take CPU?
  • Allow join on key parts (optimizing issue).
  • Fix that temporary HEAP tables are automatically converted to NISAM if they get too big. At the moment one gets 'error 135' or 'Table xxx is full' if one does a query which has to use a big temporary table.
  • Binary portable data tables (a new version of ISAM).
  • Add DISTINCT qualifier to COUNT(), SUM()...
  • Change conv_blob to handle BLOB as a TEXT field.
  • Entry for DECRYPT().
  • Remember FOREIGN key definitions in the `.frm' file.
  • Server side cursors.
  • 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 table_name
    TEXT_FIELDS (text_field1, text_field2, text_field3)
    SET table_field1=concatenate(text_field1, text_field2), table_field3=23
    IGNORE text_field3
    
  • Allow strings with MIN(), MAX() (not group functions). These should be synonyms for LEAST(), GREATEST().
  • Demo procedure: analyze
  • 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.
  • Add ANSI SQL EXTRACT function.
  • Fix mysql.cc to do fewer malloc() calls when hashing field names.
  • Add functions:
    MAKE_SET(set_bits,'aaa,bbb,ccc,ddd,eee") -> Returns a set string.
    MAKE_SET(1 | 8, 'aaa,bbb,ccc,ddd,eee")   -> 'aaa,ddd'
    
    EXPORT_SET(set_column,'Y','N',[separator],[number_of_set_values])
    
    where separator is ',' by default and number_of_set_values is taken from the set_column (or is 64 if set_column is an expression). For example:
    EXPORT_SET(9,'Y','N',',',5) -> Y,N,N,Y,N
    
  • 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.
  • A LOCK DATABASE function (for backups).
  • Function CASE.
  • Much 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.
  • Adabas insert syntax: INSERT INTO TABLE SET col1=expr,col2=expr,col3=expr...
  • Allow mysqld to support many character sets at the same time.
  • Add optimization to make LEFT JOIN .. WHERE not_null_field IS NULL much faster. (This is often used to find rows that doesn't match)

19.8 Things that have to be done sometime

  • Implement a table optimizer by an analyze procedure call that returns a table like show fields with min and max value and the best MySQL type for that expression.
  • Implement function: get_changed_tables(timeout,table1,table2,...)
  • Implement function: LAST_UPDATED(tbl_name)
  • Atomic updates; This includes a language that one can even use for a set of stored procedures.
  • update items,month set items.price=month.price where items.id=month.id;
  • Change reading through tables to use memmap when possible. Now only compressed tables use memmap.
  • Make a SQL standard GRANT command with MySQL extensions.
  • Add a new privilege 'Show_priv' for SHOW commands.
  • Make the automatic timestamp code nicer. Add timestamps to the update log with SET TIMESTAMP=#;
  • Optimize the autoincrement code.
  • Use read/write mutex in some places to get more speed.
  • Full foreign key support. One probably wants to implement a procedural language first.
  • Simple views (first on one table, later on any expression).
  • 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.
  • Optimize key = expression. At the moment only key = field or key = constant are optimized.
  • 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)
  • UNION and FULL OUTER JOIN. (Currently only LEFT OUTER JOIN is supported)
  • Allow UNIQUE on fields that can be NULL.
  • SQL_OPTION MAX_SELECT_TIME=# to put a time limit on a query.
  • Make the update log to a database.
  • Negative LIMIT to retrieve data from the end.
  • Alarm around client connect/read/write functions.
  • Make a mysqld version which isn't multithreaded (3-5 days).
  • Please note the changes to safe_mysqld: according to FSSTND (which Debian tries to follow) PID files should go into `/var/run/<progname>.pid' and log files into `/var/log'. It would be nice if you could put the "DATADIR" in the first declaration of "pidfile" and "log", so the placement of these files can be changed with a single statement.
  • Better dynamic record layout to avoid fragmentation.
  • UPDATE SET blob=read_blob_from_file('my_gif') where id=1;
  • Allow sorting on RAND():
    SELECT email,RAND() AS ran FROM info ORDER BY ran;
    
  • 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).
  • Stored procedures. This is currently not regarded to be very important as stored procedures are not very standardized yet. Another problem is that true stored procedures make it much harder for the optimizer and in many cases the result is slower than before We will, on the other hand, add a simple (atomic) update language that can be used to write loops and such in the MySQL server.
  • Change to use semaphores when counting threads. One should first implement a semaphore library to MIT-pthreads.

Time is given according to amount of work, not real time. TcX's main business is the use of MySQL not the development of it. But since TcX is a very flexible company, we have put a lot of resources into the development of MySQL.

19.9 Some things we don't have any plans to do

  • Transactions with rollback (we mainly do SELECTs, and because we don't do transactions, we can be much quicker on everything else). We will support some kind of atomic operations on multiple tables, though. Currently atomic operations can be done with LOCK TABLES/UNLOCK TABLES but we will make this more automatic in the future.


Go to the first, previous, next, last section, table of contents.


  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте