Todos os produtos
Search
Central de documentação

Data Management:Configurar revisão de SQL e sugestões de otimização

Última atualização: Jun 27, 2026

O DMS integra a revisão de SQL e as sugestões de otimização às suas regras de segurança. No console SQL ou durante alterações de dados, esse recurso analisa as instruções SQL enviadas quanto à conformidade e fornece recomendações de otimização. Ele ajuda você a identificar e resolver problemas no SQL antes de confirmar as alterações, evitando possíveis falhas e exceções no banco de dados após a execução das instruções.

Pré-requisitos

  • Sua função no sistema é DBA ou administrator. Para mais informações, consulte Gerenciamento de usuários.

  • Você já criou uma regra de segurança. Para mais informações, consulte Criar uma regra de segurança.

  • Tipo de banco de dados:

    • MySQL: RDS for MySQL, PolarDB for MySQL, MariaDB, PolarDB-X, AnalyticDB for MySQL ou outras fontes MySQL

    • Oracle

    • PolarDB for PostgreSQL (Oracle Compatible)

    • OceanBase

Ações do sistema

O DMS oferece três ações predefinidas pelo sistema:

  • must be improved: Caso a instrução não seja aprimorada, o sistema bloqueia automaticamente o processo e exibe uma notificação. As regras iniciais de revisão de SQL não incluem nenhuma regra definida como must be improved.

    Nota

    Para obter uma lista das verificações realizadas pelas regras de revisão de SQL, consulte Itens de verificação.

    Por exemplo, se a regra Tables must have a primary key estiver definida como must be improved, o sistema bloqueará a execução de uma instrução SQL que crie uma tabela sem chave primária. O desenvolvedor precisará modificar a instrução para passar na validação antes da execução.

  • Problema potencial: Indica um problema na instrução SQL, mas não bloqueia o processo.

  • Melhoria sugerida: Recomenda uma melhoria, mas não bloqueia o processo.

Suporte a recursos em diferentes modos de controle

O DMS disponibiliza três modos de controle distintos. Para mais informações, consulte Modos de Controle.

Recurso

Secure collaboration

Stable change

Flexible O&M

Ativar ou desativar regras

Suportado

Suportado

Suportado

Configure ações

Suportado

Não configurável

Não configurável

Alterar parâmetros de regra

Em algumas regras, é possível especificar parâmetros, como o número máximo de índices ou colunas em uma tabela.

Suportado

Suportado

Não configurável

Configure observações

Defina o contexto de negócios de uma regra.

Suportado

Não configurável

Não configurável

Procedimento

Por padrão, cada regra de segurança inclui um conjunto de regras de revisão de SQL. Este exemplo demonstra como personalizar a configuração definindo a regra A table must have a primary key como must be improved.

  1. Faça login no DMS 5.0.

  2. Passe o ponteiro sobre o ícone 2023-01-28_15-57-17.png no canto superior esquerdo e escolha All Features > Security and disaster recovery (DBS) > Security Rules.

    Nota

    Se você utiliza o console do DMS no modo normal, escolha Security and disaster recovery (DBS) > Security Rules na barra de navegação superior.

  3. Na coluna Actions da regra de segurança desejada, clique em Edit.

    Nota

    Para definir configurações do modo Flexible Management ou Stable Change, clique em SQL audit optimization recommendations à direita do modo de controle correspondente.

  4. No painel de navegação à esquerda da página Details, clique em SQL audit optimization recommendations.

  5. Para a regra A table must have a primary key, clique em Edit na coluna Actions.

    Nota

    É possível filtrar rapidamente as regras clicando no ícone 筛选按钮 ao lado de Tag (escopo de aplicação da regra, incluindo instruções DDL e DML), Action ou Status (ativado ou desativado).

  6. Na caixa de diálogo Configure Rule Content, configure os seguintes parâmetros.

    Os valores disponíveis para Action também incluem potential issue e suggested improvement.

    Parâmetro

    Descrição

    Action

    Defina Action como must be improved.

    Nota

    Por padrão, nenhuma regra inicial está definida como must be improved.

    Remarks

    Insira observações para a regra, como o contexto de negócios.

  7. Clique em OK.

    Em tarefas subsequentes, como desenvolvimento de dados, alteração de dados e revisão de SQL, o DMS verifica suas instruções SQL com base nas regras de segurança configuradas.

    Se uma instrução violar a regra A table must have a primary key, o sistema bloqueará automaticamente o processo.

