Pregunta

¿Cómo puede esta consulta se optimiza para los encuestadores:

SELECT * FROM Customers

Table Customers
customerId int - has index on it
customerName, etc

SqlReader que devuelve un conjunto de clientes serán leídos en demanda de una manera empadronador. Si bien se puede volver enormes conjuntos de datos que se pueden leer / consumidos lentamente en un bucle foreach, cada otra consulta en la misma mesa se encontrará con una gran cantidad de contiendas. ¿Cómo puede esto ser optimizado / evitado? Cursores o seleccionando en tablas temporales?

Aquí está un ejemplo de código que va a causar una gran cantidad de argumentos (I perfiladas y los números de hecho quedar mal):

public void DumpCustomers()
{
    Thread thread = new Thread(AccessCustomers);
    thread.Start();

    // GetCustomers returns enumerator with yield return; big # of customers 
    foreach (Customer customer in GetCustomers())  
    {
       Console.WriteLine(customer.CustomerName);
       System.Threading.Thread.Sleep(200);
    }
    thread.Abort();
}

public void AccessCustomers()
{
   while (true)
   {
      Console.WriteLine(GetCustomer("Zoidberg").CustomerName);
      Thread.Sleep(100);
   }
}


P.S. También necesitaré para optimizar esto en MySQL.

¿Fue útil?

Solución

1) ¿Es necesario el peralte '*' se especifica las columnas.

2) Utilizar nombres de varias partes dbo.tablename.fieldname - Esto acelera hacia arriba

3) tratar una sugerencia de bloqueo con (nolock) o (READPAST)

4) ¿Cuál es el perfil IO? ¿El SQL tiene que tirar de los datos desde el disco cada vez que se ejecuta?

5) ¿Usted se encuentra uno de los núcleos en el servidor max fuera mientras que el otro está inactivo?

6) Caché él! Hasta que no sepa que ha habido un cambio- vuelva a cargarlo.

Me he quedado sin ideas ..

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top