Si está creando una tabla temporal dentro de un procedimiento almacenado y desea agregar un índice o dos, para mejorar el desempeño de cualesquiera otras declaraciones hechas en su contra, ¿cuál es el mejor enfoque? Sybase dice este:

«la tabla debe contener los datos cuando se crea el índice. Si usted crear la tabla temporal y crear el índice en una tabla vacía, Adaptive Server no crea de la columna de estadísticas tales como histogramas y densidades. Si usted insertar filas de datos después de crear el índice, el optimizador ha estadísticas incompletas.»

pero hace poco un colega mencionó que si puedo crear la tabla temporal y los índices en un procedimiento almacenado distinto al que realmente usa la tabla temporal, a continuación, Adaptive Server optimizador de se ser capaz de hacer uso de ellos.

Sobre todo, yo no soy un gran fan de la envoltura de los procedimientos que añaden poco valor, por lo que en realidad no he llegado a probar esta, pero pensé que tenía que poner la cuestión de por ahí, a ver si alguien tenía alguna otra enfoques o asesoramiento?

OriginalEl autor ninesided | 2008-09-10

3 Comentarios

  1. 7

    Un par de ideas:

    • Si su tabla temporal es tan grande que usted tiene para su indexación, entonces hay una mejor manera de resolver el problema?
    • Puede forzarlo a utilizar el índice (si está seguro de que el índice es la manera correcta de acceder a la tabla) por dar un optimizador de sugerencia, de la forma:

      SELECT * 
      FROM   #table (index idIndex) 
      WHERE  id = @id

    Si usted está interesado en consejos de rendimiento en general, he respondido un par de preguntas acerca de que en algún longitud de aquí:

    OriginalEl autor AJ.

  2. 3

    ¿Cuál es el problema con la adición de los índices después de poner los datos en la tabla temporal?

    Una cosa que usted debe ser consciente de la visibilidad del índice a otras instancias del procedimiento que podría estar en ejecución al mismo tiempo.

    Me gustaría añadir un guid para estos tipos de tablas temporales (y a los índices), para asegurarse de que nunca hay un conflicto. La otra ventaja de este enfoque es que usted podría simplemente hacer que la temp de la tabla de una mesa real.

    También, asegúrese de que usted va a necesitar para la consulta de datos en estas tablas temporales más de una vez durante la ejecución del procedimiento almacenado, de lo contrario el costo de la creación del índice será mayor que el beneficio para la seleccione.

    OriginalEl autor Eric Z Beard

  3. 1

    En Sybase si crea una tabla temporal y, a continuación, utilizar en un proc con el plan para la selección se construye mediante una estimación de 100 filas en la tabla. (El plan se construye cuando el procedimiento se inicia antes de que se rellenan las tablas.) Esto puede resultar en la tabla temporal se tabla escaneada, ya que es sólo «100 filas». Llamar a un otro proc causas de Sybase para construir el plan para la selección con el número de filas real, esto permite que el optimizador de escoger un mejor índice de uso. He visto significativo improvedments el uso de este enfoque, pero la prueba en su base de datos, como a veces no hay ninguna diferencia.

    OriginalEl autor

Dejar respuesta

Please enter your comment!
Please enter your name here