¿Cómo optimizar las consultas de big data de varias tablas en bases de datos?

¿Cómo optimizar consultas de big data de varias tablas en bases de datos? 1. Trate de evitar juzgar el valor nulo del campo en la cláusula donde; de ​​lo contrario, el motor dejará de usar el índice y escaneará toda la tabla, por ejemplo:

Seleccione id de t, donde num es vacío

Puedes establecer el valor predeterminado de num en 0 para asegurarte de que no haya valores nulos para la columna num en la tabla y luego consultarlo de esta manera:

Seleccione id de t donde num=0

2. ¡Intente evitar usarlo en la cláusula donde! =o

3. Intente evitar el uso de la condición de conexión o en la cláusula donde; de ​​lo contrario, el motor dejará de usar el índice y escaneará toda la tabla, por ejemplo:

p>Seleccione id de t, donde num=10 o num=20

Puede consultar así:

seleccione id de t donde num=10

Union all

Seleccionar id de t, donde num=20

4.in y no in también deben usarse con precaución, porque in hará que el sistema no pueda usar el índice y Solo puede buscar directamente los datos en la tabla. Por ejemplo:

seleccione id de t donde num en (1, 2, 3)

Para valores continuos, puede usar been en su lugar:

seleccione id desde t donde num ha sido 1 y 3

5. Intente evitar el uso de búsquedas sin prefijo en datos de caracteres de índice. Esto también evita que el motor utilice el índice.

Vea el siguiente ejemplo:

SELECT * FROM T1 donde el nombre es como "%L%"

SELECT * FROM t 1 WHERE SUBSTING(NAME, 2 , 1)='L '

SELECT * FROM T1 donde el nombre es como "L%"

Incluso si el campo NOMBRE tiene un índice, las dos primeras consultas no pueden usarse el índice para acelerar la operación, el motor debe operar con todos los datos de la tabla completa uno por uno para completar la tarea. La tercera consulta puede utilizar un índice para acelerar la operación.

6. Si es necesario, fuerce al optimizador de consultas a usar el índice, como usar parámetros en la cláusula donde, lo que también provocará un escaneo completo de la tabla. Debido a que SQL solo resuelve variables locales en tiempo de ejecución, el optimizador no puede posponer la selección del plan de acceso hasta el momento de ejecución; debe seleccionarse en tiempo de compilación; Sin embargo, si el plan de acceso se establece en tiempo de compilación, el valor de la variable aún se desconoce, por lo que no se puede utilizar como entrada para la selección del índice. La siguiente declaración escaneará toda la tabla:

seleccione id de t donde num=@num

Puede forzar que la consulta use un índice:

Seleccionar id de t con (índice) donde num=@num.

7. Intente evitar realizar operaciones de expresión en campos en la cláusula donde, lo que hará que el motor deje de usar el índice y escanee toda la tabla.

Por ejemplo:

SELECT * FROM T1 donde F1/2=100

debe cambiarse a:

SELECT * FROM T1 donde F1=100*2

SELECT * FROM RECORD WHERE SUBSTRING(CARD _ NO, 1, 4)='5378 '

Debe cambiarse a:

SELECT * FROM RECORD WHERE TARJETA _ NO ME GUSTA ' 5378% '

Seleccione el número de miembro, nombre y apellido de los miembros

Donde DATEDIFF(yy, datofbirth, GETDATE())>

Debe cambiarse a:

Seleccione el número de miembro, nombre y apellido de los miembros

donde fecha de nacimiento & ltDATEADD(yy, -21, GETDATE())

Es decir, cualquier operación en una columna dará como resultado un escaneo de la tabla, que incluye funciones de base de datos, expresiones de cálculo, etc. Al realizar consultas, mueva las operaciones a la derecha del signo igual tanto como sea posible.

8. Las operaciones de funciones en campos en la cláusula donde deben evitarse tanto como sea posible, lo que hará que el motor deje de usar el índice y escanee toda la tabla. Por ejemplo:

seleccione id desde donde subcadena(nombre, 1, 3) = 'abc'-nombre ID que comienza con ABC.

Seleccione id desde donde fechado (día, fecha de creación, ' 2005-11-30 ') = 0-' 2005-11-30 ' id generado.

Debe cambiarse a:

Seleccione la identificación de t donde el nombre es "abc%"

