Red de conocimiento informático - Material del sitio web - Cómo analizar por qué Oracle es lento

Cómo analizar por qué Oracle es lento

Resumen de las razones por las que la velocidad de consulta de Oracle es lenta

Hay muchas razones para la velocidad de consulta lenta, las siguientes son razones comunes:

1. no se utiliza ningún índice o no se utiliza (este es el problema más común de consulta lenta y es un defecto en la programación)

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

3. La falla al crear columnas calculadas causa que la consulta no esté optimizada.

4. Memoria insuficiente

5. la cantidad de datos consultados es demasiado grande (se pueden usar múltiples consultas, otros métodos para reducir la cantidad de datos)

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

8. sp_lock, sp_who, actividad Visto por los usuarios, el motivo es la competencia de lectura y escritura por los recursos.

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

Las consultas se pueden optimizar mediante los siguientes métodos:

1. Coloque datos, registros e índices en diferentes E/S. dispositivos para aumentar la velocidad de lectura En el pasado, Tempdb se podía colocar en RAID0, SQL2000 ya no es compatible. Cuanto mayor sea el volumen de datos (tamaño), más importante es mejorar la E/S.

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

3. Actualizar hardware

4. métodos de acceso y limite la cantidad de datos en el conjunto de resultados. Preste atención al factor de relleno apropiado (preferiblemente usando el valor predeterminado 0. El índice debe ser lo más pequeño posible, es mejor usar columnas con una pequeña cantidad de bytes). para crear índices (consulte la creación de índices), no cree un índice único para campos con un número limitado de valores, como campos de género

5, mejore 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? Considere configurar el tamaño de la memoria virtual en 1,5 veces la memoria física instalada en su computadora. Si tiene capacidades adicionales de búsqueda de texto completo instaladas y planea ejecutar el servicio Microsoft Search para realizar consultas e indexación de texto completo, considere configurar la memoria virtual. tamaño a 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 a 1,5 veces la memoria física (la mitad de la configuración del tamaño de la memoria virtual).

7. 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, si se utiliza el procesamiento en paralelo o en serie, MsSQL evalúa y selecciona automáticamente Una sola tarea se divide en varias tareas. Por ejemplo, retrasar la clasificación de consultas, unirse, escanear y las cláusulas GROUP BY se ejecutan al mismo tiempo. SQL SERVER determina el nivel paralelo óptimo en función de la carga del sistema. La CPU es más adecuada para el procesamiento paralelo. Sin embargo, las operaciones de actualización Actualizar, Insertar y Eliminar no se pueden procesar en paralelo.

8. -La indexación de texto consume espacio como 'a%' usa un índice como '%a' y no usa un índice como '% a%' Al realizar consultas, el tiempo de consulta es proporcional a la longitud total del valor del campo, por lo que el tipo CHAR. no se puede utilizar, pero VARCHAR. Para valores de campo largos, cree un índice de texto completo.

9, Separación del servidor DB y del servidor de aplicaciones OLTP y OLAP

10. La vista se puede utilizar para implementar una federación de servidores de bases de datos. Una federación es un grupo de servidores administrados por separado, pero cooperan entre sí para compartir la carga de procesamiento del sistema. Este es un mecanismo para formar un servidor de bases de datos federado mediante la partición de datos para expandirse. un grupo de servidores para satisfacer las necesidades de procesamiento de un sitio web grande de varios niveles. Para obtener más información, consulte Diseño de servidores de bases de datos federados (consulte el archivo de ayuda de SQL 'Vista de partición').

Figura ')

a, antes de implementar la vista particionada, la tabla debe dividirse horizontalmente

b Después de crear la tabla miembro, defina una vista particionada distribuida en cada servidor miembro y. cada vista tiene 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 cada una allí. hay solo una tabla miembro y una vista de partición distribuida en cada servidor. La ubicación de los datos es transparente para la aplicación.

11, reconstruya el índice DBCC REINDEX, DBCC INDEXDEFRAG, reduzca los datos y registre DBCC SHRINKDB. , DBCC SHRINKFILE Configure registros de reducción automática para bases de datos grandes, no configure el crecimiento automático de la base de datos. Se enumeran a continuación muchos puntos comunes. : Primero, DBMS maneja los planes de consulta. El proceso es el siguiente:

