Am o mare problema cu un sql a carui executie dureaza prea mult, asa ca vin cu 2 intrebari capitale la dumneavoastra. Mentionez ca foloesc VB din vs2005 CU SQL Server 2005 Developper edition
1) Cum setez timeout-ul unei conexiuni sql ? Pe net am gasit urmatoarele metode, niciuna nu rezolva problema:
a) setarea Connection LifeTime sau/si Connection Timeout din stringul de conectare:
dim sqlConn as new sqlconnection("Connection Lifetime=3000; Connection Timeout=3000");
sqlConn.Open();
dim adapter as SqlDataadapter = new sqlDataAdapter("SELECT....",sqlConn);
dim ds as new DataSet;
adapter.Fill(ds,"ddd");
b) folosirea "sp_configure" in SQL server management studio:
sp_configure 'remote query timeout',3000
go
reconfigure with override
go
si
sp_configure 'remote login timeout',3000
go
reconfigure with override
go
c) in acelas minunat soft, la Tools->Options->Designers->Table and Database Designers->Transaction time-out after si modificarea valorii de acolo
2) cum pot selecta n linii dintr-un select incepand cu linia m (echivalentul lui LIMIT de la mySQL) ?. Din pacate rezultatul selectului e destul de mare(2,5 mil de linii) si solutia ar fi paginarea acestuia. 100 de linii cat are o pagina se intorc mult mai repede decat cele 2,5 mil. Ce am gasit pe net urmeaza:
a) adapter.Fill(ds,index_start,numar_campuri,dataset). E ok metoda pentru un numar mic de linii. E mult mai simpla decat celelalte, dar, din pacate eficienta ei e mica. Sql-ul se executa, sunt intoarse cele 2,5 milioane de linii, apoi sunt alese liniile care intereseaza
b) SELECT * FROM [tabel] TOP n WHERE [idtabel] NOT IN (SELECT [idtabel] FROM [tabel] TOP m]. Merge foarte bine pentru primele linii si foarte greu pentru ultimele linii (e evident si de ce)
c) WITH sql AS
{
SELECT *,ROW_NUMBER() OVER (ORDER BY [idtabel] as 'RowNumber' FROM [tabel]
}
SELECT * FROM sql WHERE (RowNumber BETWEEN n AND m)
merge un pic mai greu pentru primele linii, dar ceva mai bine pentru ultimele decat ultima metoda. Totusi dureaza intre 20 si 40 de secunde. Dezavantaj mare: merge foarte greu cu JOIN
bineinteles am indexat baza, s-a observat o reducere la jumate a timpului de asteptare... dar am nevoie mai mult.
Va rog, daca se poate, sa ma ajutati
Mii de multumiri