seleccione la identificación de t donde la fecha de creación>=' 2005- 11-30 'y crear fecha<'2005-12-1'

9. No realice funciones, operaciones aritméticas u otras operaciones de expresión en el lado izquierdo de "=" en la cláusula donde. Es posible que el sistema no pueda utilizar el índice correctamente.

10. Cuando se utiliza un campo de índice como condición, si el índice es un índice compuesto, el primer campo del índice debe usarse como condición para garantizar que el sistema use el índice; de ​​lo contrario, el índice. no se utilizará y el orden de los campos debe ser coherente con el orden del índice tanto como sea posible.

11. Muchas veces usar existe es una buena opción:

seleccione num de a donde num in (seleccione num de b)

Reemplace con la siguiente declaración :

seleccione num de a donde existe (seleccione 1 de b donde num = a . num)

Seleccione SUMA (T1. C1) de T1, donde (

(SELECCIONE CUENTA(*) DE T2 DONDE T2.C2=T1.C2>0)

SELECCIONE SUMA(T1.C1) DE T1 DONDE EXISTE(

Seleccione * de T2 a T2.C2=T1.C2)

Ambos producen el mismo resultado, pero el último es significativamente más eficiente que el primero porque el último no genera una gran cantidad de escaneos de índice de tabla de bloqueo. .

¿Cómo consulta Java los datos de la declaración de la base de datos stmt = null?

Conjunto de resultados rs = null

string query = " seleccionar el nombre de la columna del nombre de la tabla donde ID = 11 y fname = ' xx ' ordenar por nombre de la columna desc limit 1 ";

p>

stmt = conn . crear declaración();

rs = stmt.executeQuery(consulta);

if (rs.next()) {

Resultado = rs.getInt("Nombre de columna");

}

Corregiré los errores ortográficos en la consulta de datos en la tabla de la base de datos de arriba .

Seleccione recuento (*) del nombre de la tabla

Cómo consultar datos de bases de datos grandes Es muy difícil para las bases de datos tradicionales procesar grandes datos y no se recomienda utilizar bases de datos tradicionales. para procesar grandes datos.

Se recomiendan Hadoop, Hive, etc. Capaz de manejar big data.

Si tiene el presupuesto, puede utilizar algunos productos comerciales de big data, como los productos de BI de big data de la tecnología nacional Yonghong, que no solo pueden procesar big data con alto rendimiento, sino también realizar análisis de datos. .

Por supuesto, si se trata de una consulta sencilla, una base de datos tradicional puede mejorar el rendimiento si está bien indexada.

Hay dos formas de implementar la paginación de consultas de datos en diferentes bases de datos.

Método 1:

seleccione 100 * de tbllendlist donde no está fldserialNo (seleccione 300100 fldserialNo de tbllendlist ordene por fldserialNo)ordene por fldserialNo

Método 2:

SELECCIONE LOS 100 PRINCIPALES * FROM tbllendlist DONDE(fldserialNo & gt; (SELECT MAX(fldserialNo)FROM(SELECT TOP 300100 fldserialNo FROM tbllendlist ORDEN POR fldserialNo)AS T))ORDEN POR fldserialNo

Cómo mejorar la tasa de aciertos de la consulta de datos de la base de datos Oracle Hay cuatro factores que afectan la tasa de aciertos: actividad de la tabla del diccionario, actividad del segmento temporal, actividad del segmento de reversión y escaneo de la tabla. Las aplicaciones de DBA pueden analizar estos cuatro factores para descubrir el quid de la baja tasa de aciertos de la base de datos. 1) Actividad de la tabla de diccionario Cuando una declaración SQL llega al kernel de Oracle por primera vez, la base de datos analiza la declaración SQL, descompone los objetos del diccionario de datos contenidos en la consulta y genera la ruta de ejecución de SQL. ¿Qué pasa si la declaración SQL apunta a un objeto que no está en el SGA? Tabla o vista, Oracle ejecuta declaraciones SQL para consultar información del objeto en el diccionario de datos. Los bloques de datos se leen de la tabla del diccionario de datos en la memoria caché de datos del SGA. Debido a que cada diccionario de datos es pequeño, podemos almacenar en caché estas tablas para mejorar la tasa de aciertos de estas tablas. Sin embargo, dado que los bloques de la tabla del diccionario de datos ocupan espacio en el SGA, cuando la tasa total de aciertos aumenta, el espacio disponible de los bloques de datos de la tabla se reducirá, por lo tanto, si la información del diccionario de tiempo requerida para la consulta ya está en la caché del SGA. , no hay necesidad de llamadas recursivas. 2) Actividad de segmentos temporales Cuando el usuario ejecuta una consulta que requiere clasificación, Oracle intentará ordenar todas las filas en el área de clasificación en la memoria. El tamaño del área de clasificación está determinado por la cantidad de archivos init.ora en la base de datos. Si el área de clasificación no es lo suficientemente grande, la base de datos abrirá segmentos temporales durante la operación de clasificación. Los segmentos temporales reducirán artificialmente la tasa de aciertos de las aplicaciones OLTP (procesamiento de transacciones en línea) y también reducirán el rendimiento de la clasificación de consultas. Si todas las operaciones de clasificación se pueden realizar en la memoria, se puede eliminar la sobrecarga de escribir datos en segmentos temporales.