1. Verifique el léxico y la sintaxis de la declaración de consulta.

2. DBMS

3. Optimizador Realice optimización algebraica y optimización de rutas de acceso

4. Genere planes de consulta a partir del módulo precompilado

5 y luego envíelos al sistema. para procesar y ejecutar en el momento apropiado

6, finalmente devolver el resultado 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 8K (8060). bytes y 8 páginas son una partición, que se almacena de acuerdo con el árbol B.

12. La diferencia entre confirmar y revertir: revertir todas las cosas allí. no es necesario escribir cosas en SQL dinámico. Si desea escribir, escríbalo afuera, como por ejemplo: comenzar tran exec(@s) confirmar trans o escribir SQL dinámico como una función o procedimiento almacenado.

13. Utilice la cláusula Where en la instrucción Select de la consulta para limitar el número de filas devueltas para evitar el escaneo de la tabla. Si se devuelven datos innecesarios, los recursos de E/S del servidor aumentan la carga de la red y reducen el rendimiento. la tabla es grande, bloquee la tabla durante el escaneo de la tabla y prohíba que otras conexiones accedan a la tabla, lo que tendrá graves consecuencias.

14, SQL La declaración del comentario no tiene impacto en la ejecución15. ya que consume muchos recursos, si se requiere la ejecución fila por fila, intente utilizar tecnología sin cursor, como: bucles en el cliente, uso de tablas temporales, variables de tabla, uso de subconsultas, uso de declaraciones de casos, etc. Los cursores se pueden clasificar según las opciones de búsqueda que admite: FETCH NEXT debe buscar filas en orden desde la primera hasta la última fila. FETCH NEXT es la única operación de búsqueda permitida y es el método predeterminado. La capacidad de desplazamiento puede extraer aleatoriamente cualquier fila en cualquier lugar. en el cursor La tecnología del cursor se ha vuelto muy poderosa en SQL2000 y su propósito es admitir bucles. Hay cuatro opciones de concurrencia READ_ONLY: No permitir actualizaciones mediante el posicionamiento del cursor (Actualizar) y no hay bloqueos en las filas que lo componen. el conjunto de resultados OPTIMISTIC CON valoresS: El control de concurrencia optimista es una parte estándar de la teoría del control de transacciones. El control de concurrencia optimista se utiliza en situaciones en las que, entre abrir el cursor y actualizar la fila, solo existe una pequeña posibilidad de que un segundo usuario actualice. una fila. Cuando se abre un cursor con esta opción, ningún bloqueo controla las filas dentro de él, lo que ayudará a maximizar su potencia de procesamiento. Si un usuario intenta modificar una fila, este 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 sabe que alguien más ha actualizado la fila y devuelve un error. Si los valores son los mismos, el servidor simplemente realiza la modificación. OPTIMISTIC CON VERSIONAMIENTO DE FILAS: Esta opción de control de concurrencia optimista se basa en el control de versiones de filas, la tabla debe tener algún tipo de identificador de versión, que el servidor puede usar para determinar si la fila se lee o si hay cambios después de la. 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. Cada vez que una fila con una columna de marca de tiempo se modifica de alguna manera, SQL Server primero almacena el valor @@DBTS actual en la columna de marca de tiempo y luego lo incrementa. valor de @@DBTS Si una tabla tiene una columna de marca de tiempo, la marca de tiempo se registrará 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 la aplicación requiere simultaneidad optimista basada en versiones de fila para una tabla sin una columna de marca de tiempo, el cursor se basa de manera predeterminada en números. control de concurrencia optimista. BLOQUEOS DE DESPLAZAMIENTO Esta opción implementa un control de concurrencia pesimista. En el control de concurrencia pesimista, la aplicación intentará bloquear las filas de la base de datos al leerlas en el conjunto de resultados del cursor. la aplicación intentará bloquear las filas de la base de datos. Coloque un bloqueo de actualización en la transacción. 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 cuando se recupere la siguiente fila. El bloqueo del cursor se eliminará si el cursor se abre fuera de la transacción, se recuperará la siguiente fila. El bloqueo se elimina cuando se ingresa una fila. Por lo tanto, siempre que un usuario requiera un control de concurrencia pesimista total, el cursor debe abrirse dentro de un. 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 las Filas. Sin embargo, un bloqueo de actualización no impide que otras tareas lean. la fila, a menos que la segunda tarea también solicite una lectura con un bloqueo de actualización. El bloqueo de desplazamiento se basa en la instrucción Select definida en el cursor. Estas opciones de concurrencia del cursor pueden generar bloqueos de desplazamiento basados ​​en la sugerencia de bloqueo especificada en el bloqueo de desplazamiento. se adquiere en cada fila al recuperar y se mantiene hasta la siguiente recuperación o hasta que se cierra el cursor, lo que ocurra primero. En la siguiente recuperación, las filas del servidor en la nueva recuperación adquieren el bloqueo de desplazamiento y liberan el bloqueo de desplazamiento en las filas de la. recuperación anterior El bloqueo de desplazamiento es independiente del bloqueo de transacción y se puede mantener hasta después de una operación de confirmación o reversión. Si la opción para cerrar el cursor al confirmar está desactivada, COMMIT La declaración no cierra ningún cursor abierto y el bloqueo de desplazamiento. se retiene hasta después de la confirmación para mantener el aislamiento de los datos obtenidos. El tipo de bloqueo de desplazamiento adquirido depende de las opciones de simultaneidad del cursor y de la sugerencia de bloqueo en la instrucción Select del cursor. Solo la sugerencia de bloqueo Leer valor optimista Bloqueo de versiones de fila optimista Silencio Desbloqueado Desbloqueado Desbloqueado. Actualizar NOLOCK Desbloqueado Desbloqueado Desbloqueado Desbloqueado HOLDLOCK ***Disfrutar*Disfrutar*Disfrutar Actualizar UPDLOCK Error Actualizar Actualizar Actualizar TABLOCKX Error Desbloquear Desbloquear Bloqueado Actualizar Otro Desbloqueado Desbloqueado Desbloqueado Actualizar *Especificando el mensaje NOLOCK hará que la tabla especificada con el mensaje sea de solo lectura en el cursor.

