Esta seção lista os recursos que planejamos impementar no
MySQL Server. As listas são apresentadas por
versão, e os itens estão aproximadamente na ordem em que serão
feitos.
Nota: Se você é um utilizador
corporativo com uma necessidade urgente de um recurso particular,
por favor, contate <sales@mysql.com> para
conversarmos sobre patrocínio. Financiamento feito por uma ou
mais companhias nos permite alocar recursos adicionais para aquele
propósito específico. Um exemplo de um recurso patrocinado no
passado é a replicação.
Os recursos abaixo ainda não estão implementados no MySQL 4.1, mass estão planejados para implementação antes que o MySQL 4.1 vá para a fase beta. Para uma lista do que já está feito no MySQL 4.1, veja Secção 1.5.2.1, “Recursos Disponíveis no MySQL 4.1”.
Suporte OpenSSL estável (o MySQL 4.0 tem suporte rudimentar ao OpenSSL, não testado 100%).
Mais teste de instruções preparadas
Mais testes de múltiplos conjunto de caracteres para uma tabela.
Os seguintes recursos estão planejados para inclusão no MySQL 5.0. Note que como possuimos diversos desenvolvedores que estão trabalhando em diferentes projetos, haverão também muitos recursos adicionais. Há também um pequena chance qie alguns destes recursos sejam adicionados ao MySQL 4.1. Para uma lista do que já está feito no MySQL 4.1, veja Secção 1.5.2.1, “Recursos Disponíveis no MySQL 4.1”.
Para aqueles que desejam dar uma olhada nas novidades do desenvolvimento do MySQL, deixamos nosso repositório BitKeeper para o MySQL versão 5.0 publicamente disponível. See Secção 2.3.4, “Instalando pela árvore de fontes do desenvolvimento”.
Stored Procedures
Stored procedures estão sendo implementadas atualmente. Este esforço é baseado no SQL-99, o que tem m sintaxe básica similar (mas não idêntica) a do Oracle PL/SQL. Nós também implementaremos o framework do SQL-99 para enganchar em linguagens externas e (onde possível) compatibilidade com p.ex. PL/SQL e T-SQL.
Nova funcionalidade
Suporte a cursores elementares.
A habilidade de especificar explicitamente para tabelas
MyISAMque um índice deve ser criado como um índiceRTREE. Na versão 4.1, índicesRTREEsão usados internamente para dados geométricos (tipos de dados GIS), mas não podem ser criados no pedido.Registros de tamanhos dinâmicas para tabelas
HEAP.
Compatibilidade com o padrão, portabilidade e migração
Adiciona suporte real a
VARCHAR(tamanho de colunas maiores que 255, e sem corte de espaços em branco extras). (Já existe suporte para isto nos mecanismos de armazenamento doMyISAM, mas ainda não está disponível a nível de utilizador).
Aumento na velocidade
SHOW COLUMNS FROM nome_tabela(usado pelo clientemysqlpara permitir expansões de nomes de colunas) não deve abrir a tabela, apenas o arquivo de definição. ISto exigirá menos memória e será muito mais rápido.Permite que o
DELETEem tabelasMyISAMusem a cache de registros. Para fazer isto, precisamos atualizar a thread da cache de registro quando atualizarmos os arquivos.MYD.Melhores tabes em memória (
HEAP):Registro de tamanhos dinâmoicos.
Tratamento de registro mais rápido (menos cópia).
Internacionalização
Ap usar
SET CHARACTER SETdevemos traduzir toda a consulta de uma vez e não apenas as strings. Isto permitirá que os utilizadores usem caracteres traduzidos nos nomes de banco de dados, tabelas e colunas.
Aprimoramento da usabilidade
Resolver a questão de
RENAME TABLEem uma tabela usada em uma tabelaMERGEativa, o que possivelmente corrompe a tabela.
Novas funcionalidades
Suporte
FOREIGN KEYpara todos os tipos de tabelas.Restrições a nível de colunas.
Replicação seguro a falhas.
Backup online com baixa queda de desempenho. O backup online tornará mais fácil adicionar um novo slave de replicação sem desligar o master.
Aumento de velocidade
Novo formato dos arquivos de definição e tabelas baseados em texto (arquivos
.frm) e uma cache de tabelas para a definição de tabelas. Isto nos permitirá fazer consultas mais rápidas da estruturas de tabela e dar um suporte a chaves estrangeiras mais eficiente.Otimizar o tipo
BITpara gastar 1 bit (agoraBITgasta 1 byte; e é tratado como um sinônimo paraTINYINT.)
Aprimoramento da usabilidade
Adicionar opções ao protocolo cliente/servidor para obter notas de progresso para longos comandos em execução.
Implementar
RENAME DATABASE. Para tornar isto seguro para todos os mecanismos de armazenamento, ele deve funcionar como a seguir:Cria um novo banco de dados.
Para cada tabelas, renomeie-a para outro banco de dados, o qual fazemos com o comando
RENAME.Apagar o banco de dados antigo.
Nova alteração da interface de arquivo interno. Isto fará todos os manipuladores de arquivos mais gerais e tornará mais fácil adicionar extensões tipo RAID.
Novas funcionalidade
Comando como do Oracle
CONNECT BY PRIOR ...para estruturas de busca tipo árvore (hierárquica)Adicionar todos os tipos que faltam do SQL-92 e ODBC 3.0.
Adicionar
SUM(DISTINCT).INSERT SQL_CONCURRENTemysqld --concurrent-insertpara fazer uma inserção concorrente no fim do arquivo se o arquivo tiver lock de leitura.Permitir a atualização de variáveis nas instruções
UPDATE. Por exemplo:UPDATE TABLE foo SET @a=a+b,a=@a, b=@a+c.Alterar quando as variáveis de utilizadores são atualizadas e assim pode se usá-las com
GROUP BY, como no exemplo a seguir:SELECT id, @a:=COUNT(*), SUM(sum_col)/@a FROM nome_tabela GROUP BY id.Adicionar a opção
IMAGEaLOAD DATA INFILEpara não atualizar camposTIMESTAMPeAUTO_INCREMENT.Adicionar a sintaxe
LOAD DATA INFILE ... UPDATEque funciona assim:Para tabelas com chaves primárias, se o registro de entrada contém um valor de chave primária, linhas existentes correspondendo às chaves primárias são atualizadas para o restante das colunas de entrada. No entanto, colunas
faltosasna inserção dos registros de entradas não são alteradas.Para tabelas com chaves primárias, se um registro de entrada não contém um valor de chave primária ou estrá faltando alguma parte da chave, o registro é tratado como um
LOAD DATA INFILE ... REPLACE INTO.
Fazer com que
LOAD DATA INFILEentenda a sintaxe do tipo: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
Isto pode ser usado para saltar colunas extras no arquivo texto, ou atualizar colunas baseadas nas expressões dos dados lidos.
Novas funções para tyrabalhar com tipos de colunas
SET:ADD_TO_SET(valor,conjunto)REMOVE_FROM_SET(valor,conjunto)
Se você abortar o
mysqlno meio de uma consulta, você deve abrir outra conexão e matar a consulta antiga em execução. Alternativamente, deve ser feita um tentativa de detecção deste problema no servidor.Adicione um interface do mecanismo de armazenamento para informações da tabela assim que você puder usá-la como uma tabela de sistema. Isto seria um pouco mais lento se você pedisse informações sobre todas as tabelas, mas muito flexível.
SHOW INFO FROM tbl_namepara informações básicas das tabelas deve ser implementado.Permite
SELECT a FROM crash_me LEFT JOIN crash_me2 USING (a); neste caso é considerado queavem da tabelacrash_me.Opções
DELETEeREPLACEpara a instruçãoUPDATE(isto deletará registros quando se tiver um erro de chave duplicada durante a atualização).Altera o formato de
DATETIMEpara armazenar frações de segundo.Possibilitar o uso da nova biblioteca regexp GNU em vez da atual (a biblioteca GNU deve ser muito mais rápida que a antiga).
Compatibilidade com os padrões, portabilidade e migração
Não adicionar valores
DEFAULTautomáticos as colunas. Enviar um erro ao usar umINSERTque não contenha uma coluna que não tenha umDEFAULT.Adicionar as funções de agrupamento
ANY(),EVERY()eSOME(). No padrão SQL isto só funciona em colunas booleanas, mas podemos extendê-las para funcionar em qualquer coluna/expressão tratando valores 0 como FALSE e valores diferentes de 0 como TRUE.Corrigir para que o tipo de
MAX(coluna)seja o mesmo do tipo da coluna: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;
Aumento de velocidade
Não permitir mais que um número definido de threads façam a recuperação do MyISAM ao mesmo tempo.
Alterar
INSERT ... SELECTpara usar inserções concorrentes opcionalmente.Adicionar uma opção para descarregar paginas de chaves para tabelas com delayed keys se elas não forem usados por um tempo.
Permitir joins em partes de chaves (otimização).
Adicionar simulação de
pread()/pwrite()no Windows para permitir inserções concorrentes.Um analizador de arquivos de log que possam analizar informações sobre quais tabelas são usadas com mais frequência, a frequência com que joins multi-tables são executados, etc. Isto deve ajudar os utilizadores a identificar áreas ou projetos de tabelas que podiam ser otimizados para executar consultas muito mais eficientes.
Internacionalização
Aprimoramentos de usabilidade
Retorna os tipos dos campos originais ao se fazer
SELECT MIN(coluna) ... GROUP BY.Possibilita especificar
long_query_timecom uma granularidade em microsegundos.Ligue o código
myisampackno servidor assim ele poderá realizar operaçõesPACKeCOMPRESS.Adicionar uma cache de chaves temporária durante
INSERT/DELETE/UPDATEpara podermos fazer um recuperação se o índice ficar cheio.Se você realizar um
ALTER TABLEem uma tabela que é ligada simbolicamente a outro disco, crie tabelas tenporárias neste disco.Implementar um tipo
DATE/DATETIMEque trate as informações de fusos horários de forma apropriada e assim lidar com datas em diferentes fusos horários será mais fácil.Corrigir o configure para se poder compilar todas as bibliotecas (como no
MyISAM) sem threads.Permitir variáveis SQL em
LIMIT, como emLIMIT @a,@b.Saída automática do
mysqlpara um navegador web.LOCK DATABASES(com diversas opções).Muito mais variáveis para
SHOW STATUS. Leitura e atualização de registros. Selects em 1 tabela e select com joins. Número de tabelas na select. Número de consultasORDER BYeGROUP BY.mysqladmin copy database novo-banco_dados; exige que o comandoCOPYseja adicionado aomysqld.Lista de processos deve mostar o número de consultas/threads.
SHOW HOSTSpara xibir informações sobre a cache de nome de máquina.Alterar o nome de tabelas de string vazias para
NULLpara colunas calculadas.Não usar
Item_copy_stringem valores numéricos para evitar a conversão number->string->number no casos de:SELECT COUNT(*)*(id+0) FROM nome_tabela GROUP BY idAlterar aqueles
ALTER TABLEque não abortam clientes que executamINSERT DELAYED.Colunas referênciadas em uma cláusula
UPDATEirão conter os valores antigos antes da atualização iniciar.
Novos sistemas operacioais.
Portar os clientes MySQL para LynxOS.
Implementar função:
get_changed_tables(timeout,table1,table2,...)Alterar leitura através de tabelas para usar mapeamento de memória quando possível. Atualmente somente tabelas compactadas usam mapeamento de memória.
Tornar o código de timestamp automático melhor. Adicionar timestamps para o log de atualizações com
SET TIMESTAMP=#;Usar mutex de leitura/escrita em alguns lugares para obter maior velocidade.
Views simples (inicialmente em uma tabela, depois em qualquer expressão). See Secção 1.8.4.6, “Views”.
Fechar algumas tabelas automaticamente se uma tabela, tabela temporária ou arquivos temporários obtiverem o erro 23 (não pode abrir arquivos suficientes).
Melhor propagação de constantes. Quando uma ocorrência de
nome_col=né encontrada em uma expressão, para algumas constantesn, substitua outras ocorrências denome_coldentro da expressão porn. Atualmente, isto é feito somente para alguns casos simples.Alterar todas expressões const com expressões calculadas se possível.
Chave otimizadora = expressão. No momento somente a chave = campo ou a chave = constante são otimizadas.
Melhorar o código de algumas das funções de cópia
Alterar
sql_yacc.yypara um analizador em linha para reduzir seu tamanho e obter melhores mensagems de erro (5 dias).Alterar o analisador para usar somente uma regra para diferentes números de argumentos em uma função.
Utilizar nomes de cálculo completos na parte de ordenação. (For ACCESS97)
MINUS,INTERSECTeFULL OUTER JOIN. (AtualmenteUNION[na 4.0] eLEFT OUTER JOINsão suportados).SQL_OPTION MAX_SELECT_TIME=#para colocar um limite de tempo em uma pesquisa.Fazer o log de atualizações gravar em um banco de dados.
LIMITnegativo para recuperar dados do fim.Alarmes em funções clientes de conexão, leitura e escrita.
Por favor, perceba as alterações ao
mysqld_safe: de acordo com o FSSTND (que o Debian tenta seguir) arquivos PID dever ir em/var/run/<progname>.pide arquivos de log em/var/log. Seria ótimo se você puder colocar o diretório de dados na primeira declaração de "pidfile" e "log", para que a colocação destes arquivos possa ser alterada com uma simples instrução.Permitir um cliente requisitar log.
Adicionar uso de
zlib()aLOAD DATA INFILE, para permitir que as instruções leiam arquivos compactados comgzip.Corrigir ordenação e agrupamento de colunas
BLOB(parcialmente resolvida agora).Alterar para o uso de semáforos quando contar threads. Devemos primeiro implementar uma biblioteca de semáforos para a MIT-pthreads.
Adicionar suporte pleno para
JOINcom parênteses.Como uma alternativa para uma thread / conexão gerencie uma fila de threads para manipular as pesquisas.
Permitir obter mais de um bloqueio com
GET_LOCK. Quando isto for feito, serão, também, tratados os possíveis deadlocks que essa alteração irá acarretar.
O tempo é fornecido de acordo com a quantidade de trabalho, e não tempo real.

