Tema: Idomumo delei: kodel ADO komanda letesne?
Autorius: Meff
Data: 2010-05-10 18:59:25
Sveiki. Įdomumo dėlei (M$ nelabai kažką radau, o StackOverflow aiškina apie konvertavimą į konkretų parametro tipą).
Yra tokia SQL komanda

DELETE FROM Detail WHERE MasterUUID = '8d66bfb5-f638-4e30-ac27-328078122122'

šita komanda suveikia per < 1 sekundę, jei leidžiama iš Management Studio. O jei leidžiama per .Net kodą:

SqlCommand cmd = new SqlCommand(string.Format("DELETE FROM Detail WHERE MasterUUID = '{0}'", masterUUID)); 

ji suveikia per ~20 sekundžių
Tačiau jei ji yra va tokia:

SqlCommand cmd = new SqlCommand(string.Format("DELETE FROM Detail WHERE MasterUUID = @MasterUUID"); 
SqlParameter masterUUIDParameter = new SqlParameter("MasterUUID", masterUUID); 
cmd.Parameters.Add(masterUUIDParameter);

arba parametras pagaminamas taip:

SqlParameter masterUUIDParameter = new SqlParameter("MasterUUID", DBType.Uniqueidentifier); 
masterUUIDParameter.Value = masterUUID;

(konstruktoriuje nurodomas patametro tipas)
tada ta pati komanda vykdoma ~2 minutes...
Kaip manot, ką .Net'as padaro ir kaip tokių nesąmonių išvengti? Jau ne pirmą kartą su tokia nesąmone susiduriu. Ypač aktualu, kai trinami dideli duomenų kiekiai.

Indeksas ant MasterUUID kažkiek padeda, bet proporcijos vis tiek išlieka tos pačios.

.Net 2.0