16. Utilice Profiler para rastrear la consulta y obtener la información requerida para el tiempo de consulta, descubra el problema de SQL para optimizar el índice.

17. Preste atención a la diferencia entre UNion y UNion all. UNION all es bueno

18. Preste atención al uso de DISTINCT. No lo use cuando sea necesario. consulta. No hay problema con registros duplicados en la consulta

19. No devuelva filas y columnas innecesarias al realizar la consulta

20, use sp_configure 'límite de costo del gobernador de consultas' o SET QUERY_GOVERNOR_COST_LIMIT. para limitar los recursos consumidos por la consulta. Cuando los recursos consumidos por la consulta de evaluación exceden el límite, el servidor cancela automáticamente la consulta y la elimina antes de que establezca el tiempo de bloqueo. Utilice select top 100/10 Percent para limitar el número de filas devueltas por el usuario o SET ROWCOUNT para limitar las filas de operaciones

22. Antes de SQL2000, generalmente no usaba las siguientes palabras: "IS NULL". , "<>", "!=", "!>", "!<", "NO", "NO EXISTE", "NO EN", "NO LI

KE" y "LIKE '%500'", porque no usan índices sino solo escaneos de tablas. No agregue funciones a los nombres de las columnas en la cláusula Where, como Convertir, subcadena, etc. Si debe usar funciones, crear columnas calculadas Cree un índice para reemplazarlo. También puede cambiar el método de escritura: Donde SUBSTRING(firstname,1,1) = 'm' a Where firstname como 'm%' (escaneo de índice). y el nombre de la columna. Y el índice no se puede construir demasiado y demasiado grande. NOT IN escaneará la tabla varias veces, use EXISTS, NOT EXISTS, IN, LEFT OUTER JOIN, especialmente las combinaciones izquierdas, y Exists es más rápido que IN, y el El más lento NO es operación si el valor de la columna contiene valores nulos. Su índice no funcionaba antes, pero ahora el optimizador 2000 puede manejarlo. Lo mismo es que ES NULO, "NO", "NO EXISTE", "NO EN". puede optimizarlo y "<> "Aún no se puede optimizar y el índice no se puede utilizar.

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 representa el 80% de los recursos, nuestro enfoque de optimización está en estos lugares lentos.

