Todos los productos
Search
Centro de documentos

Data Management:Configurar la revisión de SQL y las sugerencias de optimización

Última actualización: Sep 03, 2026

DMS integra la revisión de SQL y las sugerencias de optimización en sus reglas de seguridad. En la consola de SQL o durante los cambios de datos, esta función revisa las instrucciones SQL enviadas para verificar su cumplimiento y proporciona sugerencias de optimización. Esto le permite identificar y resolver problemas en el código SQL antes de confirmar los cambios, lo que previene incidencias potenciales y excepciones en la base de datos tras la ejecución de las instrucciones.

Requisitos previos

  • Su rol en el sistema es DBA o administrator. Para obtener más información, consulte User Management.

  • Ha creado una regla de seguridad. Para obtener más información, consulte Create a security rule.

  • Tipo de base de datos:

    • MySQL: RDS for MySQL, PolarDB for MySQL, MariaDB, PolarDB-X, AnalyticDB for MySQL u otros orígenes MySQL

    • Oracle

    • PolarDB for PostgreSQL (Oracle Compatible)

    • OceanBase

Acciones del sistema

DMS proporciona tres acciones predefinidas del sistema:

  • must be improved: Si no mejora la instrucción, el sistema bloquea automáticamente el proceso y muestra una notificación. Las reglas iniciales de revisión de SQL no incluyen ninguna regla configurada como must be improved.

    Nota

    Para consultar la lista de comprobaciones que realizan las reglas de revisión de SQL, véase Check items.

    Por ejemplo, si la regla Tables must have a primary key está configurada como must be improved, el sistema bloqueará la ejecución de una instrucción SQL que cree una tabla sin clave primaria y exigirá al desarrollador modificar la instrucción para superar la validación antes de ejecutarla.

  • Problema potencial: Indica un problema con la instrucción SQL, pero no bloquea el proceso.

  • Mejora sugerida: Se sugiere una mejora, pero no se bloquea el proceso.

Compatibilidad de funciones en los distintos modos de control

DMS ofrece tres modos de control diferentes. Para obtener más información, consulte Modos de control.

Función

Secure collaboration

Stable change

Flexible O&M

Habilitar o deshabilitar reglas

Compatible

Compatible

Compatible

Configurar acciones

Compatible

No configurable

No configurable

Modificar parámetros de reglas

En algunas reglas, puede especificar parámetros como el número máximo de índices o columnas en una tabla.

Compatible

Compatible

No configurable

Configurar observaciones

Configure el contexto empresarial de una regla.

Compatible

No configurable

No configurable

Procedimiento

De forma predeterminada, cada regla de seguridad incluye un conjunto de reglas de revisión de SQL. Este ejemplo muestra cómo personalizar la configuración estableciendo la regla A table must have a primary key como must be improved.

  1. Inicie sesión en DMS 5.0.

  2. Coloque el puntero sobre el icono 2023-01-28_15-57-17.png en la esquina superior izquierda y seleccione All Features > Security and disaster recovery (DBS) > Security Rules.

    Nota

    Si utiliza la consola de DMS en modo normal, seleccione Security and disaster recovery (DBS) > Security Rules en la barra de navegación superior.

  3. En la columna Actions de la regla de seguridad deseada, haga clic en Edit.

    Nota

    Para ajustar la configuración del modo Flexible Management o Stable Change, haga clic en SQL audit optimization recommendations a la derecha del modo de control correspondiente.

  4. En el panel de navegación izquierdo de la página Details, haga clic en SQL audit optimization recommendations.

  5. Para la regla A table must have a primary key, haga clic en Edit en la columna Actions.

    Nota

    Puede filtrar rápidamente las reglas haciendo clic en el icono 筛选按钮 junto a Tag (el ámbito donde aplica la regla, incluidas instrucciones DDL y DML), Action o Status (habilitado o deshabilitado).

  6. En el cuadro de diálogo Configure Rule Content, configure los siguientes parámetros.

    Los valores disponibles para Action también incluyen potential issue y suggested improvement.

    Parámetro

    Descripción

    Action

    Establezca Action en must be improved.

    Nota

    De forma predeterminada, ninguna regla inicial está configurada como must be improved.

    Remarks

    Introduzca observaciones para la regla, como el contexto empresarial.

  7. Haga clic en OK.

    En tareas posteriores, como desarrollo de datos, cambio de datos y revisión de SQL, DMS comprueba sus instrucciones SQL con respecto a las reglas de seguridad configuradas.

    Si una instrucción infringe la regla A table must have a primary key, el sistema bloquea automáticamente el proceso.