Por lo tanto, debes configurar SORT_AREA_SIZE lo suficientemente grande como para evitar la necesidad de segmentos temporales. El método de ajuste específico de este parámetro es: consultar datos relevantes para determinar el ajuste de este parámetro. seleccione * de v$sysstat donde name='sorts(disk)' o name=' sorts(memory); la mayoría de las clasificaciones se realizan en la memoria, pero algunas aparecen en segmentos temporales y requieren ajuste de valores. Verifique el valor SORT_AREA_SIZE del archivo init.ora. Ajuste el parámetro: sort _ area _ size = 65536 para sort _ area _ size = 131072. Después de ajustar este valor, reinicie la base de datos ORACLE para que surta efecto. 3) Actividades del segmento de reversión Las actividades del segmento de reversión se dividen en actividades de reversión y actividades de encabezado del segmento de reversión. El acceso al bloque de encabezado del segmento de reversión reducirá la tasa de aciertos de la aplicación y tiene el mayor impacto en la tasa de aciertos del sistema OLTP. Para confirmar si la tasa de aciertos se ve afectada por el segmento de reversión, puede ver las estadísticas de "Aplicación de registro de lectura y reescritura de compatibilidad de bloques" en el informe de salida de monitoreo, que se utiliza para determinar la cantidad de veces que los usuarios accedieron a los datos del segmento de reversión. 4) Exploración de tablas Los bloques leídos mediante exploraciones grandes no permanecerán en la caché de bloques de datos durante mucho tiempo, por lo que las exploraciones de tablas reducirán la tasa de aciertos. Para evitar escaneos completos innecesarios de tablas, primero debe crear índices según sea necesario. Un diseño de índice razonable requiere el análisis y la predicción de varias consultas. En segundo lugar, hablaré de esto en detalle y coloque las tablas de uso común en la memoria. Reducir el número de lecturas y escrituras en disco.

¿Cómo optimizar la base de datos y mejorar la eficiencia de la base de datos1? El principio de optimización de SQL es minimizar la cantidad de bloques que deben leerse en una operación, es decir, lograr el máximo rendimiento de datos en el menor tiempo.

El ajuste de SQL incorrecto generalmente puede comenzar desde los siguientes puntos:

? Verifique el SQL en busca de errores y considere si hay áreas en su redacción que podrían optimizarse.

? Examine la subconsulta y considere si la subconsulta SQL se puede reescribir mediante una combinación simple.

? Verifique el uso de índices optimizados.

? Considere el optimizador de base de datos

2. Evite las declaraciones SELECT * FROM de la tabla e identifique claramente los campos.

3. En la declaración SQL, si la condición Where filtra más registros de la base de datos y el posicionamiento es más preciso, entonces la condición Where debe avanzar.

4. Al realizar consultas, utilice la cobertura de índice tanto como sea posible. Es decir, se establece un índice compuesto en el campo SELECT, de modo que solo se realiza el escaneo del índice durante la consulta y el bloque de datos no se lee.

5. Al determinar si hay registros que cumplen con las condiciones, se recomienda no utilizar SELECT COUNT (*) y seleccionar 1 declaraciones.

6. Utilice el principio de limitación interna para descomponer y clasificar las condiciones de consulta al deletrear declaraciones SQL, y limítelas al nivel más interno de la declaración SQL tanto como sea posible para reducir la cantidad de procesamiento de datos. .