24. etc., utilice una declaración de visualización para especificar el índice: Seleccione * FROM PersonMember (INDEX = IX_Title) Donde Processid IN ('Male', 'Female')

25, calcule previamente los resultados que se consultarán y colóquelos en la tabla, y luego seleccione al realizar la consulta. Esto era lo más importante antes de SQL7.0. Por ejemplo, el cálculo de la tarifa de hospitalización.

26. índices apropiados.

27. Existe un principio en las bases de datos de que la distancia entre el código y los datos es Cuanto más cerca, mejor, por lo que se prefiere el valor predeterminado, seguido de las reglas, los desencadenantes y las restricciones (restricciones como las externas). claves, claves principales, CheckUNIQUE..., la longitud máxima de los tipos de datos, etc. son todas restricciones), y Procedimiento Esto no solo reduce el trabajo de mantenimiento, sino que también mejora la calidad del programa escrito y la ejecución. la velocidad es rápida.

28. Si desea insertar un valor binario grande en la columna Imagen, use un procedimiento almacenado. No use Insertar incrustado para insertar (no sé si JAVA lo hace). Porque esta aplicación El programa primero convierte el valor binario en una cadena (el doble de su tamaño) y, después de que el servidor recibe el carácter, lo convierte en un valor binario. Los procedimientos almacenados no tienen estas acciones: Método: crear el procedimiento p_insert como. inserte en los valores de la tabla (Fimage) (@image), llame a este procedimiento almacenado en primer plano para pasar parámetros binarios, por lo que la velocidad de procesamiento mejora significativamente.

29, Between es más rápido que IN en algunos casos y Between se pueden encontrar más rápido según el rango del índice. Puede ver la diferencia usando el optimizador de consultas. Seleccione * de chinoresume donde título en ('masculino','femenino') Seleccione * de chinoresume donde entre 'masculino' y '. "femenino" son iguales porque se compararán varias veces, por lo que a veces será más lento.

30. Cuando sea necesario, crear un índice en una tabla temporal global o local a veces puede aumentar la velocidad, pero. Este no es necesariamente el caso, porque el índice también consume muchos recursos. Su creación es la misma que la tabla real.

31. generar informes. Úselo solo cuando sea necesario usar cosas.

32. Usar OR Las oraciones se pueden descomponer en múltiples consultas y se pueden conectar múltiples consultas a través de UNION. Su velocidad solo está relacionada con si una. Se utiliza el índice. Si la consulta requiere un índice conjunto, UNION funcionará de manera más eficiente.

La oración no usa el índice, reescríbala en forma de UNION e intente hacer coincidir el índice. Una pregunta clave es si usar el índice.

33. ineficiente En comparación con las operaciones de vista Las operaciones directas en tablas son lentas, por lo que puede usar procedimientos almacenados en su lugar. En particular, no use vistas anidadas que aumentan la dificultad de encontrar datos originales. optimizado y almacenado en el servidor SQL que ya ha generado la planificación de consultas. Al recuperar datos de una sola tabla, no utilice vistas que apunten a varias tablas. Recupere directamente de la tabla o lea solo la vista que contiene esta tabla. se agregará y la consulta se verá afectada. Para acelerar las consultas de vista, MsSQL ha agregado la función de índice de vista.

34. en su lugar, se pueden realizar en el cliente. Agregan una sobrecarga adicional. Esto es lo mismo que UNION y UNION ALL.

seleccione los 20 principales ad.companyname,comid,position,ad.referenceid,worklocation, convert(. varchar(10),ad.postDate,120) as postDate1, año laboral, descripción del título FROM jobcn_query.dbo.COMPANYAD_query anuncio donde ID de referencia in('JCNAD00329667','JCNAD132168','JCNAD00337748','JCNAD00338345','JCNAD00333138',' JCNAD00303570 ','JCNAD003 03569','JCNAD00303568','JCNAD00306698' ,

'JCNAD00231935','JCNAD00231933','JCNAD00254567','JCNAD00254585','JCNAD00254608','J CNAD00254607','JCNAD00258524',

'JCNAD003321 33','JCNAD00268618' ,'JCNAD00279196','JCNAD00268613') orden por fecha posterior desc