Itens de verificação

  • A SQL Specification Check abrange os seguintes itens.

    Definição de esquema de tabela

    Item de verificação

    SQL aplicável

    Nome e ID da regra

    Atributos do banco de dados

    CREATE DATABASE

    Restringir o conjunto de caracteres na criação do banco de dados: CREATE_DATABASE_LIMIT_CHARSET

    Atributos da tabela

    • CREATE TABLE

    • ALTER TABLE

    • Tabelas devem ter chave primária: TABLE_MUST_HAVE_PRIMARY_KEY

    • Tabelas devem ter comentários: TABLE_MUST_HAVE_COMMENTS

    • Não usar chaves estrangeiras em tabelas: TABLE_FORBID_USE_FOREIGN_KEY

    • Restringir maiúsculas e minúsculas nos nomes das tabelas: TABLE_NAME_LIMIT_CHAR_CASE

    • Restringir o mecanismo de armazenamento das tabelas: TABLE_LIMIT_STORE_ENGINE

    • Não usar partições em tabelas: TABLE_FORBID_USE_PARTITION

    • Tabelas devem conter colunas específicas: TABLE_MUST_HAVE_SOME_COLUMN

    • Tabelas devem usar um conjunto de caracteres específico: TABLE_MUST_USE_SOME_CHARSET

    • Tabelas devem usar uma collation específica: TABLE_MUST_USE_SOME_COLLATION

    • Nomes de tabelas não podem ser palavras-chave: TABLE_NAME_FORBID_KEYWORD

    • Limitar o número de índices em uma tabela: TABLE_LIMIT_INDEX_COUNT

    • Limitar o número de colunas em uma tabela: TABLE_LIMIT_COLUMN_COUNT

    • Limitar o valor inicial de autoincremento de uma tabela: TABLE_LIMIT_INIT_AUTO_INCREMENT

    • A coluna de chave primária deve ser de autoincremento: LIMIT_PRIMARY_COLUMN_AUTO_INCREMENT

    • Não usar views: TABLE_FORBID_USE_VIEW

    • Não usar triggers: TABLE_FORBID_USE_TRIGGER

    • Não usar events: TABLE_FORBID_USE_EVENT

    • Não usar stored procedures: TABLE_FORBID_USE_STORED_PROCEDURE

    • Não usar funções personalizadas: TABLE_FORBID_USE_CUSTOM_FUNCTION

    • Usar a sintaxe ALTER TABLE CONVERT para modificar o conjunto de caracteres da tabela: MODIFY_CHARSET_USE_ALTER_TABLE_CONVERT

    Atributos de coluna

    • CREATE TABLE

    • ALTER TABLE

    • Nomes de colunas não podem ser palavras-chave: COLUMN_NAME_FORBID_KEYWORD

    • Restringir maiúsculas e minúsculas nos nomes das colunas: COLUMN_NAME_LIMIT_CHAR_CASE

    • Não definir conjunto de caracteres para uma coluna: COLUMN_FORBID_SET_CHARSET

    • Não usar determinados tipos de dados em colunas: COLUMN_FORBID_DATA_TYPES

    • Colunas devem ter comentários: COLUMN_MUST_HAVE_COMMENTS

    • Limitar o comprimento de colunas do tipo char: COLUMN_LIMIT_CHAR_LENGTH

    • Limitar o comprimento de colunas do tipo varchar: COLUMN_LIMIT_VARCHAR_LENGTH

    • Todas as colunas devem ser definidas como NOT NULL: COLUMN_MUST_SET_NOT_NULL

    • O nome da coluna de autoincremento deve ser ID: COLUMN_AUTO_INCREMENT_NAME_ID

    • Colunas de autoincremento devem ser unsigned: COLUMN_AUTO_INCREMENT_UNSIGNED

    • Não usar tipos float ou double (use decimal em vez disso): COLUMN_FORBID_FLOAT_DOUBLE_TYPE

    • Cada coluna deve ter um valor padrão: EACH_COLUMN_NEED_DEFAULT_VALUE

    • Não definir collation para uma coluna: COLUMN_FORBID_SET_COLLATE

    • Não renomear colunas ao usar ALTER TABLE: ALTER_TABLE_FORBID_RENAME_COLUMN

    • Não remover colunas ao usar ALTER TABLE: ALTER_TABLE_FORBID_DROP_COLUMN

    • Não alterar tipos de dados ao usar ALTER TABLE: ALTER_TABLE_FORBID_MODIFY_DATA_TYPE

    • Novas colunas adicionadas com ALTER TABLE devem aceitar valores nulos: ALTER_TABLE_ADD_COLUMN_NULLABLE

    • Ao adicionar uma coluna não nula com ALTER TABLE, um valor padrão deve ser especificado: ALTER_ADD_NOT_NULL_COLUMN_NEED_DEFAULT

    • Ao alterar uma coluna que aceita nulos para não nula, um valor padrão deve ser especificado: COLUMN_NULLABLE_TO_NOT_NEED_DEFAULT

    • Não usar o tipo enum (use tinyint ou char em vez disso): COLUMN_FORBID_USE_ENUM_TYPE

    • Não usar o atributo ZEROFILL em colunas: COLUMN_DATA_TYPE_FORBID_ZEROFILL

    Atributos de índice

    • CREATE TABLE

    • ALTER TABLE

    • Cada índice deve ter um nome explícito: INDEX_MUST_HAVE_CLEARLY_NAME

    • Restringir o padrão de nomenclatura para índices Unique: UNIQUE_INDEX_NAME_PATTERN

    • Restringir o padrão de nomenclatura para índices comuns: COMMON_INDEX_NAME_PATTERN

    • Limitar o número de colunas em um único índice: INDEX_LIMIT_CONTAINS_COLUMNS

    • Limitar o número de colunas em uma chave primária: PRIMARY_LIMIT_CONTAINS_COLUMNS

    • Restringir o tipo de dados das colunas de chave primária: PRIMARY_LIMIT_COLUMN_DATA_TYPE

    • Não remover a chave primária ao usar ALTER TABLE: ALTER_TABLE_FORBID_DROP_PRIMARY

    • Não remover um índice ao usar ALTER TABLE: ALTER_TABLE_FORBID_DROP_INDEX

    Consulta de dados

    Item de verificação

    SQL aplicável

    Nome e ID da regra

    SELECT

    • SELECT

    • INSERT SELECT

    • Subconsultas (aninhadas em instruções UPDATE ou DELETE)

    • Instruções SELECT devem especificar uma cláusula WHERE: SELECT_SUGGEST_ASSIGN_WHERE

    • Não usar ORDER BY RAND() em instruções SELECT: SELECT_FORBID_USE_ORDER_BY_RAND

    • Não usar GROUP BY em uma constante em instruções SELECT: SELECT_FORBID_GROUP_BY_CONST

    • Não usar ORDER BY em uma constante em instruções SELECT: SELECT_FORBID_ORDER_BY_CONST

    • Uma instrução SELECT não deve usar GROUP BY ou ORDER BY em tabelas diferentes: SELECT_FORBID_GROUP_ORDER_BY_DISTINCT_TABLE

    • Em instruções SELECT, não usar ORDER BY para classificar várias colunas em direções diferentes: SELECT_FORBID_ORDER_BY_MULTI_COLUMN_RANK

    • Instrução SELECT: Não usar GROUP BY ou ORDER BY em uma expressão ou função: SELECT_FORBID_GROUP_ORDER_BY_EXPR_OR_FUNCTION

    • Não usar UNION em instruções SELECT: SELECT_FORBID_USE_UNION

    • Limitar o número de tabelas unidas em uma instrução SELECT: SELECT_LIMIT_TABLE_JOIN_COUNT

    • Limite da instrução SELECT no tamanho do offset da cláusula LIMIT: SELECT_CONFINE_LIMIT_MAX_OFFSET

    • Não usar cláusula HAVING em instruções SELECT: SELECT_FORBID_USE_HAVING

    Cláusula WHERE

    Instruções que contêm uma cláusula WHERE, como SELECT, UPDATE, DELETE e INSERT SELECT.

    • Não aplicar operações matemáticas ou de função em colunas indexadas dentro de uma cláusula WHERE: WHERE_FORBID_INDEX_COLUMN_HAS_MATH

    • Não usar curinga inicial em buscas dentro de uma cláusula WHERE: WHERE_FORBID_BEFORE_WILDCARD_SEARCH

    • Verificar instruções LIKE sem curinga na cláusula WHERE: WHERE_CHECK_LIKE_HAS_NOT_WILDCARD

    • Não usar condições negativas como NOT IN ou NOT LIKE em uma cláusula WHERE: WHERE_FORBID_USE_REVERSE_SEARCH

    • Limite de elementos em uma cláusula IN dentro da cláusula WHERE: WHERE_LIMIT_IN_ITEM_MAX_COUNT

    • Verificar conversões implícitas de tipo em colunas de uma cláusula WHERE: WHERE_CHECK_COLUMN_IMPLICIT_TYPE_CONVERSION

    • Verificar condições de filtro vinculadas pelo operador OR em uma cláusula WHERE: WHERE_CHECK_OR_LINK_CONDITION

    Alteração de dados

    Item de verificação

    SQL aplicável

    Nome e ID da regra

    Inserir dados

    • INSERT SELECT

    • INSERT [IGNORE]

    • REPLACE

    • Uma instrução INSERT deve especificar uma lista de colunas: ASSIGN_INSERT_COLUMN_NAME_LIST

    • Não usar nomes de colunas duplicados na lista de colunas do INSERT: INSERT_COLUMN_NAME_FORBID_DUPLICATE

    • Não inserir um valor NULL em uma coluna NOT NULL: NOT_NULL_COLUMN_FORBID_INSERT_NULL

    • A lista de colunas deve corresponder à lista de valores em uma instrução INSERT: INSERT_COLUMN_MUST_MATCH_VALUES

    • Limitar o número total de linhas em uma única instrução INSERT VALUES: LIMIT_INSERT_VALUES_TOTAL_ROWS

    • Verificar se a tabela ou coluna especificada em uma instrução INSERT existe: INSERT_CHECK_TABLE_COLUMN_EXISTS

    • Não usar a função SYSDATE() em instruções de inserção: INSERT_FORBID_USE_SYSDATE_FUNCTION

    Atualizar e excluir dados

    • UPDATE

    • DELETE

    • Limitar o número de tabelas unidas em instruções UPDATE ou DELETE: UPDELETE_LIMIT_TABLE_JOIN_COUNT

    • Instruções UPDATE ou DELETE devem especificar uma cláusula WHERE: UPDELETE_ASSIGN_WHERE_CONDITION

    • Verificar se a cláusula WHERE contém uma subconsulta em instruções UPDATE ou DELETE: UPDELETE_CHECK_WHERE_EXIST_SUB_QUERY

    • Limitar o número de linhas afetadas usando LIMIT em instruções UPDATE ou DELETE: UPDELETE_CHECK_LIMIT_AFFECTED_ROWS

    • Detectar se a sintaxe de junção de múltiplas tabelas está completa em instruções UPDATE ou DELETE (por exemplo, se falta uma cláusula on em uma cláusula join): UPDELETE_CHECK_TABLE_JOIN_LOSS_ON

    • Não incluir cláusula ORDER BY em instruções UPDATE ou DELETE: UPDELETE_FORBID_ORDER_BY

    • Verificação de instrução UPDATE: delimitador SET entre múltiplas colunas (and é inválido): UPDATE_CHECK_SET_ITEM_DELIMITER

    • UPDATE em múltiplas tabelas: Verifica se as colunas na cláusula SET estão especificadas com prefixo de tabela: UPDATE_MULTI_TABLE_CHECK_SET_COLUMN_PREFIX

    • Verificar se as tabelas ou colunas em uma instrução UPDATE existem: UPDATE_CHECK_TABLE_COLUMN_EXIST

    • Verificar se uma instrução UPDATE modifica a chave primária: UPDATE_CHECK_PRIMARY_KEY_CHANGE

    • Verificar se uma instrução UPDATE modifica uma chave única: UPDATE_CHECK_UNIQUE_KEY_CHANGE

    • Uma instrução UPDATE também deve atualizar a coluna "hora de modificação" da tabela: UPDATE_ALSO_TO_UPDATE_MODIFY_TIME_COLUMN

    • Não atualizar a coluna "hora de criação" da tabela em uma instrução UPDATE: UPDATE_FORBID_MODIFY_CREATE_TIME_COLUMN

  • As Sugestões de Otimização de SQL incluem os seguintes itens de verificação.

    Categoria

    Item de verificação

    Geral

    • Otimizar tabelas cuja chave primária é do tipo int: OPTIMIZE_PRIMARY_IS_INT_TABLE

    • Alertar sobre espaço restante insuficiente para chaves primárias de autoincremento: SNIFFING_AUTO_PRIMARY_REMAIN_SPACE

    • Alertar sobre risco de valores NULL em uma chave única (UK): SNIFFING_UNIQUE_EXIST_NULL_RISK

    • Alertar e otimizar bloqueios de tabela DDL ou falhas de alteração: ALTER_LOCK_FAIL_SNIFFING_OPTIMIZE

    • Detectar riscos de injeção de SQL: CHECK_SQL_INJECTION_RISK

    • Detectar riscos do uso de índices forçados (FORCE INDEX): CHECK_SQL_ASSIGN_FORCE_INDEX

    • Verificar o índice no plano de execução: SQL_EXPLAIN_INDEX_CHECK

    • Análise e sugestões de índice do DMS: DMS_INDEX_ANALYZE_AND_SUGGEST