7. Deben evitarse absolutamente las expresiones en la cláusula order by.

8. Si necesita leer datos de tablas relacionadas, el número de tablas relacionadas generalmente no debe exceder 7.

9. Utilice In y OR con precaución y preste atención a la cantidad de datos en el conjunto IN. Se recomienda que los datos de la colección no superen los 200.

10.& lt& gtUtilice sustitución, >use >= en su lugar,

11. Intente minimizar la lectura de datos redundantes durante la consulta, incluidas columnas y filas redundantes.

12. Presta atención al índice completo. Por ejemplo, al crear un índice compuesto, el orden de las columnas es F1, F2, F3, entonces el orden de estos campos en la cláusula donde o ordenar por debe ser coherente con el orden de los campos al crear el índice, y el Se debe incluir la primera columna. Sólo puede ser F1 o F1, F2 o F1, F2, F3. De lo contrario, no se utilizará el índice.

13. La consulta conjunta de varias tablas debe seguir los siguientes principios, lo que favorece el establecimiento de índices y la mejora de la eficiencia de la consulta. El formato es el siguiente: De la Tabla 1, Tabla 1, Tabla 2, Tabla 2, Tabla 3, Tabla 3 Donde (condición equivalente de la Tabla 1 (=) y (condición no equivalente de la Tabla 1) y (condición equivalente de la Tabla 1 (=) y (condición no equivalente de la Tabla 1) 2) y (Tabla 2 condiciones no equivalentes) y (condiciones relacionadas de la Tabla 3 y (Tabla 2)) y (condiciones equivalentes de la Tabla 3).

Nota: Es necesario estudiar el impacto del orden de aparición de las tablas después de la eficiencia de la consulta de varias tablas.

14. Problema de subconsulta. No utilice subconsultas para funciones que se puedan implementar en el modo de unión o en el modo de visualización. Ejemplo: seleccione el nombre del cliente donde está el cliente _ id (seleccione el cliente _ id del pedido donde el dinero > 1000 debe usarse en su lugar: seleccione el nombre del pedido interno de unión del cliente). id_cliente = pedido. El ID de cliente de la oficina de pedidos. Dinero > 100.

15. En la cláusula donde, evite realizar cuatro operaciones en la columna, especialmente en el lado izquierdo de la condición WHERE. Está prohibido el uso de operaciones y funciones para procesar columnas. Por ejemplo, la subcadena se puede reemplazar por me gusta en algunos lugares.

16. Si hay una operación no en (en) en la declaración, deberíamos considerar reescribirla con no existe (existe).

17. Un proceso de negocio debe procesarse de manera que el intervalo de tiempo entre el inicio y el final de las cosas sea lo más corto posible. En principio, las operaciones de lectura de la base de datos deben completarse al principio y las operaciones de escritura de la base de datos deben completarse al final para evitar superposiciones.

18. Tenga cuidado de no utilizar funciones de columna, ordenar por, agrupar por, etc. Para demasiadas columnas, tenga cuidado al utilizar software disti para desarrollar T.

19.union se reemplaza por union all y la base de datos realiza una operación de unión. Primero ejecute las consultas en ambos extremos de la unión respectivamente, luego ordene en la tabla temporal y filtre los registros duplicados.

Cuando la lógica empresarial conocida determina que no habrá registros duplicados en la consulta A y en la consulta B, se debe utilizar union all en lugar de union para mejorar la eficiencia de la consulta.

Eficiencia de la actualización de datos

1. Primero, se deben ejecutar juntas varias instrucciones de inserción de la misma tabla.

2. En el proceso de negocio, intente ejecutar las declaraciones INSERT, UPDATE y DELETE antes de que finalice el negocio para reducir la posibilidad de un punto muerto.

Eficiencia de la planificación física de la base de datos

Para evitar conflictos de E/S, debemos seguir varios principios básicos al diseñar la planificación física de la base de datos (tomando ORACLE como ejemplo):

Las tablas y los índices están separados: las tablas y los índices deben colocarse en espacios de tablas diferentes.

Separación de segmentos de reversión: los segmentos de reversión deben colocarse en un espacio de tabla separado.

Separación del espacio de tablas del sistema: No se permiten objetos de usuario en el espacio de tablas del sistema. (Los objetos de usuario no están permitidos en el grupo de archivos principal de mssql)

Separación de espacios de tablas temporales: cree un espacio de tablas temporales separado y especifique un espacio de tablas temporales predeterminado para cada usuario.

Evitar la fragmentación: Sin embargo, cuando hay mucha fragmentación en un segmento, aumenta el número de bloques a los que es necesario acceder al leer los datos. Para los segmentos donde ocurren a menudo operaciones DML, la fragmentación no se puede evitar por completo. Por lo tanto, debemos separar las tablas que se someten a operaciones DML frecuentes de las tablas que rara vez cambian en diferentes espacios de tablas.

Cuando seguimos los principios anteriores, todavía existen conflictos de E/S, que podemos resolver mediante la separación de datos.

Separación de tablas relacionadas: las tablas que se consultan con frecuencia en aplicaciones prácticas se pueden separar en diferentes Taclespaces para reducir los conflictos de E/S.

Usar particionamiento: Utilice particionamiento para tablas e índices con grandes cantidades de datos y colóquelos en diferentes espacios de tabla.

En el almacenamiento físico real, se recomienda utilizar RAID. Los archivos de registro deben colocarse en un disco separado.

Los algoritmos de optimización de consultas de bases de datos reciben su consulta, que luego puede optimizar.

Cómo optimizar las consultas de la base de datos de SQL Server. Si su consulta es relativamente fija y las condiciones de la consulta están muy diferenciadas, puede crear los índices correspondientes.

Puedes probar otras reglas, como usar existe en lugar de en.

Hay muchas razones para la velocidad de consulta lenta, como se indica a continuación:

1. Sin índice o sin índice (este es el problema de consulta lenta más común y un defecto de programación)

p>

2. El rendimiento de E/S es muy pequeño, lo que genera un efecto de cuello de botella.

3. La consulta no está optimizada porque no se crea la columna calculada.

4. Memoria insuficiente

5. Velocidad de red lenta

6. La cantidad de datos consultados es demasiado grande (puede utilizar varias consultas para reducir la cantidad). de datos).

