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

نام تاپیک: مسئله صفجه بندی جداول پارتیشن بندی شده

  1. #1
    کاربر دائمی آواتار manager
    تاریخ عضویت
    شهریور 1384
    محل زندگی
    Z
    سن
    38
    پست
    771

    مسئله صفجه بندی جداول پارتیشن بندی شده

    سلام

    من یک جدول دارم که رکورد های خیلی زیادی داره، اومدم این جدول رو در Sql Server 2005 پارتیشن بندی کردم مثلا بر اساس تاریخ ثبت هر رکورد. تعداد رکوردها خیلی زیاده و کاربر برای مشاهده لیست اونها نیاز داره صفحه بندی انجام بده و یا جستجو کنه. خوب سوال اینجاست که من برای صفحه بندی از همون روش Two Bit استفاده می کنم یعنی ابتدا همه رکورد ها با Row_Number می ریزم تو یه جدول موقتی بعد از اون جدول موقتی که شاید یک میلیون رکورد توش باشه !!!! 50 تاش رو می کشم بیرون به کاربر لعنتی نشون بدم.. حجم محاسبات و عملیات خیلی بالاست و این من رو عذاب می ده..

    جالب اینجاست که نمی تونم هیچ کشی انجام بدم چون هر کاربر با کاربر دیگه لیستی که بر اساس اون مرتب سازی می کنه و یک صفحه رو انتخاب می کنه فرق می کنه ! کل رکوردها رو هم که نمی تونم بهش نشون بدم ! صفحه بندی "فقط جلو فقط عقب" هم نمی تونم چون کاربر برای رسیدن به صفحه 50 پیرش در می آد ..

    آهان یه مطلب دیگه اینکه این جدول رو من پارتیشن بندی کردم این یعنی همه ی پارتیشن ها خونده می شن هر دفعه چون برای شماره گذاری ردیف ها نیازه که اون ها هم شماره بخورن این یعنی فاجعه !

    راه حلی ندارین ؟

  2. #2

    نقل قول: مسئله صفجه بندی جداول پارتیشن بندی شده

    سلام دوست عزیزم،
    پارتیشن بندی کمکی به واکشی اطلاعات (در خصوص Paging) انجام نمیده. اساسا کاربرد Partitioning چیز دیگه است.
    سوال من اینه که در جدول موقتی، چند فیلد رو نگه میدارین، و آیا ایندکسی روی این جدول وجود داره؟

  3. #3
    کاربر دائمی آواتار manager
    تاریخ عضویت
    شهریور 1384
    محل زندگی
    Z
    سن
    38
    پست
    771

    نقل قول: مسئله صفجه بندی جداول پارتیشن بندی شده

    نقل قول نوشته شده توسط AminSobati مشاهده تاپیک
    سلام دوست عزیزم،
    پارتیشن بندی کمکی به واکشی اطلاعات (در خصوص Paging) انجام نمیده. اساسا کاربرد Partitioning چیز دیگه است.
    سوال من اینه که در جدول موقتی، چند فیلد رو نگه میدارین، و آیا ایندکسی روی این جدول وجود داره؟
    سلام امین جان
    بله من خودم می دونم پارتیشن بندی کمکی به صفحه بندی نمی کنه، اتفاقا می گم صفحه بندی روی جداول پارتیشن بندی شده احتمالا خیلی کند عمل می کنه چون باید همه پارتیشن ها رو برای ارضای یک درخواست صفحه درگیر کنه و این زیاد خوب نیست و موضوع پارتیشن بندی بله حق با شماست چیز دیگه ای هست.
    تو جدول موقتی که عمرش فقط به اندازه پاسخ یه یک درخواست صفحه است تمام فیلدهای جدول اصلی رو نگه می دارم چون وقتی می خوام اطلاعات یک صفحه رو واکشی کنم از یک جستجوی دیگه رو جدول اصلی جلوگیری می کنم. روی جدول موقتی بعید می دونم اصلا بشه ایندکس تعریف کرد البته منظورم متغیر جدولی هستشا نه جدول موقتی. چون اگر بخوام به ازای هر درخواست صفحه یک جدول موقتی درست کنم دیگه SQL فکر کنم بترکه...
    جریان پارتیشن ها و صفحه بندی رو از این حیث با هم اشاره کردم چون وقتی می خوام یک صفحه رو استخراج کنم دیگه پارتیشن بندی اثری روی سرعت بازیابی نداره چون گزارش استخراج صفحه باید تمام رکوردها رو ارزیابی کنه ...

  4. #4

    نقل قول: مسئله صفجه بندی جداول پارتیشن بندی شده

    سلام.
    پیشنهاد میکنم این تاپیک رو هم نگاه کنید.
    بعد شما چرا یک کار رو دوبار انجام میدید؟ چرا همون ابتدا با استفاده از ROw_Number فقط 50 رکورد مورد نیاز کاربر رو بهش نمایش نمیدید؟

  5. #5

    نقل قول: مسئله صفجه بندی جداول پارتیشن بندی شده

    استفاده از Row_Number خوبه اما در واکشی رکوردها چندان صرفه جو نیست. چطوره این نکات رو اعمال و نتیجه رو بررسی کنید:
    - در جدول موقتی، فیلد Identity رو PK کنید
    - به جای تمام فیلدهای جدول اصلی، فقط PK رو در جدول موقتی INSERT کنید و موقع واکشی صفحه مورد نظر، جدول موقتی رو با جدول اصلی JOIN کنید
    - اگر جدول موقتی با # ساخته بشه، میتونین ایندکس روی فیلدی که نماینده PK جدول اصلی هست بسازین

  6. #6

    نقل قول: مسئله صفجه بندی جداول پارتیشن بندی شده

    اگه اشتباه نکنم برای پیاده سازی نظرات پست قبلی این کد میتونه استفاده بشه:

    create table #temp
    (nbr integer identity not null primary key,
    pk integer not null)

    insert into #temp(pk)
    select primary_key
    from table name
    order by your_wanted_order

    select T.*
    from tablename T
    join #temp Te
    on T.primarykey = Te.pk
    and Te.nbr between fist_value and last_value
    آخرین ویرایش به وسیله محمد سلیم آبادی : یک شنبه 18 اردیبهشت 1390 در 20:47 عصر
    وبلاگ من (Advanced SQL Querying)

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

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

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