PDA

View Full Version : کدام دستور صحیح تر و کدام سریعتر است



essa_61
دوشنبه 07 خرداد 1386, 12:42 عصر
میخواستم بدونم کدام دستور سریعتر است و کدام سریعتر چرا ؟؟(فرض بانک یک میلیون رکورد دارد)
1




SqlConnection conn = newSqlConnection("??") ;
SqlDataAdapter da = newSqlDataAdapter("select * from", conn);
DataSet ds = newDataSet();
conn.Open();
da.Fill(ds, "kol");
conn.Close();




2





SqlConnection conn = newSqlConnection("??") ;
SqlDataAdapter da = newSqlDataAdapter();
SqlCommand comm = conn.CreateCommand();
comm.CommandText = "select *";
da.SelectCommand = comm;
DataSet ds = newDataSet();
conn.Open();
da.Fill(ds, "kol");
conn.Close();




3

از طریق store proc که در خود sqlserver ساخته شود

Keramatifar
دوشنبه 07 خرداد 1386, 13:24 عصر
دوست عزیز
بهترین حالت اینه که از StoredProcedure استفاده بکنی

HAIdle
دوشنبه 07 خرداد 1386, 13:27 عصر
چیزی که به نظر می رسه از لحاظ سرعت اجرا تفاوت چندانی ندارند (شاید چند نانوثانیه!)
چون کاری که انجام می دند اصولا یکیه.در واقع تا اونجا که من می دونم دستور کد 1 که تبدیل به چند خط کد در دومی شده فقط برای راحتی برنامه نویسه و عملا هنطام اجرا همان چند خط دومی اجرا می شه.
store procedure هم برای افزایش قابلیت خواندن برنامه است و از لحاظ سرعت فرقی نداره. البته تا اونجا که من می دونم!
از لحاظ صول برنامه نویسی هم بهترین کار stored procedure است.

اَرژنگ
دوشنبه 07 خرداد 1386, 13:34 عصر
اهر دو روش روشهایه اشتباهی هستند.
مشکل اصلی چه است؟ اگر واقعاً میخواهید ۱ میلیون رکورد را نمایش بدید از داتا ریدر استفاده کنید.

essa_61
دوشنبه 07 خرداد 1386, 13:41 عصر
هیچ چیز خاصی نیست فقط می خوام بدونم باید از کدوم استفاده کنم
دیگه نظری نیست پس بجز store proc مورد 1 و 2 با هم فرقی ندارن ؟؟؟؟

اَرژنگ
دوشنبه 07 خرداد 1386, 14:36 عصر
هیچ چیز خاصی نیست فقط می خوام بدونم باید از کدوم استفاده کنم
دیگه نظری نیست پس بجز store proc مورد 1 و 2 با هم فرقی ندارن ؟؟؟؟
هیچ کدام روش درست نیست، استورد پروسیجر برایه اینکار نیست.
از ویو استفاده کنید با داتا ردیدر.

essa_61
دوشنبه 07 خرداد 1386, 14:47 عصر
عزیزم من میخام اطلاعات رو بریزم توی دیتا ست میشه بگید با ریدر چطور این کارو بکنم ؟؟؟؟؟؟؟

essa_61
دوشنبه 07 خرداد 1386, 14:50 عصر
عزیزم من میخوام اطلاعات رو بریزم توی دیتا ست میشه بهم بگید چطور با ریدر این کارو بکنم ؟؟؟؟

خب من توی هر 3 تا نوشتم دیتا ست رو پر کردم

شکارچی
دوشنبه 07 خرداد 1386, 15:53 عصر
از لحاظ سرعت هیچ فرقی نداره. استفاده از datareader هم از لحاظ سرعت تفاوت آنچنانی با استفاده از dataadapter و dataset نداره(من روی 5 میلیون رکورد و اوراکل تست کردم).

استفاده از store procedure هم توی این حالت اصلا کارایی نداره و در حالت ذخیره سازی اطلاعات و بروز آوری یا حذف استفاده داره.

استفاده از view هم فقط برای یک جدول (بدون در نظر گرفتن سورت و فیلتر) تاثیری در سرعت نداره.

در ضمن استفاده از store procedure برای برنامه های client/server به نظر من فقط load سرور رو زیاد می کنه. من شخصا همه عملیات رو روی client انجام میدم.

hdv212
دوشنبه 07 خرداد 1386, 17:15 عصر
اول اینکه بایستی شما در جدولت، index ایجاد کنی (ایندکس برای دسترسی سریع بع اطلاعات ساخته شده)، بعد با توجه به اینکه شما میخواهید تغییراتی در جدول اعمال کنید، بهتره از sp استفاده کنید.(تا میتونید از sp استفاده کنید)

essa_61
دوشنبه 07 خرداد 1386, 17:30 عصر
چرا store proc بهتر از بقیه است خب اونم کل بانک رو میاره توی حافظه ؟؟؟ یا اینکه خود sql server با stroe proc بهتر کار میکنه ؟
کسی میدونه دقیقا مکانیزم کار این دستورات چطوری است ؟

PC2st
دوشنبه 07 خرداد 1386, 18:38 عصر
کسی میدونه دقیقا مکانیزم کار این دستورات چطوری است ؟
تا این اندازه میدونم که بهتره دستورات SQL ائی که مکررا بکار گرفته میشوند را بصورت stored procedure ذخیره کنیم، چون پروسیجرهای ذخیره شده، کدهای خود را با سرعت بیشتری اجرا میکنند به نسبت زمانی که دستورات از خارج دریافت شده باشه. فکر نمیکنم برای یک خط دستور مثل SELECT که فقط بخواهیم یکی دوبار آنرا اجرا کنیم، احتیاجی به stored procedure باشه!!..!

اَرژنگ
دوشنبه 07 خرداد 1386, 19:14 عصر
چرا store proc بهتر از بقیه است خب اونم کل بانک رو میاره توی حافظه ؟؟؟ یا اینکه خود sql server با stroe proc بهتر کار میکنه ؟
کسی میدونه دقیقا مکانیزم کار این دستورات چطوری است ؟
منظور از اینکه که استورد پروسیجر کل بانک را میاره در حافظه چیه؟ دلیل اینکه کل بانک میاد در حافظه این است که داتاست را پر میکنید، ۵ میلیون رکورد را ریختن در داتاست تا جایی که من میدونم کاره درستی نیست.
در پست اول از سلکت استفاده میکنید، اگر برایه گرفتن رپورت اینکار را میکنید از ویو و داتا ریدر استفاده کنید.
استفاده از استورد پروسیجر معمولاْ کار درستی است ولی در این مسعله به کار نمیاد.
البته که استفاده از داتاست برایه ۵ میلیون رکورد به حافظه فشار میاره.