7. Bloqueo o punto muerto (este es también el problema de consulta lenta más común y un defecto de programación)

8. sp_lock, sp_who, vistas de usuarios activos, debido a la competencia de lectura y escritura. recurso.

9. Se devuelven filas y columnas innecesarias.

10. La declaración de consulta no es buena y no está optimizada.

Puede optimizar las consultas de las siguientes maneras:

1. Coloque datos, registros e índices en diferentes dispositivos de E/S para aumentar la velocidad de lectura. Solía ​​ser posible poner Tempdb en RAID0, pero SQL2000 no era compatible. Cuanto mayor sea el volumen (tamaño) de datos, más importante será mejorar la E/S.

2. Divida la tabla vertical y horizontalmente para reducir el tamaño de la tabla (sp_spaceuse).

3. Actualizar el hardware

4. Cree índices basados ​​en las condiciones de la consulta, optimice los índices y los métodos de acceso y limite la cantidad de datos en el conjunto de resultados. Tenga en cuenta que el factor de relleno debe ser apropiado (es mejor utilizar el valor predeterminado de 0). Los índices deben ser lo más pequeños posible. Utilice columnas de bytes pequeños para crear índices (consulte creación de índices). No cree un índice único en un campo con valores limitados, como el género.

5. Aumentar la velocidad de la red;

6. Ampliar la memoria del servidor. Windows 2000 y SQL Server 2000 pueden admitir entre 4 y 8 GB de memoria. Configurar la memoria virtual: el tamaño de la memoria virtual debe configurarse en función de los servicios que se ejecutan simultáneamente en la computadora. ¿Está ejecutando Microsoft SQL Server? En 2000, considere configurar el tamaño de la memoria virtual en 0,5 veces la memoria física instalada en una máquina 65438+. Si la función de búsqueda de texto completo está instalada adicionalmente y planea ejecutar el servicio de búsqueda de Microsoft para realizar consultas e indexaciones de texto completo, considere configurar el tamaño de la memoria virtual para que sea al menos 3 veces la memoria física instalada en la computadora. Configure la opción de configuración del servidor de memoria máxima del servidor SQL Server en 1,5 veces la memoria física (la mitad de la configuración del tamaño de la memoria virtual).

