PDA

View Full Version : سوال: کنترل تعداد اطلاعات لود شده در دیتاگریدویو



دلتنگ اسمان
پنج شنبه 13 شهریور 1393, 18:39 عصر
با سلام
یه برنامه نوشتم که بر اساس کد ملی ثبت و فراخوانی میشه.
در فرم اصلی یه دیتاگریدویو گذاشتم که با اولین عددی که در تکس باکس زده میشود با دستور لایک در Textchange کلیه افرادی که کد ملی اونها با اون عدد شروع میشه رو در دیتا گریدویو نشون میده. و وقتی تعداد اعداد ورودی(ارقام کد ملی) در تکس باکس بیشتر میشه متعاقبا عمل فیلتر انجام میشه و محدودتر میشه. علت اینکه از این شیوه استفاده میکنم اینه که وقتی فردی قبلا ثبت شده باشه رو سریع نشون بده و دیگه کاربر بقیه ارقام کد ملی رو وارد نکنه و با کلیک بر روی نام فرد مورد نظر در دیتاگریدویو اطلاعات فرد در جای مشخص شده پر بشه.
حالا مشکل اینجاست که الان که اطلاعات بیشتر شده ، لود این اطلاعات کندتر و مشکل تر شده. به نظر شما چیکار باید بکنم؟

veniz2008
پنج شنبه 13 شهریور 1393, 20:01 عصر
سلام.
کار اصولی نیست از اولین رقم کد ملی بخواید این فیلتر رو انجام بدید از یک رقم مناسب شروع به فیلتر کنید تا تعداد رکوردهای کمتری برگشت داده بشه (مثلا از 5 یا 6 مین رقم).
گذشته بر علت بالا که اصلی ترین دلیل این مشکل می تونه باشه، علت لود سنگین اطلاعات ممکنه بخاطر چند مساله زیر هم باشه :
بر روی ستون کد ملی که احتمال زیاد کلید اصلی جدول هم نیست، ایندکس مناسبی تعریف نشده. باید یک Non Cluster Index بر روی این ستون تعریف کنید تا سرعت جستجو و پیدا کردن رکوردها براساس این فیلد افزایش پیدا کنه.
زمان برگشت دادن رکوردهای پیدا شده، احتمالا تمامی فیلدهای رکوردهای پیدا شده رو برگشت می دید که منابع زیادی رو از سیستم شما می گیره. می تونید فقط فیلد کد ملی رو برگشت و نمایش بدید.
بهتر بود اطلاعات بیشتری از جدولتون (میزان رکوردها ، تعداد فیلدها و ...) و کوئری Select ای که نوشتید قرار می دادید تا بهتر و ریزتر میشد راهنمایی کرد.
در کل به نظرم سناریوی خودتون رو در این زمینه اگر قدری تغییر بدید، سرعت به مراتب بیشتری رو تجربه خواهید کرد.

دلتنگ اسمان
شنبه 15 شهریور 1393, 10:19 صبح
سلام.

بر روی ستون کد ملی که احتمال زیاد کلید اصلی جدول هم نیست، ایندکس مناسبی تعریف نشده. باید یک Non Cluster Index بر روی این ستون تعریف کنید تا سرعت جستجو و پیدا کردن رکوردها براساس این فیلد افزایش پیدا کنه.

کد ملی کلید اصلیه.Non Cluster Index چیه و چطوری میشه تعریف کرد؟

veniz2008
شنبه 15 شهریور 1393, 12:19 عصر
کد ملی کلید اصلیه.Non Cluster Index چیه و چطوری میشه تعریف کرد؟
اگر کد ملی کلید هست، دیگه نیازی به Non Cluster Index نخواهید داشت چون بر روی کلید Cluster Index ساخته میشه که سرعت کار رو در هنگام جستجو براساس فیلد کد ملی بسیار بالا می بره.
Non Cluster برای زمانی مفید هست که بر روی یک (یا چند ستون) عملیات های جستجوی زیادی انجام میشه که برای افزایش سرعت جستجو از Non Cluster استفاده می کنن چون از نوع Cluster Index فقط میشه یکی داشت و لی از Non Cluster می تونید چندین مورد مختلف داشته باشید که البته تعداد این non Cluster ها هم تقزیبا قاعده مشخصی داره که نتیجه عکس رو نده.
مشکل شما قطعا بخاطر حجم زیاد اطلاعات برگشتی هست و البته باز هم هیچ اطلاعاتی در مورد جداول و کوئری هاتون نذاشتید و این تاپیک هم مثل اکثر تاپیک های برنامه نویس، کش دار و با کارایی کم خواهد بود. (نمی دونم چه اصراری وجود داره که کاربران اطلاعات قطره چکانی میدن و علاقه شدیدی به طولانی شدن تاپیک ها دارند).
موفق باشید.