35, en la lista de valores después de IN, ponga el valor que aparece con más frecuencia al principio y el valor que aparece con menos frecuencia al final, reduzca el número de juicios.

36. Al usar Seleccionar INTO, bloqueará las tablas del sistema (sysobjects, sysindexes, etc.) y bloquear el acceso de otras conexiones. Utilice declaraciones de declaración de visualización al crear tablas temporales, en lugar de seleccionar INTO. soltar la tabla t_lxh start tran select * into t_lxh from Chineseresume donde ——commit Seleccionar * de sysobjects en otra conexión. vea que Seleccionar INTO bloqueará la tabla del sistema y Crear tabla también bloqueará la tabla del sistema (independientemente de si es una tabla temporal o una tabla del sistema). ¡¡¡Así que no la use dentro de una cosa!!! es una tabla temporal que se usa con frecuencia, use una tabla real o una variable de tabla temporal.

37, generalmente Las filas redundantes se pueden eliminar antes de las cláusulas GROUP BY HAVING, así que trate de no usarlas para eliminar filas. Su orden de ejecución debe ser el siguiente: la cláusula Where de select selecciona todas las filas adecuadas, y Group By se usa para agrupar filas estadísticas, y la cláusula "Having" se usa para eliminar grupos redundantes. De esta manera, el costo de Group. Al "tener" es pequeño y la consulta es rápida. Agrupar y tener grandes filas de datos consume recursos. Si el propósito de Group BY no incluye el cálculo, sino solo la agrupación, eso.

¿Es más rápido usar Distinct?

38. Actualizar varios registros a la vez es más rápido que actualizar un registro a la vez varias veces, lo que significa que el procesamiento por lotes es mejor.

39. Utilice menos tablas temporales y utilice los resultados tanto como sea posible. Las variables de tipo Set y Table se pueden usar para reemplazarlas. Las variables de tipo table son mejores que las tablas temporales.

40 En SQL2000, los campos calculados se pueden indexar. y las condiciones que deben cumplirse son las siguientes:

a, la expresión de los campos calculados es cierta

b, no se puede utilizar en tipos de datos TEXT, Ntext, Image

c, se deben configurar las siguientes opciones ANSI_NULLS = ON, ANSI_PADDINGS = ON, …….

41. Intente poner el trabajo de procesamiento de datos en el servidor para reducir la sobrecarga de la red, como por ejemplo. utilizando procedimientos almacenados Los procedimientos almacenados se compilan, optimizan y organizan en un plan de ejecución. Las declaraciones SQL almacenadas en la base de datos son una colección de lenguajes de flujo de control, que por supuesto son rápidos y se ejecutan repetidamente. SQL dinámico puede usar almacenamiento temporal. Los procedimientos y los procedimientos (tablas temporales) se colocan en Tempdb. En el pasado, debido a que SQL SERVER no admite cálculos matemáticos complejos, tenemos que poner este trabajo en otras capas y aumentar la sobrecarga de la red. SQL2000 admite UDF. admite cálculos matemáticos complejos. El valor de retorno de la función no debe ser demasiado grande, lo que provocará una gran sobrecarga. Las funciones definidas por el usuario que se ejecutan como cursores consumen muchos recursos. Si se devuelven resultados grandes, utilice procedimientos almacenados. /p>

42. No uses la misma función una y otra vez en una oración, lo que desperdicia recursos. Pon los resultados en Es más rápido llamarla en una variable.

43. COUNT(*) es ineficiente. Intente cambiar su método de escritura, mientras que EXISTS es más rápido. Preste también atención a la diferencia: seleccione count(Field of null) de la tabla. Es diferente del valor de retorno de select count(Field of NOT). null) de la tabla!!!

44. Cuando el servidor tenga suficiente memoria, configure el número de subprocesos = el número máximo de conexiones + 5, lo que puede maximizar el efecto; grupo de SQL Server para resolver el problema estableciendo el número de subprocesos