7. Aumente el número de CPU del servidor; pero debe entenderse que el procesamiento paralelo y el procesamiento en serie requieren más recursos, como la memoria. MsSQL evalúa automáticamente la elección de ejecutar en paralelo o en serie. Una sola tarea se puede dividir en varias tareas y ejecutar en el procesador. Por ejemplo, la clasificación, vinculación, escaneo y ejecución simultánea de consultas retrasadas mediante agrupación de declaraciones determina el nivel paralelo óptimo en función de la carga del sistema. Las consultas complejas que consumen una gran cantidad de CPU son las más adecuadas para el procesamiento paralelo. Sin embargo, las operaciones de actualización, Insertar y Eliminar no se pueden procesar en paralelo.

8. Si utiliza like para realizar consultas, simplemente usar el índice no es suficiente y el índice de texto completo consume espacio. Como 'a% ' usa un índice similar a ' %a ' sin índice. Al realizar consultas como "% a %", el tiempo de consulta es proporcional a la longitud total del valor del campo, por lo que no se puede usar el tipo CHAR, pero se debe usar VARCHAR. Cree un índice de texto completo para valores de campo largos.

9. Separación del servidor de base de datos y el servidor de aplicaciones; separación de OLTP y OLAP

10. La vista de partición distribuida se puede utilizar para implementar la unión del servidor de base de datos. Una federación es un grupo de servidores que se administran individualmente pero que cooperan entre sí para compartir la carga de procesamiento del sistema. Este mecanismo de partición de datos para formar una federación de servidores de bases de datos puede escalar un conjunto de servidores para satisfacer las necesidades de procesamiento de sitios web grandes de varios niveles. Para obtener más información, consulte Diseño de un servidor de bases de datos federado. (Consulte el archivo de ayuda de SQL "Vista particionada")

a. Antes de implementar la vista particionada, la tabla debe dividirse horizontalmente.

b. Después de crear la tabla de miembros, defina una vista de partición distribuida en cada servidor miembro, donde cada vista tenga el mismo nombre.

De esta manera, las consultas que hacen referencia al nombre de la vista particionada distribuida se pueden ejecutar en cualquier servidor miembro. El sistema funciona como si hubiera una copia de la tabla original en cada servidor miembro, pero en realidad solo hay una tabla miembro y una vista particionada distribuida en cada servidor. La ubicación de los datos es transparente para la aplicación.

11. Reconstruir índices DBCC REINDEX, DBCC INDEXDEFRAG, reducir datos y registros DBCC SHRINKDB, DBCC SHRINKFILE. Configure registros de contracción automáticos. Para bases de datos grandes, no configure la base de datos para que crezca automáticamente, ya que esto reducirá el rendimiento del servidor. Se pone mucho énfasis en escribir T-sql. Los puntos comunes se enumeran a continuación: 1. El proceso de procesamiento del plan de consulta DBMS es el siguiente:

1. /p>

2 .Envíe la declaración al optimizador de consultas del DBMS.

3. El optimizador realiza optimización algebraica y optimización de la ruta de acceso.

4. El plan de consulta es generado por el módulo precompilado.

5. Luego se envía al sistema para su procesamiento y ejecución en el momento adecuado.

6. Finalmente, devolver los resultados de la ejecución al usuario. En segundo lugar, observe la estructura de almacenamiento de datos de SQL SERVER: el tamaño de una página es de 8K (8060) bytes y ocho páginas son un panel, que se almacena de acuerdo con el árbol B.

12. La diferencia entre confirmar y revertir: revertir todo. Enviar: enviar lo actual. No es necesario escribir nada en SQL dinámico. Si desea escribir algo, escríbalo afuera, como comenzar tran exec(@s) con trans o escribir SQL dinámico como una función o procedimiento almacenado.

13. En la instrucción Select de consulta, el número de filas devueltas está limitado por la cláusula Where para evitar el escaneo de la tabla. Si se devuelven datos innecesarios, se desperdiciarán los recursos de E/S del servidor, aumentará la carga de la red y se reducirá el rendimiento. Si la tabla es muy grande, se bloqueará durante el escaneo de la tabla, impidiendo que otras conexiones accedan a la tabla, con graves consecuencias.

14. Las declaraciones de comentarios SQL no tienen impacto en la ejecución.