دلتنگ اسمان
شنبه 15 شهریور 1393, 13:46 عصر
اگر کد ملی کلید هست، دیگه نیازی به Non Cluster Index نخواهید داشت چون بر روی کلید Cluster Index ساخته میشه که سرعت کار رو در هنگام جستجو براساس فیلد کد ملی بسیار بالا می بره.
Non Cluster برای زمانی مفید هست که بر روی یک (یا چند ستون) عملیات های جستجوی زیادی انجام میشه که برای افزایش سرعت جستجو از Non Cluster استفاده می کنن چون از نوع Cluster Index فقط میشه یکی داشت و لی از Non Cluster می تونید چندین مورد مختلف داشته باشید که البته تعداد این non Cluster ها هم تقزیبا قاعده مشخصی داره که نتیجه عکس رو نده.
مشکل شما قطعا بخاطر حجم زیاد اطلاعات برگشتی هست و البته باز هم هیچ اطلاعاتی در مورد جداول و کوئری هاتون نذاشتید و این تاپیک هم مثل اکثر تاپیک های برنامه نویس، کش دار و با کارایی کم خواهد بود. (نمی دونم چه اصراری وجود داره که کاربران اطلاعات قطره چکانی میدن و علاقه شدیدی به طولانی شدن تاپیک ها دارند).
موفق باشید.

این تصویر فرم اصلی . در قسمت کد ملی وقتی 0 رو میزنم کد ملی های مربوطه رو لود میکنه. اما با مکث!!
123134
این هم کد مربوط فراخوانی از دیتابیس که فقط از جدول personal فرخوانی میشه.تمامی موارد رو فراخوانی میکنم اما در دیتا گرید مواردی رو که لازم دارم نشون میدم.

SqlConnection con1 = new SqlConnection();
SqlCommand com1 = new SqlCommand();
con1.ConnectionString = "server=localhost;Integrated security=true;database=matab";
com1.Connection = con1;
con1.Open();

com1.CommandText = "SELECT * from personal WHERE (codemelli like '" + codmellitxt.Text.Trim() + "%') ";

com1.Connection = con1;
SqlDataAdapter sda = new SqlDataAdapter();
sda.SelectCommand = com1;
DataTable dt = new DataTable();
sda.Fill(dt);
con1.Close();

veniz2008
شنبه 15 شهریور 1393, 18:08 عصر
این تصویر فرم اصلی . در قسمت کد ملی وقتی 0 رو میزنم کد ملی های مربوطه رو لود میکنه. اما با مکث!!
123134
این هم کد مربوط فراخوانی از دیتابیس که فقط از جدول personal فرخوانی میشه.تمامی موارد رو فراخوانی میکنم اما در دیتا گرید مواردی رو که لازم دارم نشون میدم.

SqlConnection con1 = new SqlConnection();
SqlCommand com1 = new SqlCommand();
con1.ConnectionString = "server=localhost;Integrated security=true;database=matab";
com1.Connection = con1;
con1.Open();

com1.CommandText = "SELECT * from personal WHERE (codemelli like '" + codmellitxt.Text.Trim() + "%') ";

com1.Connection = con1;
SqlDataAdapter sda = new SqlDataAdapter();
sda.SelectCommand = com1;
DataTable dt = new DataTable();
sda.Fill(dt);
con1.Close();
در پست اولم همه چیز رو توضیح دادم ولی توجه نکردید.
در جستجوی اولی که با Like نوشتید نیازی نیست که همه فیلدها رو برگشت بدید (به جای * از نام فیلد کد ملی استفاده کنید).
شما تک فیلد (فقط کد ملی) برگشت بدید منابع کمتری رو می گیره یا همه فیلدهای جدول رو؟؟؟ این همه فیلدی که برگشت می دید، میاد تو رم سیستم قرار می گیره که علاوه بر زمانبر شدن عملیات، منابع زیادی رو هم از سیستم خودتون ( و در اینده سیستم مشتری) می گیره.
هر زمان که از بین کدهای ملی برگشت داده شده، موردی انتخاب شد، اونوقت همه اطلاعات اون کد ملی رو با یه select برگشت بدید.