PDA

View Full Version : افزایش سرعت بازیابی اطلاعات از دیتابیس



adabyron
چهارشنبه 29 فروردین 1386, 14:39 عصر
با سلام. من در برنامم از دیتابیس sql server برای ذخیره اطلاعات استفاده میکنم و یک جدول دارم که شامل 254 هزار و ... رکورد هست و که باید همه این رکوردهارو در یک دیتاگرید بازیابی کنم اما خیلی طول میکشه تقریبا 10 دقیقه . آیا روش بهتری برای بازیابی سریعتر اطلاعات وجود داره . من از کد زیر استفاده میکنم

string strCon = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;password=;Initial Catalog=DatabaseName;Data Source=127.0.0.1"";
SqlConnection conn = new SqlConnection(strCon);
SqlDataAdapter da = new SqlDataAdapter("Select * From TblName ", conn);
DataSet ds = new DataSet();
ds.Clear();
da.Fill(ds, "TblName");
dataGridView1.DataBindings.Add(new Binding("DataSource", ds, "TblName"));

hdv212
چهارشنبه 29 فروردین 1386, 17:17 عصر
برای افزایش سرعت، راههای زیادی وجود داره :
1. میتونی از Stored Procedure استفاده کنی.
2. میتونی به جای * برای انتخاب همه ی فیلدهای جدولت، فقط فیلدهایی رو که نیاز داری Select کنی
3. اگر زیاد با دستور Select سروکار داری میتونی روی فیلدهات Index بذاری.

mostafatech
شنبه 01 اردیبهشت 1386, 21:39 عصر
من در یکی از تجربه هام چند تا جدول داشتم که خود SQL پیغام خطای Timeout میداد. اما این مشکل حل شد. کافیه به جای استفاده از نسخه ی Personal از نسخه ی Professional استفاده کنی. سرعت پردازش اطلاعات در نسخه Professional چندین برابره.

یه نکته ی دیگه اینکه دیتاگرید های ویندوز و ASP.net محدودیت تعداد رکورد دارند. اگر میخواید تمام رکورد ها رو یجا نمایش بدی باید از کامپوننت های دیگه ای که مخصوص این کار هستند استفاده کنی. اگر نه که میتونی براش Paging بزاری.

linux
یک شنبه 02 اردیبهشت 1386, 02:37 صبح
از روش آسنکرون برای گرفتن داده ها استفاده کنید

hdv212
یک شنبه 02 اردیبهشت 1386, 04:04 صبح
اگر شما صرفا میخواهید رکورد ها رو نمایش بدید و تغییر در کار نیست میتونید از DataReader برای لود کردن اطلاهات استفاده کنید که دارای سرعت خیلی بالاتری از DataSet است.

babi_wd
یک شنبه 02 اردیبهشت 1386, 04:35 صبح
مجبور نیستی همرو یه جا لود کنی
از صفحه بندی استفاده کن
تو هر صفحه به تعداد از دیتا بیس بکش بیرون
از کشینگ هم میتونی واسه بهینه سازی استفاده کنی

babi_wd
یک شنبه 02 اردیبهشت 1386, 04:38 صبح
پیشنهاد آسنکرون هم بهش اضافه کنی عالی میشه

adabyron
یک شنبه 02 اردیبهشت 1386, 13:12 عصر
ممنونم از راهنماییتون میشه بگین منظورتون از آسنکرون چیه؟ من فقط توی مدار منطقی این کلمه رو شیدم

hdv212
یک شنبه 02 اردیبهشت 1386, 14:41 عصر
آسنکرون یا asynchronous یعنی غیر همزمان.
با Execute کردن به روش Asynchronous دیگه برنامه تون منتظر نمیمونه تا داده ها لود بشن، و در زمانی که داده ها دارن لود میشن، شما میتونید کارهای دیگه انجام بدید چون برنامه تون میتونه به رویداد ها پاسخ بده، ولی این روش هیچ افزایش سرعتی نداره ولی برای لود کردن داده های بزرگ بهترین گزینه س.

شکارچی
پنج شنبه 03 خرداد 1386, 02:52 صبح
دوست عزیز،
اگر حدود بین 200 تا 300 هزار رکورد را می خواهید از SQL Server و فقط از یک جدول بگیرید(رابطه ای وجود نداشته باشد)، از هر روشی که استفاده کنید(ِمثلا Data Adapter یا Data Reader) بیشتر از 30 ثانیه طول نمی کشد. اگر بیشتر طول کشید احتمالا بخاطر مسائل دیگری مثل سرعت پایین سرور یا حافظه کم یا تعدد سرویس هاست که باز هم بعید است بیشتر از یک دقیقه شود. من احتمال می دهم که شما هنگام load کردن اطلاعات از حافظه به Grid دچار مشکل شده باشید(ابتدا اطلاعات از SQL Server به حافظه Client آورده می شوند و بعد از خافظه client به view انتقال می یابند). البته من از Data Grid برای 500 هزار رکورد استفاده کرده ام و مشکل سرعت نداشتم. ولی اگر از listview استفاده می کنید، listview خیلی کند است.

once4ever
پنج شنبه 03 خرداد 1386, 09:50 صبح
3. اگر زیاد با دستور Select سروکار داری میتونی روی فیلدهات Index بذاری.
یکی اینو توضیح بده (روی حالت چند کاربره)

SYSMAN
پنج شنبه 03 خرداد 1386, 22:36 عصر
یکی اینو توضیح بده (روی حالت چند کاربره)

full text index (http://barnamenevis.org/forum/showthread.php?t=37045&highlight=indexing)
کار با جداول خیلی بزرگ (http://barnamenevis.org/forum/showthread.php?t=62066&highlight=indexing)
جستجو روی فیلدهای Text در یک دیتابیس بزرگ (http://barnamenevis.org/forum/showthread.php?t=66576&highlight=indexing)