15. Intenta no utilizar el cursor, que consume muchos recursos. Si necesita ejecutar fila por fila, intente utilizar tecnología sin cursor, como bucles en el cliente, tablas temporales, variables de tabla, subconsultas, declaraciones de casos, etc. Los cursores se pueden clasificar según las opciones de recuperación que admiten: solo hacia adelante se deben recuperar filas desde la primera hasta la última. FETCH NEXT es la única operación de búsqueda permitida y es el modo predeterminado. La capacidad de desplazamiento puede seleccionar aleatoriamente cualquier fila en cualquier posición del cursor. La tecnología de cursor se ha vuelto muy poderosa en SQL2000 y su propósito es admitir bucles. Hay cuatro opciones de concurrencia READ_ONLY: no se permiten actualizaciones mediante el posicionamiento del cursor y no hay bloqueos en las filas que componen el conjunto de resultados. Valor de optimización: el control de concurrencia optimista es una parte estándar de la teoría del control de transacciones. El control de concurrencia abierto se utiliza cuando el segundo usuario tiene pocas posibilidades de actualizar la fila entre abrir el cursor y actualizar la fila. Cuando se abre un cursor con esta opción, no hay bloqueos que controlen las filas dentro de él, lo que ayudará a maximizar su potencia de procesamiento. Si el usuario intenta modificar una fila, el valor actual de la fila se compara con el valor obtenido la última vez que se obtuvo la fila. Si algún valor cambia, el servidor sabrá que alguien más ha actualizado la fila y devolverá un error. Si los valores son iguales, el servidor realizará la modificación. ¿Seleccionar esta opción de simultaneidad? Mejor con control de versiones de filas: esta opción optimista de control de simultaneidad se basa en el control de versiones de filas. Para el control de versiones de filas, la tabla debe tener un identificador de versión que el servidor pueda usar para determinar si la fila ha cambiado desde que se leyó el cursor. En SQL Server, este rendimiento lo proporciona el tipo de datos de marca de tiempo, que es un número binario que representa el orden relativo de los cambios en la base de datos. Cada base de datos tiene un valor de marca de tiempo actual global: @@DBTS. Siempre que una fila con una columna de marca de tiempo cambia de alguna manera, SQL Server primero almacena el valor @@DBTS actual en la columna de marca de tiempo y luego incrementa el valor de @@DBTS. Si una tabla tiene una columna de marca de tiempo, la marca de tiempo se registra en el nivel de fila. El servidor puede comparar el valor de marca de tiempo actual de una fila con el valor de marca de tiempo almacenado cuando se obtuvo por última vez para determinar si la fila se ha actualizado. El servidor no tiene que comparar los valores de todas las columnas, solo la columna de marca de tiempo.

Si su aplicación requiere simultaneidad optimista basada en versiones de filas en una tabla que no tiene una columna de marca de tiempo, el cursor toma de forma predeterminada simultaneidad optimista basada en valores. Bloqueo de desplazamiento Esta opción implementa un control de concurrencia pesimista. En el control de concurrencia pesimista, la aplicación intenta bloquear las filas de la base de datos a medida que se leen en el conjunto de resultados del cursor. Cuando se utiliza un cursor de servidor, se coloca un bloqueo de actualización en la fila a medida que se lee en el cursor. Si el cursor se abre dentro de una transacción, el bloqueo de actualización de la transacción se mantendrá hasta que la transacción se confirme o se revierta. Al seleccionar la siguiente línea, se eliminará el bloqueo del cursor. Si el cursor se abre fuera de una transacción, el bloqueo se eliminará cuando se obtenga la siguiente fila. Por lo tanto, siempre que los usuarios requieran un control de concurrencia totalmente pesimista, los cursores deben abrirse dentro de una transacción. Un bloqueo de actualización evitará que cualquier otra tarea adquiera un bloqueo de actualización o un bloqueo exclusivo, evitando así que otras tareas actualicen la fila. Sin embargo, el bloqueo de actualización no impide que * * * disfrute del bloqueo, por lo que no impide que otras tareas lean la fila, a menos que la segunda tarea también solicite leer usando el bloqueo de actualización. Bloqueos de desplazamiento Estas opciones de simultaneidad de cursor pueden generar bloqueos de desplazamiento basados ​​en la sugerencia de bloqueo especificada en la instrucción Select de la definición del cursor. Se adquiere un bloqueo de desplazamiento en cada fila al buscar y se mantiene hasta la siguiente búsqueda o hasta que se cierra el cursor, lo que ocurra primero. En la siguiente recuperación, el servidor adquiere el bloqueo de desplazamiento en las filas recién recuperadas y lo libera en la última fila recuperada. Los bloqueos de desplazamiento son independientes de los bloqueos de transacciones y se pueden mantener después de una operación de confirmación o reversión. Si la opción para cerrar cursores al confirmar está desactivada, la instrucción COMMIT no cierra ningún cursor abierto y el bloqueo de desplazamiento se retiene después de la confirmación para mantener aislados los datos extraídos. El tipo de bloqueo de desplazamiento obtenido depende de las opciones de concurrencia del cursor y de la sugerencia de bloqueo en la instrucción Select del cursor. mensaje de bloqueo solo lectura valor optimista fila optimista control de versión bloquear sin mensaje desbloquear desbloquear desbloquear actualizar NOLOCK desbloquear desbloquear desbloquear HOLDLOCK ***desbloquear disfrutar * * *desbloquear disfrutar actualizar UPDLOCK error actualizar actualizar TABLOCKX error desbloquear actualizar otro desbloquear desbloquear desbloquear desbloquear actualizar desbloquear actualizar DESBLOQUEAR ACTUALIZAR* Al especificar la sugerencia NOLOCK, la tabla especificada con esta sugerencia será de solo lectura en el cursor.

