View Full Version : سرعت بازیابی با افزایش رکورد ها بیشتر می شه؟
samprp
شنبه 07 اردیبهشت 1387, 15:09 عصر
سلام دوستان
نمی دونستم سوالم رو اینجا بزارم یا خب زبون های برنامه نویسی.شرمنده
من دارم یه برنامه می نویسیم و یه چیزی ذهنمو به خودش مشغول کرده.
در یه قسمتی از برنامه من تمامی مقادیر موجود رو از پایگاه داده می خونم و تو یه listview می ریزم (دلفی).
همین کار حدود 3 الی 4 ثانیه ای طول می کشه (با حدود 5 رکورد)
می خوام بدونم اگه پایگاه داده در آینده این 5 رکوردش شد 200 الی 300 رکورد اون وقت این برنامه 3 الی 4 ثانیش می شه 2 دقیقه یا بیشتر یا نه این جوری نیست.
همچنین یه جای دیگه من با استفاده از دستور SUM اس کیو ال یه مقادیر رو با هم جمع کرده و با یه SUM دیگه تو برنامه از هم کم می کنیم تا مقدار نهایی به دست بیاد . آیا در آینده که تعداد این رکورد ها بیشتر شدند برنامه من هم کند تر می شه و تا چه حد کند می شه.
ممنون می شم اگه راهنماییم کنید.
حمیدرضاصادقیان
شنبه 07 اردیبهشت 1387, 17:41 عصر
سلام.اگر با 5 رکورد 4 ثانیه طول میکشه حتما شما روشت رو اصلاح کن.چون یک مشکلی داره.مطمئنا وقتی برسه به 200 رکورد زمانت به 2 دقیقه میرسه که اصلا جالب نیست.
ایا لزومی داره همه داده ها رو در یک list view نمایش بدی؟
میتونی در select که مینویسی فقط فیلدهایی رو انتخاب کنی که واقعا نیاز داری.
شما روش کارت رو اینجا بنویس تا بشه خیلی بهتر نظر داد.
موفق باشید.
samprp
شنبه 07 اردیبهشت 1387, 18:23 عصر
ممنون از توجهتون.
کدی که اینجا گذاشتم کدیه که قبل از اینکه اون فرمی که می خوام نمایش داده بشه , اجرا می شه و listview رو پر می کنه. (زبونم که دلفی است دیگه)
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add( 'SELECT stuff_name,stuff_CardNumber,'+
'CASE stuff_Store_1 WHEN 0 THEN '''' WHEN 1 THEN ''*'' END AS stuff_Store_1,'+
'CASE stuff_Store_2 WHEN 0 THEN '''' WHEN 1 THEN ''*'' END AS stuff_Store_2,'+
'CASE stuff_Store_3 WHEN 0 THEN '''' WHEN 1 THEN ''*'' END AS stuff_Store_3,'+
'CASE stuff_Store_4 WHEN 0 THEN '''' WHEN 1 THEN ''*'' END AS stuff_Store_4');
ADOQuery1.SQL.Add( 'FROM Stuff');
ADOQuery1.SQL.Add( 'ORDER BY stuff_CardNumber');
ADOQuery1.Open;
ListBox1.Items.Clear;
ADOQuery1.First;
while not ADOQuery1.Eof do
begin
with ListBox1.Items.Add do
begin
Caption:=ADOQuery1.FieldByName('stuff_name').AsStr ing;
SubItems.Add(ADOQuery1.FieldByName('stuff_CardNumb er').AsString);
SubItems.Add(ADOQuery1.FieldByName('stuff_Store_1' ).AsString);
SubItems.Add(ADOQuery1.FieldByName('stuff_Store_2' ).AsString);
SubItems.Add(ADOQuery1.FieldByName('stuff_Store_3' ).AsString);
SubItems.Add(ADOQuery1.FieldByName('stuff_Store_4' ).AsString);
end;
ADOQuery1.Next;
end;
ADOQuery1.Close;
samprp
شنبه 07 اردیبهشت 1387, 18:29 عصر
میتونی در select که مینویسی فقط فیلدهایی رو انتخاب کنی که واقعا نیاز داری.
شما روش کارت رو اینجا بنویس تا بشه خیلی بهتر نظر داد.
حمید جان راستی این منو یاد یه چیزی انداخت
تو ASP.net یه گرید ویویی داشت که می تونستی پیج پیج کنی مثلا اگه تعداد رکورد هات زیاد بود .
تو SQL می شه مثلا تعداد رکورد اول یا رکورد دوم رو برگردوند.
البته ببخشید برا این مورد باید یه تاپیک جدید باز می کردم ولی
ممنون می شم اگه در این مورد هم راهنماییم کنید
حمیدرضاصادقیان
شنبه 07 اردیبهشت 1387, 21:34 عصر
سلام.خود کوئری رو که در query analyzer اجرا میکنی چقدر طول میکشه؟ در ضمن Execution plan رو هم انتخاب کن و plan که برات میسازه اینجا قرار بده تا بهتر بشه کمک کرد.
در مورد سوال دومت باید بگم که بله امکانش هست.
میتونی به صورت زیر بنویسی
Select top 1 * from table1
اگر بعد از top 1 چیزی قرار ندی به صورت تعدادی محاسبه میکنه اگر بعد از اون کلمه percent رو قرار بدی به صورت درصدی اطلاعاتت رو میخونه.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.