Elementos de comprobación

  • SQL Specification Check incluye los siguientes elementos.

    Definición del esquema de tabla

    Elemento de comprobación

    SQL aplicable

    Nombre e ID de la regla

    Atributos de base de datos

    CREATE DATABASE

    Restringir el juego de caracteres para la creación de bases de datos: CREATE_DATABASE_LIMIT_CHARSET

    Atributos de tabla

    • CREATE TABLE

    • ALTER TABLE

    • Una tabla debe tener clave primaria: TABLE_MUST_HAVE_PRIMARY_KEY

    • Una tabla debe tener comentarios: TABLE_MUST_HAVE_COMMENTS

    • No usar claves externas en tablas: TABLE_FORBID_USE_FOREIGN_KEY

    • Restringir mayúsculas y minúsculas en nombres de tabla: TABLE_NAME_LIMIT_CHAR_CASE

    • Restringir el motor de almacenamiento de las tablas: TABLE_LIMIT_STORE_ENGINE

    • No usar particiones en tablas: TABLE_FORBID_USE_PARTITION

    • Una tabla debe contener columnas específicas: TABLE_MUST_HAVE_SOME_COLUMN

    • Una tabla debe usar un juego de caracteres específico: TABLE_MUST_USE_SOME_CHARSET

    • Una tabla debe usar una intercalación específica: TABLE_MUST_USE_SOME_COLLATION

    • Los nombres de tabla no pueden ser palabras clave: TABLE_NAME_FORBID_KEYWORD

    • Limitar el número de índices en una tabla: TABLE_LIMIT_INDEX_COUNT

    • Limitar el número de columnas en una tabla: TABLE_LIMIT_COLUMN_COUNT

    • Limitar el valor inicial de incremento automático de una tabla: TABLE_LIMIT_INIT_AUTO_INCREMENT

    • La columna de clave primaria debe ser de incremento automático: LIMIT_PRIMARY_COLUMN_AUTO_INCREMENT

    • No usar vistas: TABLE_FORBID_USE_VIEW

    • No usar desencadenadores: TABLE_FORBID_USE_TRIGGER

    • No usar eventos: TABLE_FORBID_USE_EVENT

    • No usar procedimientos almacenados: TABLE_FORBID_USE_STORED_PROCEDURE

    • No usar funciones personalizadas: TABLE_FORBID_USE_CUSTOM_FUNCTION

    • Usar la sintaxis ALTER TABLE CONVERT para modificar el juego de caracteres de la tabla: MODIFY_CHARSET_USE_ALTER_TABLE_CONVERT

    Atributos de columna

    • CREATE TABLE

    • ALTER TABLE

    • Los nombres de columna no pueden ser palabras clave: COLUMN_NAME_FORBID_KEYWORD

    • Restringir mayúsculas y minúsculas en nombres de columna: COLUMN_NAME_LIMIT_CHAR_CASE

    • No establecer un juego de caracteres para una columna: COLUMN_FORBID_SET_CHARSET

    • No usar ciertos tipos de datos para columnas: COLUMN_FORBID_DATA_TYPES

    • Las columnas deben tener comentarios: COLUMN_MUST_HAVE_COMMENTS

    • Limitar la longitud de columnas de tipo char: COLUMN_LIMIT_CHAR_LENGTH

    • Limitar la longitud de columnas de tipo varchar: COLUMN_LIMIT_VARCHAR_LENGTH

    • Todas las columnas deben configurarse como NOT NULL: COLUMN_MUST_SET_NOT_NULL

    • El nombre de la columna de incremento automático debe ser ID: COLUMN_AUTO_INCREMENT_NAME_ID

    • Las columnas de incremento automático deben ser sin signo: COLUMN_AUTO_INCREMENT_UNSIGNED

    • No usar tipos float ni double (use decimal en su lugar): COLUMN_FORBID_FLOAT_DOUBLE_TYPE

    • Cada columna debe tener un valor predeterminado: EACH_COLUMN_NEED_DEFAULT_VALUE

    • No establecer una intercalación para una columna: COLUMN_FORBID_SET_COLLATE

    • No cambiar el nombre de columnas al usar ALTER TABLE: ALTER_TABLE_FORBID_RENAME_COLUMN

    • No eliminar columnas al usar ALTER TABLE: ALTER_TABLE_FORBID_DROP_COLUMN

    • No cambiar tipos de datos al usar ALTER TABLE: ALTER_TABLE_FORBID_MODIFY_DATA_TYPE

    • Las nuevas columnas agregadas con ALTER TABLE deben admitir valores nulos: ALTER_TABLE_ADD_COLUMN_NULLABLE

    • Al agregar una columna que no admite nulos con ALTER TABLE, se debe especificar un valor predeterminado: ALTER_ADD_NOT_NULL_COLUMN_NEED_DEFAULT

    • Al cambiar una columna que admite nulos a una que no los admite, se debe especificar un valor predeterminado: COLUMN_NULLABLE_TO_NOT_NEED_DEFAULT

    • No usar el tipo enum (use tinyint o char en su lugar): COLUMN_FORBID_USE_ENUM_TYPE

    • No usar el atributo ZEROFILL para columnas: COLUMN_DATA_TYPE_FORBID_ZEROFILL

    Atributos de índice

    • CREATE TABLE

    • ALTER TABLE

    • Cada índice debe tener un nombre explícito: INDEX_MUST_HAVE_CLEARLY_NAME

    • Restringir el patrón de nombres para índices Unique: UNIQUE_INDEX_NAME_PATTERN

    • Restringir el patrón de nombres para índices comunes: COMMON_INDEX_NAME_PATTERN

    • Limitar el número de columnas en un solo índice: INDEX_LIMIT_CONTAINS_COLUMNS

    • Limitar el número de columnas en una clave primaria: PRIMARY_LIMIT_CONTAINS_COLUMNS

    • Restringir el tipo de datos de las columnas de clave primaria: PRIMARY_LIMIT_COLUMN_DATA_TYPE

    • No eliminar la clave primaria al usar ALTER TABLE: ALTER_TABLE_FORBID_DROP_PRIMARY

    • No eliminar un índice al usar ALTER TABLE: ALTER_TABLE_FORBID_DROP_INDEX

    Consulta de datos

    Elemento de comprobación

    SQL aplicable

    Nombre e ID de la regla

    SELECT

    • SELECT

    • INSERT SELECT

    • Subconsultas (anidadas en instrucciones UPDATE o DELETE)

    • Las instrucciones SELECT deben especificar una cláusula WHERE: SELECT_SUGGEST_ASSIGN_WHERE

    • No usar ORDER BY RAND() en instrucciones SELECT: SELECT_FORBID_USE_ORDER_BY_RAND

    • No usar GROUP BY sobre una constante en instrucciones SELECT: SELECT_FORBID_GROUP_BY_CONST

    • No usar ORDER BY sobre una constante en instrucciones SELECT: SELECT_FORBID_ORDER_BY_CONST

    • Una instrucción SELECT no debe usar GROUP BY u ORDER BY en tablas diferentes: SELECT_FORBID_GROUP_ORDER_BY_DISTINCT_TABLE

    • En instrucciones SELECT, no usar ORDER BY para ordenar varias columnas en direcciones distintas: SELECT_FORBID_ORDER_BY_MULTI_COLUMN_RANK

    • Instrucción SELECT: No aplicar GROUP BY u ORDER BY a una expresión o función: SELECT_FORBID_GROUP_ORDER_BY_EXPR_OR_FUNCTION

    • No usar UNION en instrucciones SELECT: SELECT_FORBID_USE_UNION

    • Limitar el número de tablas combinadas en una instrucción SELECT: SELECT_LIMIT_TABLE_JOIN_COUNT

    • Límite de la instrucción SELECT sobre el tamaño de offset en la cláusula LIMIT: SELECT_CONFINE_LIMIT_MAX_OFFSET

    • No usar una cláusula HAVING en instrucciones SELECT: SELECT_FORBID_USE_HAVING

    Cláusula WHERE

    Instrucciones que contienen una cláusula WHERE, como SELECT, UPDATE, DELETE e INSERT SELECT.

    • No aplicar operaciones matemáticas o de función a columnas indexadas en una cláusula WHERE: WHERE_FORBID_INDEX_COLUMN_HAS_MATH

    • No usar comodines al inicio en búsquedas dentro de una cláusula WHERE: WHERE_FORBID_BEFORE_WILDCARD_SEARCH

    • Verificar instrucciones LIKE sin comodín en la cláusula WHERE: WHERE_CHECK_LIKE_HAS_NOT_WILDCARD

    • No usar condiciones negativas como NOT IN o NOT LIKE en una cláusula WHERE: WHERE_FORBID_USE_REVERSE_SEARCH

    • Límite en una cláusula WHERE sobre el número de elementos en una cláusula IN: WHERE_LIMIT_IN_ITEM_MAX_COUNT

    • Verificar conversiones implícitas de tipo en columnas dentro de una cláusula WHERE: WHERE_CHECK_COLUMN_IMPLICIT_TYPE_CONVERSION

    • Verificar condiciones de filtro vinculadas por el operador OR en una cláusula WHERE: WHERE_CHECK_OR_LINK_CONDITION

    Cambio de datos

    Elemento de comprobación

    SQL aplicable

    Nombre e ID de la regla

    Insertar datos

    • INSERT SELECT

    • INSERT [IGNORE]

    • REPLACE

    • Una instrucción INSERT debe especificar una lista de columnas: ASSIGN_INSERT_COLUMN_NAME_LIST

    • No usar nombres de columna duplicados en la lista de columnas de INSERT: INSERT_COLUMN_NAME_FORBID_DUPLICATE

    • No insertar un valor NULL en una columna NOT NULL: NOT_NULL_COLUMN_FORBID_INSERT_NULL

    • La lista de columnas debe coincidir con la lista de valores en una instrucción INSERT: INSERT_COLUMN_MUST_MATCH_VALUES

    • Limitar el número total de filas en una sola instrucción INSERT VALUES: LIMIT_INSERT_VALUES_TOTAL_ROWS

    • Comprobar si existe la tabla o columna especificada en una instrucción INSERT: INSERT_CHECK_TABLE_COLUMN_EXISTS

    • No usar la función SYSDATE() en instrucciones de inserción: INSERT_FORBID_USE_SYSDATE_FUNCTION

    Actualizar y eliminar datos

    • UPDATE

    • DELETE

    • Limitar el número de tablas combinadas en instrucciones UPDATE o DELETE: UPDELETE_LIMIT_TABLE_JOIN_COUNT

    • Las instrucciones UPDATE o DELETE deben especificar una cláusula WHERE: UPDELETE_ASSIGN_WHERE_CONDITION

    • Verificar si la cláusula WHERE contiene una subconsulta en instrucciones UPDATE o DELETE: UPDELETE_CHECK_WHERE_EXIST_SUB_QUERY

    • Limitar el número de filas afectadas mediante LIMIT en instrucciones UPDATE o DELETE: UPDELETE_CHECK_LIMIT_AFFECTED_ROWS

    • Detectar si la sintaxis de combinación de múltiples tablas está completa en instrucciones UPDATE o DELETE (por ejemplo, si falta una cláusula on en una cláusula join): UPDELETE_CHECK_TABLE_JOIN_LOSS_ON

    • No incluir una cláusula ORDER BY en instrucciones UPDATE o DELETE: UPDELETE_FORBID_ORDER_BY

    • Comprobación de instrucción UPDATE: Delimitador SET entre múltiples columnas (and no es válido): UPDATE_CHECK_SET_ITEM_DELIMITER

    • UPDATE en múltiples tablas: Verifica si las columnas en la cláusula SET se especifican con un prefijo de tabla: UPDATE_MULTI_TABLE_CHECK_SET_COLUMN_PREFIX

    • Verificar si existen las tablas o columnas en una instrucción UPDATE: UPDATE_CHECK_TABLE_COLUMN_EXIST

    • Verificar si una instrucción UPDATE modifica la clave primaria: UPDATE_CHECK_PRIMARY_KEY_CHANGE

    • Verificar si una instrucción UPDATE modifica una clave única: UPDATE_CHECK_UNIQUE_KEY_CHANGE

    • Una instrucción UPDATE también debe actualizar la columna de "hora de modificación" de la tabla: UPDATE_ALSO_TO_UPDATE_MODIFY_TIME_COLUMN

    • No actualizar la columna de "hora de creación" de la tabla en una instrucción UPDATE: UPDATE_FORBID_MODIFY_CREATE_TIME_COLUMN

  • Las sugerencias de optimización de SQL incluyen los siguientes elementos de comprobación.

    Categoría

    Elemento de comprobación

    Ninguna

    • Optimizar tablas donde la clave primaria es de tipo int: OPTIMIZE_PRIMARY_IS_INT_TABLE

    • Advertir sobre espacio restante insuficiente para claves primarias de incremento automático: SNIFFING_AUTO_PRIMARY_REMAIN_SPACE

    • Advertir sobre el riesgo de valores NULL en una clave única (UK): SNIFFING_UNIQUE_EXIST_NULL_RISK

    • Advertir y optimizar bloqueos de tabla DDL o fallos de cambio: ALTER_LOCK_FAIL_SNIFFING_OPTIMIZE

    • Detectar riesgos de inyección SQL: CHECK_SQL_INJECTION_RISK

    • Detectar riesgos por el uso de índices forzados (FORCE INDEX): CHECK_SQL_ASSIGN_FORCE_INDEX

    • Verificar el índice en el plan de ejecución: SQL_EXPLAIN_INDEX_CHECK

    • Análisis y sugerencias de índices de DMS: DMS_INDEX_ANALYZE_AND_SUGGEST