45, de acuerdo con un determinado Acceda a sus tablas en orden. Si bloquea la tabla A primero y luego bloquea la tabla B, deben bloquearse en este orden en todos los procedimientos almacenados. Si (accidentalmente) bloquea primero en un almacenado. El procedimiento de la Tabla B y luego bloquear la Tabla A puede provocar un punto muerto. Si la secuencia de bloqueo no se diseña en detalle de antemano, el punto muerto es difícil de detectar

46, supervise la respuesta a través del rendimiento de SQL Server. Monitorear la carga de hardware Memoria: Fallos de página/contador de segundos Si el valor aumenta ocasionalmente, indica que hay subprocesos compitiendo por la memoria en ese momento. Si es continuamente alto, la memoria puede ser el cuello de botella.

Proceso:

1,% El tiempo de DPC se refiere al porcentaje del procesador utilizado en llamadas a procedimiento diferido (DPC) para recibir y brindar servicios durante el intervalo de muestra (DPC se ejecuta en un intervalo con una prioridad más baja). que el intervalo estándar). Debido a que DPC se ejecuta en modo privilegiado, el tiempo de DPC se calcula como un porcentaje del porcentaje de tiempo privilegiado. Estos tiempos se calculan por separado y no forman parte del cálculo total del intervalo. Este total muestra el tiempo de ocupación promedio como. un porcentaje del tiempo de la instancia.

2,%Procesador Si el valor del contador de tiempo continúa excediendo el 95%, indica que el cuello de botella es la CPU. Puede considerar agregar un procesador o cambiar a un procesador más rápido. .

3.% de tiempo privilegiado se refiere al porcentaje de tiempo del procesador no inactivo en modo privilegiado (el modo privilegiado es un modo de procesamiento diseñado para los componentes del sistema operativo y la manipulación de controladores de hardware. Permite el acceso directo a. el hardware y toda la memoria El otro modo es el modo de usuario, que es un modo de procesamiento para aplicaciones. Un modelo de procesamiento limitado diseñado para programas, subsistemas de entorno y subsistemas enteros.

El porcentaje de tiempo privilegiado incluye interrupciones de servicio de tiempo y DPC. Una proporción alta de tiempo privilegiado puede deberse a una gran cantidad de intervalos generados por un dispositivo fallido. se muestra como parte del tiempo de muestra.

4,% de tiempo de usuario indica operaciones de base de datos que consumen CPU, como ordenar, ejecutar funciones agregadas, etc. Si el valor es muy alto, considere agregar índices e intente Utilice métodos simples como la unión de tablas y la división horizontal de tablas grandes para reducir este valor. Disco físico: Contador de longitud de cola de disco actual El valor no debe exceder entre 1,5 y 2 veces la cantidad de discos. Para mejorar el rendimiento, agregue más discos. SQLServer: contador de índice de aciertos de caché Cuanto mayor sea el valor, mejor. Si continúa siendo inferior al 80%, debería considerar aumentar la memoria. Tenga en cuenta que el valor de este parámetro se ha acumulado desde que se inició SQL Server. período de tiempo, este valor no reflejará el valor actual del sistema.

47, analice seleccionar emp_name del empleado donde salario > 3000. En esta declaración, si el salario es de tipo Flotante, el optimizador lo hará. optimícelo para Convertir (flotante, 3000), porque 3000 es un número entero. Deberíamos usar 3000.0 al programar en lugar de esperar a que el DBMS realice la conversión en tiempo de ejecución.

48, ​​la asociación de la consulta es la misma que el orden de escritura

seleccione a.personMemberID, * de chinoresume a,personmember b donde personMemberID = b.referenceid y a.personMemberID = 'JCNNPRH39681' (A = B, B = 'número')

seleccione a.personMemberID, * del currículum chino a,personmember b donde a.personMemberID = b.referenceid y a.personMemberID = 'JCNPRH39681' y b.referenceid = ' JCNPRH39681' (A = B ,B = 'Número', A = 'Número')

seleccione a.personMemberID, * del currículum chino a,personmember b donde b.referenceid = 'JCNPRH39681' y a.personMemberID = 'JCNPRH39681' (B = 'número', A = 'número')