16. Utilice Profiler para realizar un seguimiento de la consulta, obtener el tiempo necesario para la consulta y descubrir problemas de SQL. Utilice el optimizador de índice para optimizar el índice.

17. la diferencia entre UNion y UNion all. La unidad es buena.

18. Preste atención al uso de DISTINCT. No lo use cuando sea innecesario. Ralentizará la consulta como UNION. Los registros duplicados no tienen problema en las consultas.

19. No devuelva filas y columnas innecesarias al realizar consultas.

20. Utilice sp_configure 'QUERY GOVERNOR COST LIMIT' o SET QUERY_GOVERNOR_COST_LIMIT para limitar los recursos consumidos por la consulta. Cuando los recursos consumidos por una consulta de evaluación exceden el límite, el servidor cancela automáticamente la consulta y la elimina antes de la consulta. Establecer tiempo de bloqueo Configure el tiempo de bloqueo.

21. Utilice select 100/10% para limitar el número de filas devueltas por el usuario, o configure ROWCOUNT para limitar el número de filas para la operación.

22. Antes de SQL2000, las siguientes palabras generalmente no se usaban: "es nulo", "es < >", "!=", "!>", "!" requieren indexación.

23. Utilice el Analizador de consultas para verificar el plan de consulta de la declaración SQL y evaluar si el análisis es SQL optimizado. Generalmente, el 20% del código ocupará el 80% de los recursos. Nuestro enfoque de optimización está en estos lugares lentos.

24. Si la consulta no tiene índice al usar in o OR, etc. , utilice la declaración de visualización para especificar el índice: seleccione * de miembro persona (índice = IX_title) donde se procesa la identificación en ('masculino', 'femenino').

25. Calcule previamente los resultados a consultar y colóquelos en la tabla, y luego selecciónelos durante la consulta. Este era el método más importante antes de SQL7.0, como el cálculo de los gastos de hospitalización.

26. MIN() y MAX() pueden utilizar índices apropiados.

27. Existe el principio en la base de datos de que el código está lo más cerca posible de los datos, por lo que se prefiere el valor predeterminado, seguido de reglas, desencadenantes y restricciones (como la unicidad de la verificación de estado externa y el máximo). longitud del tipo de datos, etc.) son restricciones) y procesos. Esto no sólo reduce el mantenimiento sino que también mejora la calidad de la programación y la velocidad de ejecución.

28. Si desea insertar un valor binario grande en la columna Imagen, use un procedimiento almacenado y nunca use Insert incrustado (no sé si es JAVA). Porque una aplicación de este tipo primero convierte el valor binario en una cadena (el doble de tamaño) y luego lo convierte en un valor binario después de que el servidor recibe los caracteres. El procedimiento almacenado no tiene estas acciones: Método: cree el procedimiento p_insert como insertar en valores de tabla (imagen f) (@ imagen) y llame a este procedimiento almacenado en primer plano para pasar parámetros binarios, lo que mejora significativamente la velocidad de procesamiento.