PDA

View Full Version : تفاوت فیلترکردن Query با نوشتن Query مجدد



siavash270
شنبه 30 دی 1385, 08:01 صبح
سلام خدمت همه اساتید
من در فرمی که DBGrid قرار گرفته یک Edit گذاشتم که کاربر با وارد کردن هر حرف اطلاعات اون DBGrid بر اساس یک فیلد خاص فیلتر میشه. و برای اینکار هم از خاصیت فیلتر Query استفاده کردم ولی این سوال برای من پیش اومده که اگه قرار باشه با یک بانک SQL Server در محیط شبکه و با تعدا رکورد زیاد اینکار انجام بشه اصولا استفاده از فیلتر سریع تر جواب میده یا اینکه برای هر کاراکتر وارد شده یک Query اجرا بشه؟
از دوستانی که در این زمینه تجربه دارند خواهش میکنم راهنمایی کنند.

mehdi_mohamadi
شنبه 30 دی 1385, 08:07 صبح
من قبلا برای onchange یک edit هر بار query را باز نویسی کردم. خوب هم جواب میده.

siavash270
شنبه 30 دی 1385, 08:22 صبح
من قبلا برای onchange یک edit هر بار query را باز نویسی کردم. خوب هم جواب میده.

ممنون از پاسخ شما دوست عزیز در جواب دادن هر دو روش شکی نیست ولی خیلی دوست دارم بدونم که چه دلیلی داشتید که از فیلتر استفاده نکردید و Query رو بازنویسی میکردید؟
سوال: عملیات فیلتر کردن اطلاعات Query روی کلاینت انجام میشه یا مثل یک Query برای سرور ارسال میشه؟ ( اگه مورد اول درست باشه پس سرعت فیلتر کردن خیلی بیشتر از نوشتن Query مجدد هستش و اگه مورد دوم درست باشه فکر میکنم Query سرعت بیشتر داره. )
بقیه دوستان هم اگه نظری دارند خواهش میکنم کمک کنند این بحث به نتیجه برسه.

MNosouhi
شنبه 30 دی 1385, 12:51 عصر
اینکه فیلتر بهتره یا کوئری بستگی به نوع برنامه شما داره و نمیشه دقیقا گفت کدوم بهتره ،برنامه نویس خودش باید تصمیم بگیره که کجا از چی استفاده کنه . روال کار به این صورته که شما وقتی از فیلتر استفاده می کنی همه اطلاعات از پایگاه داده دریافت شده و سپس عملیات فیلترینگ روی داده ها صورت می گیره ، در کوئری عملیات فیلترینگ داده ها توسط پایگاه داده انجام شده و نتیجه کوئری رو به عنوان جواب بر می گردونه .
پیشنهاد : اگر برنامه شما تحت شبکه نیست : خیلی مهم نیست که از کدوم استفاده کنی ، اگر چه باز هم پیشنهاد میشه که از کوئری استفاده کنید تا اگر در آینده تصمیم به تحت شبکه کردن برنامه بگیرید مشکل زیادی نداشته باشید. در مواقعی که سرعت مهم است ، بهتره که از فیلتر استفاده کنی ( البته اینکه فیلتر سرعت بالاتری داره یه تجربه شخصیه )
اگر برنامه شما تحت شبکه است : سعی کن از فیلتر استفاده نکنی ، چون ترافیک شبکه رو بالا میبره و وقتی حجم اطلاعات بالا بره کم شدن سرعت برنامت مشهود میشه.

siavash270
شنبه 30 دی 1385, 15:10 عصر
اینکه فیلتر بهتره یا کوئری بستگی به نوع برنامه شما داره و نمیشه دقیقا گفت کدوم بهتره ،برنامه نویس خودش باید تصمیم بگیره که کجا از چی استفاده کنه . روال کار به این صورته که شما وقتی از فیلتر استفاده می کنی همه اطلاعات از پایگاه داده دریافت شده و سپس عملیات فیلترینگ روی داده ها صورت می گیره ، در کوئری عملیات فیلترینگ داده ها توسط پایگاه داده انجام شده و نتیجه کوئری رو به عنوان جواب بر می گردونه .
پیشنهاد : اگر برنامه شما تحت شبکه نیست : خیلی مهم نیست که از کدوم استفاده کنی ، اگر چه باز هم پیشنهاد میشه که از کوئری استفاده کنید تا اگر در آینده تصمیم به تحت شبکه کردن برنامه بگیرید مشکل زیادی نداشته باشید. در مواقعی که سرعت مهم است ، بهتره که از فیلتر استفاده کنی ( البته اینکه فیلتر سرعت بالاتری داره یه تجربه شخصیه )
اگر برنامه شما تحت شبکه است : سعی کن از فیلتر استفاده نکنی ، چون ترافیک شبکه رو بالا میبره و وقتی حجم اطلاعات بالا بره کم شدن سرعت برنامت مشهود میشه.

از پاسخ کامل و خوب شما بی نهایت ممنونم.
از اونجایی که من تقریبا تازه کار هستم فکر میکنم اگه کمی بیشتر در مورد کاری که می خوام انجام بدم توضیح بدم شاید شما بتونید منو بیشتر راهنمایی کنید.
این پروژه ای که دارم تحت شبکه هستش و به همین خاطر سرعت برام خیلی مهمه. من 4 سطح کاربری دارم که اطلاعات DBGrid روی هر فرم با توجه به نوع کاربر به 4 شکل مختلف توسط ADOQuery ایجاد میشند و در هر DBGrid چند Table مختلف با هم inner join میشند. بنابراین 4 Query مختلف در هر فرم دارم که با توجه به کاربری که لاگین کرده یکی از اونها اجرا میشه. حالا میخوام کاربر سیستم بر روی اطلاعاتی که مربوط به خودش هست اجازه فیلتر کردن بر اساس یک ستون خاص رو داشته باشه. به عنوان مثال بر روی فیلد نام با وارد کردن هر حرف رکوردهایی که نام آنها شامل اون حرف هست نمایش داده بشه و اگه هیچ کاراکتری وارد نشد همون اطلاعات اصلی نمایش داده بشند.
خوب حالا با این توضیحات به نظر شما برای اینکه این امکان رو کاربر داشته باشه باز هم باید از Query استفاده کنم که در اینصورت 4 تا Query باید نوشته بشه با شرط هایی که در ابتدا برای هر کاربر تعریف شده بعلاوه شرط های جدیدی که فیلتر کردن اطلاعات لازم است یا بهتر است از Filter خود Query استفاده کنم؟