نمایش نتایج 1 تا 10 از 10

نام تاپیک: افزایش سرعت ثبت اطلاعات در بانک

  1. #1
    کاربر دائمی آواتار hamedjim
    تاریخ عضویت
    مهر 1393
    محل زندگی
    تهران
    پست
    140

    Question افزایش سرعت ثبت اطلاعات در بانک

    سلام به همه.

    لطفا می تونید معادل کد ساده زیر رو با استفاده از SP که برای درج حجم زیادی از اطلاعات در بانک اطلاعاتی استفاده شده، برای من بنویسید؟
    در ساده ترین حالت فرض بر این هست که از ADO استفاده میشه و قرار هست مثلا 10000 رکورد جدید اضافه بشه که فیلد ID اون همین شماره رکورد باشه. هدف هم صرفه جویی در زمان ذخیره سازی هست. ممنونم.

    with Qry do
    begin
    Lo:= 0;
    Hi:= 10000;
    for K := Lo to Hi do
    begin
    Close;
    SQL.Clear;
    SQL.Text := 'SELECT * FROM tblOutput WHERE ID=:P1';
    Parameters.ParamByName('P1').Value := K;
    Open;
    Insert;
    FieldByName('ID').AsInteger:= K;
    Post;
    end;
    Free;
    end;



  2. #2

    نقل قول: افزایش سرعت ثبت اطلاعات در بانک

    نیازی به اس پی نیست، کوئری شما مشکل داره و باید اصلاح بشه، تمام این کار ها رو می تونید فقط با یک دستور که تو کوئری می گذارید اجرا کنید.
    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840

    دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/


    نرم افزار پخش مویرگی

  3. #3
    کاربر دائمی آواتار hamedjim
    تاریخ عضویت
    مهر 1393
    محل زندگی
    تهران
    پست
    140

    نقل قول: افزایش سرعت ثبت اطلاعات در بانک

    نقل قول نوشته شده توسط یوسف زالی مشاهده تاپیک
    تمام این کار ها رو می تونید فقط با یک دستور که تو کوئری می گذارید اجرا کنید.
    آقا یوسف میشه دستورش رو لطف کنید؟

  4. #4

    نقل قول: افزایش سرعت ثبت اطلاعات در بانک

    کدش به این تالار مرتبط نیست و باید در تالار اس کیو ال دنبالش باشید.
    صرفا جهت اطلاع:
    برای چنین مواقعی که اینسرت گروهی دارید دستور زیر کارتون رو راه می ندازه:

    insert into TBL
    select a
    from TBL2
    where ..


    چنانچه شماره ردیف لازم دارید از توابع ردیف مثل row_number یا rank می تونید استفاده کنید، در بدترین حالت کیس مد نظر شما، کار با یک دستور تمام است و در صورت نداشتن تریگر یا کانسترینت روی جدول، زدن ده هزار ردیف در اون تو کسری از ثانیه انجام می شه.
    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840

    دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/


    نرم افزار پخش مویرگی

  5. #5
    کاربر دائمی آواتار hamedjim
    تاریخ عضویت
    مهر 1393
    محل زندگی
    تهران
    پست
    140

    نقل قول: افزایش سرعت ثبت اطلاعات در بانک

    ممنونم. من از INSERT INTO استفاده کرده بودم. فکر می کردم روش بهتری هم هست که بشه استفاده کرد.
    حالا که مطرح شد، میشه این دو تا کد رو نگاه کنی و نطر بدی؟ چون خودم از زمان اجرای این بخش ها راضی نیستم:


    with Qry do
    begin
    Close;
    SQL.Clear;
    SQL.Text := 'INSERT INTO tblOutput (FTime) VALUES (:FTime)';
    Lo:= 0;
    Hi:= MusicTime;
    for K := Lo to Hi do
    begin
    Parameters.ParamByName('FTime').Value := K;
    ExecSQL;
    end;
    Free;
    end;

    و

    with Qry do
    begin
    Lo:= 1020;
    Hi:= 11200;
    FName:= 'F' + IntToStr(I); {Get Field Name}
    Close;
    SQL.Clear;
    SQL.Text := 'UPDATE tblOutput SET ' + FName + '=:P1 WHERE FTime=:P0';
    for K := Lo to Hi do
    begin
    Parameters.ParamByName('P0').Value := K;
    Parameters.ParamByName('P1').Value := FValue[K] + FColor[K];
    ExecSQL;
    end;
    Free;
    end;

  6. #6

    نقل قول: افزایش سرعت ثبت اطلاعات در بانک

    من فرصت بهینه کردن کد رو ندارم متاسفانه، اگر براتون خیلی فورس نیست صبر کنید تا شنبه انشاالله.
    همین دو تا پیام رو هم لابلای کارا میام می گذارم.
    با احترام -
    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840

    دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/


    نرم افزار پخش مویرگی

  7. #7
    کاربر دائمی آواتار hamedjim
    تاریخ عضویت
    مهر 1393
    محل زندگی
    تهران
    پست
    140

    نقل قول: افزایش سرعت ثبت اطلاعات در بانک

    نقل قول نوشته شده توسط یوسف زالی مشاهده تاپیک
    من فرصت بهینه کردن کد رو ندارم متاسفانه، اگر براتون خیلی فورس نیست صبر کنید تا شنبه انشاالله.
    همین دو تا پیام رو هم لابلای کارا میام می گذارم.
    با احترام -
    ممنون از لطفتون.
    عجله که هست. ولی برای یادگیری، خوشحال میشم هر زمان تونستی کد رو اصلاح کنی. متشکرم

  8. #8
    کاربر دائمی آواتار hamedjim
    تاریخ عضویت
    مهر 1393
    محل زندگی
    تهران
    پست
    140

    نقل قول: افزایش سرعت ثبت اطلاعات در بانک

    آقا یوسف عزیز،
    هر زمان فرصت کردی ما منتظر نکات آموزشی شما در مورد بهینه کردن این کد ها هستیم.

  9. #9

    نقل قول: افزایش سرعت ثبت اطلاعات در بانک

    اول: در خصوص ساخت شمارنده در اس کیو ال،
    روش ریکرسیو:
    declare @from int = 0
    declare @to int = 5


    ;with CTE as (
    select @from K
    union all
    select K +1
    from CTE
    where K < @to
    )
    select *
    from CTE
    option (maxrecursion 0)


    روش استفاده از جداول بزرگ:

    declare @from int = 0
    declare @to int = 5


    select top (@to -@from +1) ROW_NUMBER() over(order by (select 1)) +@from -1 K
    from sys.objects


    یا هر جدول دیگه ای که دارید، یا حتی کراس جوین یه جدول روی خودش، این روش برای تعداد کوچیک خوبه

    روش آیدنتیتی:



    declare @from int = 0
    declare @to int = 5


    declare @T table(K int identity(1, 1))
    insert into @T DEFAULT VALUES


    WHILE SCOPE_IDENTITY() < 100
    INSERT @T DEFAULT VALUES


    select *
    from @T


    روش های دیگه ای هم هست برای ساخت سکوئنس،
    حالا شما سکوئنس رو دارید، مثلا در جدول T
    می تونید اگر این کارها رو زیاد انجام می دید، یک جدول تحت همین نام بطور دائم درست کنید و ازش استفاده کنید. البته باز هم بستگی داره به پرفورمنس شما.

    INSERT INTO tblOutput (FTime) select K from T

    مثلا همین کد با استفاده از روش اول:
    declare @from int = 0
    declare @to int = 5


    ;with CTE as (
    select @from K
    union all
    select K +1
    from CTE
    where K < @to
    )
    INSERT INTO tblOutput (FTime)
    select K
    from CTE
    option (maxrecursion 0)


    برای قسمت دوم هم فرض می گیرم که FValue و FColor اسامی فیلد های جدول T2 باشند، که ID فیلدی در اونه که ترتیب ایندکس ها توشه (در حال حاضر فکر کنم آرایه گرفتید)

    declare @from int = 0
    declare @to int = 5


    ;with CTE as (
    select @from K
    union all
    select K +1
    from CTE
    where K < @to
    )
    UPDATE T
    SET FName = T2.FValue + T2.FColor
    from tblOutput T
    join T2 on T.FTime = T2.ID
    join CTE on T.FTime = K
    option (maxrecursion 0)


    چیزی شبیه به این می شه.
    فیلد ها رو خودتون جایگذاری کنید.
    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840

    دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/


    نرم افزار پخش مویرگی

  10. #10
    کاربر دائمی آواتار hamedjim
    تاریخ عضویت
    مهر 1393
    محل زندگی
    تهران
    پست
    140

    نقل قول: افزایش سرعت ثبت اطلاعات در بانک

    بسیار عالی
    ممنونم

تاپیک های مشابه

  1. سوال: تغییر اتوماتیک تاریخ و ساعت سیستم به تاریخ و ساعت روز
    نوشته شده توسط mohammad_2039 در بخش C#‎‎
    پاسخ: 3
    آخرین پست: شنبه 16 مهر 1390, 09:11 صبح
  2. پاسخ: 7
    آخرین پست: یک شنبه 03 مهر 1390, 11:32 صبح
  3. پاسخ: 2
    آخرین پست: یک شنبه 06 بهمن 1387, 14:26 عصر
  4. سوال: انتخاب نوع فيلد ساعت در ديتابيس و عمليات بر روي ساعت در برنامه
    نوشته شده توسط rezaiy.ali در بخش ASP.NET Web Forms
    پاسخ: 1
    آخرین پست: یک شنبه 06 بهمن 1387, 10:09 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •