Что должно быть сделано в ближайшем будущем
Не разрешать более чем определенному количеству потоков одновременно заниматься восстановлением MyISAM-таблиц.
Изменение INSERT ... SELECT с целью оптимального использования одновременных вставок.
Возвращать истинные типы полей при выполнении SELECT MIN(столбец) GROUP BY.
Множественные результаты.
Сделать возможным задание long_query_time с градацией в микросекундах.
Cлинковать код myisampack прямо в сервер.
Перенос кода MySQL на QNX.
Перенос кода MySQL на BeOS.
Перенос MySQL-клиентов на LynxOS.
Добавление временного буферного кэша ключей во время выполнения INSERT/DELETE/UPDATE, чтобы обеспечить изящное восстановление в случае, если индексный файл окажется полностью заполненным.
Если выполняется работа ALTER TABLE над таблицей, которая имеет символическую ссылку на другой диск, создавать временные таблицы на этом диске.
Реализация типа DATE/DATETIME с корректной обработкой информации о временных зонах, чтобы упростить работу с форматом даты для различных временных зон.
FreeBSD и MIT-pthreads; отнимают ли спящие потоки время процессора?
Проверить, занимают ли блокированные потоки время процессора.
Исправить configure так, чтобы можно было компилировать все библиотеки (подобно MyISAM) без потоков.
Добавить опцию периодического сброса на диск страниц ключей для таблиц с запрещенными, в случае, если они некоторое время не использовались.
Возможность связывания по частям ключа (проблема оптимизации).
INSERT SQL_CONCURRENT и mysqld --concurrent-insert для выполнения одновременной вставки в конец файла, если файл закрыт для чтения.
Серверные курсоры.
Проверить, работает ли lockd с современными ядрами Linux; если нет, то внести исправления в lockd! Чтобы это протестировать, необходимо запустить mysqld с --enable-locking и выполнить различные наборы тестов на fork*. Они не должны выявить никаких ошибок, если lockd
работает.
Возможность использования SQL-переменных в LIMIT, как, например, в LIMIT @a,@b.
Возможность обновления переменных в операторах UPDATE. Например: UPDATE TABLE foo SET @a=a+b,a=@a, b=@a+c.
Изменение: если пользовательские переменные обновляются, то сделать так, чтобы их можно было использовать с GROUP BY, как в следующем примере: SELECT id, @a:=COUNT(*), SUM(sum_col)/@a FROM table_name GROUP BY id.
Запретить автоматическое внесение DEFAULT-значений (значений по умолчанию) в столбцы. Выдавать ошибку в случае использования INSERT, не содержащего столбца, для которого не определено значение по умолчанию.
Исправить libmysql.c так, чтобы две команды mysql_query(), идущие подряд, могли работать без чтения результатов или с выдачей хорошего сообщения об ошибке, если это все-таки происходит.
Проверка, почему функция ctime() потоков MIT-pthreads не работает на некоторых FreeBSD системах.
Добавление опции IMAGE опции к LOAD DATA INFILE, чтобы не обновлять поля TIMESTAMP и AUTO_INCREMENT.
Добавляемый синтаксис LOAD DATE INFILE ... UPDATE.
Для таблиц с первичными ключами: если данные содержат первичный ключ, строки, соответствующие этому первичному ключу, обновляются остальными столбцами. Столбцы, которых нет во входных данных, остаются без изменений.
Для таблиц с первичными ключами, для которых отсутствует некоторая часть ключа во входном потоке данных или которые не имеют первичного ключа, входные данные интерпретируются сейчас как LOAD DATA INFILE ... REPLACE INTO.
Сделать понятный синтаксис LOAD DATA INFILE, подобно следующему:
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
Такой синтаксис может быть использован для пропуска лишних столбцов в текстовом файле или для обновления столбцов на основе выражений, построенных по прочитанным данным.
LOAD DATA INFILE 'file_name' INTO TABLE 'table_name' ERRORS TO err_table_name. Этот оператор задает запись всех ошибок и предупреждений в таблицу err_table_name, которая будет иметь структуру, подобную следующей:
line_number - номер строки в файле данных error_message - сообщение об ошибке/предупреждение и, возможно data_line - строка из файла данных
Автоматический вывод из mysql в Netscape.
LOCK DATABASES (с различными опциями.)
Функции: ADD_TO_SET(value,set) и REMOVE_FROM_SET(value,set).
Добавить использование t1 JOIN t2 ON ... и t1 JOIN t2 USING ... В данное время можно использовать этот синтаксис только с LEFT JOIN.
Намного большее количество переменных для SHOW STATUS. Фиксирование операций чтения и обновления. Выборки по 1 таблице и выборки по связям. Среднее число таблиц в выборке. Большое число запросов ORDER BY и GROUP BY.
Если вы прерываете выполнение запроса в середине, необходимо открыть другое соединение и убить старый выполнявшийся запрос. В свою очередь, сервер должен распознавать это на своей стороне.
Добавить интерфейс обработчика для табличных данных таким образом, чтобы была возможность использовать его как системную таблицу. Это будет работать несколько медленно в случае запрашивания информации обо всех таблицах, но очень гибко. Должен быть реализован SHOW INFO FROM tbl_name для основных данных о таблицах.
Сделать возможным SELECT a FROM crash_me LEFT JOIN crash_me2 USING (a); в данном случае подразумевается, что a будет браться из таблицы crash_me.
Oracle-подобный CONNECT BY PRIOR ... для изучения иерархических структур.
mysqladmin copy database new-database; требуется добавить команду COPY
в mysqld.
Список процессов должен показывать количество запросов/потоков.
SHOW HOSTS для распечатки информации о кэше имен хостов.
Опции DELETE и REPLACE для оператора UPDATE (оператор с этими опциями будет удалять строки при получении ошибки дублирующихся ключей во время обновления).
Изменить формат DATETIME, чтобы сохранять порции в секундах.
Добавить все недостающие типы ANSI92 и ODBC 3.0.
Изменить имена таблиц с пустых строк на NULL для вычисляемых столбцов.
Не использовать Item_copy_string для числовых значений во избежание преобразований число->строка->число в случае: SELECT COUNT(*)*(id+0) FROM table_name GROUP BY id
Сделать возможным использование новой библиотеки GNU regexp вместо текущей (библиотека GNU должна быть намного быстрее, чем предыдущая).
Сделать так, чтобы ALTER TABLE не срывал работу INSERT DELAYED.
Сделать следующее исправление: если на столбцы есть ссылки в выражении UPDATE, они будут содержать значения, хранившиеся там до запуска процесса обновления.
Добавить эмуляцию pread()/pwrite() под Windows, чтобы сделать возможными одновременные вставки.
Разработать анализатор файла журнала для анализа и выдачи информации о том, какие таблицы используются наиболее часто, насколько часто выполняются мультитабличные связи и т.д. Это помогло бы пользователям выбирать такую конструкцию таблиц и областей, которая могла бы быть оптимизирована для выполнения наиболее эффективных запросов.
Добавить SUM(DISTINCT).
Добавить групповые функции ANY(), EVERY() и SOME(). В ANSI SQL эти функции работают только с булевыми столбцами, но мы можем расширить эти функции, чтобы они работали с любыми столбцами/выражениями, применив: value == 0 -> FALSE и value <> 0 -> TRUE.
Добиться, чтобы тип для MAX(column) был таким же как и тип столбцов:
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;
Придумать хороший синтаксис для оператора, который будет выполнять UPDATE
над строкой при наличии таковой, и INSERT новой строки, если строка отсутствует (подобно тому, как REPLACE работает с INSERT / DELETE).
Содержание раздела