View Full Version : افزايش سرعت برنامه
DlphIran
دوشنبه 23 شهریور 1388, 18:01 عصر
سلام
براي افزايش سرعت نرم افزار قبلا صحبت شده منم جستجو كردم اما دو تا سوال دارم
در ضمن من از adoquery استفاده مي كنم و بانك اطلاعاتيم اس كيو ال سرور 2000 هست .
1- چطوري ميشه فقط 10 ركورد اخري بانك اطلاعاتي رو در ديبي گريد نمايش داد ، تو تاپيك هاي قبلي صحبت از نمايش چند ركورد اول بانك اطلاعاتي بوده با دستور TOP، اما من مي خوام آخرين
10 ركورد وارد شده را نمايش بده ،البته بدون استفاده از دستور where و در ضمن مي خوام با فشار دادن دكمه هاي جهت دار بالا و پايين صفحه كليد در ديبي گريد به ازاي هر بار زدن دكمه 10 تاي ديگه از انتهاي بانك اطلاعاتي رو نمايش بده .
2- راه ديگه اي كه گفته شده براي افزايش سرعت برنامه اين بوده كه در موقع استفاده از دستور SELECT تعداد محدود از فيلد ها رو جلوي عنوان SELECTبياريم .
مي خوام بدونم اگه در برنامه و در يه فرم خاص لازم باشه در زمان زدن يه دكمه به 10 فيلد نياز داشته باشيم و زدن دكمه ديگر به 10 فيلد ديگر از جدول نياز داشته باشيم ، آيا استفاده از SELECT هاي پشت سرهم و دنباله اون باز و بسته كردن جدول مشكلي ايجاد نمي كنه ؟
يه توضيح هم بدم كه فيلدهاي جدول من 70 تا هست كه يكيش فيلد ايميج هستش و پيش بيني ميشه حداقلِ حداقل اطلاعات ذخيره شده به 100000 تا برسه . بخاطر همين مي خوام از حالا به فكر افزايش سرعت برنامه باشم. با تشكر از دوستان
lord_viper
چهارشنبه 25 شهریور 1388, 00:10 صبح
فکر کنم این موضوع رو تو بخش sqlserver پیگیری کنین بهتر باشه
تاپیک در مورد بهینه کردن queryو جداول برای بالا بردن سرعت select تو اون بخش زیاد هست
و در مورد استفاده از disablecontrol هم جناب کشاورز تو یه تاپیکی توضیح دادن که حتما به شما کمک میکنه
mehdimdp
چهارشنبه 25 شهریور 1388, 02:28 صبح
سلام
1- چطوري ميشه فقط 10 ركورد اخري بانك اطلاعاتي رو در ديبي گريد نمايش داد ، تو تاپيك هاي قبلي صحبت از نمايش چند ركورد اول بانك اطلاعاتي بوده با دستور TOP، اما من مي خوام آخرين
10 ركورد وارد شده را نمايش بده ،البته بدون استفاده از دستور where
من جاي شما باشم
براي اينكه بخوام 10ركورد آخري رو نمايش بدم ميام در آخر كوئري ، اونو بر حسب تاريخ يا id به صورت نزولي (آخر به اول )مرتب مي كنم.
اوقت 10تاي اول ، ميشند 10تاي آخر
DlphIran
چهارشنبه 25 شهریور 1388, 09:05 صبح
ممنون از راهنمايي شما
فقط بابت مرتب سازي بصورت نزولي از چه دستوري بايد استفاده كنم ،چون من فقط اين دستور رو بلدم.:
adoquery1.sort:= 'o1'
l
o1 نام فيلد
Hamid.Kad
چهارشنبه 25 شهریور 1388, 13:49 عصر
عبارت order by روی توی راهنمای پایگاه دادتون جستجو کنید
Select * from Table1 order by field1 asc
Select * from Table1 order by field1 desc
اولی بصورت صعودی و دومی بصورت نزولی بر حسب فیلد1 مرتب می کنند
DlphIran
پنج شنبه 26 شهریور 1388, 10:29 صبح
مرثي مشكل اوليم حل شد
2- راه ديگه اي كه گفته شده براي افزايش سرعت برنامه اين بوده كه در موقع استفاده از دستور SELECT تعداد محدودي از فيلد ها رو جلوي عنوان SELECTبياريم .
حالا يه سوال كلي بپرسم
اول اينكه بعضي مواقع من لازم دارم به 10تا از فيلدا و بعضي مواقع ديگه به 10 تا ديگه فيلد نيازدارم
دوم نمايش 10 ركورد اولي و با زدن يه دكمه مرتب 10 ديگه رو اضافه بر اون 10 ركورد قبلي نشون بده .
آيا استفاده مكرر از دستور Top كه باعث بازو بسته شده Adoquery ميشه، يا استفاده از دستور select براي نمايش محدود فيلدها (البته با زدن يه دكمه نياز به محدوده ديگري از فيلدها داريم)
سرعت پايين نمياد؟ چون من ميخوام از هر دو روش تو جاهاي مختلف برنامه ام استفاده كنم .
حمیدرضاصادقیان
پنج شنبه 26 شهریور 1388, 12:02 عصر
من جاي شما باشم
براي اينكه بخوام 10ركورد آخري رو نمايش بدم ميام در آخر كوئري ، اونو بر حسب تاريخ يا id به صورت نزولي (آخر به اول )مرتب مي كنم.
اوقت 10تاي اول ، ميشند 10تاي آخر
سلام.جسارتا این روش چندان صحیح نیست. زیرا شما وقتی order by desc میکنید عملا کل جدول Scan میشه و دیگه تفاوتی نمیکنه چند رکورد رو شما بخوانید. به این روشی که دوستمون میخواد کار کنن page loading میگن که میتونید به لینک زیر مراجعه کنید.
http://www.codeproject.com/KB/database/SQLServer2KPagingSorting.aspx
http://weblogs.sqlteam.com/jeffs/archive/2004/03/22/sql-server-2000-paging.aspx
DlphIran
پنج شنبه 26 شهریور 1388, 17:28 عصر
ممنون آقاي صادقيان ،درسته
من رفتم توي اون سايت كدهاش رو خط به خط خوندم،بيشترش رو متوجه شدم اما اينكه توي كدوم قسمت برنامه درج كنم،نمي دونم يعني انگليسيم هم يكمي ضعيفه.
البته من كدهاي سايت اولي رو بيشتر متوجه شدم ولي نمي دونم كجا بايد درج كنم ؟
تغييردادن روي كدها كه لازم نيست؟
DlphIran
دوشنبه 30 شهریور 1388, 13:59 عصر
آقاي صادقيان جواب نمي دين ،
دوستان ،كس ديگه اي درباره page loading اطلاعاتي نداره ؟
moradian
سه شنبه 14 مهر 1388, 14:23 عصر
select * from
(select top 10 * from
(select * from Customers order by CustCode DESC))
order by CustCode
امیدوارم مقبول افتد
DlphIran
سه شنبه 14 مهر 1388, 16:15 عصر
دوست عزيز اين گونه روشها توي محيط شبكه با حجم بالاي اطلاعات مشكل پيش مياره ،در آينده هم اگه بخواي از اين روش در برنامه هاي online استفاده كني از نظر سرعت صد درصد مشكل داري
دستور order مياد و يه بار جدول رو پيمايش ميكنه ،من مي خوام كه بدون پيمايش جدول به 10 ركورد آخر جدول دسترسي داشته باشم.
اينو تو يه برنامه بيمه اي ديدم ،توي ديبي گريد حدود 15 ركورد آخر قابل مشاهده بود ، وقتي با دكمه هاي جهت دار بالا يا پايين روي اين ديبي گريد حركت مي كردي وقتي به انتها يا ابتداي ليست مي رسيدي با يكبار فشار دادن دكمه هاي جهت دار بالا يا پايين 5 ركورد ديگر نمايش داده مي شدن اگر از روي اين 5 ركورد هم مي گذشتي و دوباره دكمه جهت دار رو ميزدي 5 ركورد ديگر به سرعت به ليست درون ديبي گريد افزوده مي شدند .
ظاهرا به اين روش گفته ميشه page loading البته به قول آقاي صادقيان .
كسي اطلاعاتي در اين باره نداره؟
merced
سه شنبه 14 مهر 1388, 18:42 عصر
دقیقاً Page Loading هست کاری که همین سایت هم انجام میده . ولی اگه کد رو بخونبد باز هم دستور داخلی Select همه رکورد ها رو Select و بعد Order میکنه و فقط مزیتش اینه که شما می فهمید الان در کدوم صفحه از چند صفحه هستید
برای مسئله سرعت از ایندکس گذاری مناسب استفاده کنید.
moradian
چهارشنبه 22 مهر 1388, 14:08 عصر
با نظر بنده اگه این پردازش ها در سمت سرور باشه هیچ مشکلی از لحاظ سرعت نداره اون هم دستورات SQL
با یک GO!
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.