فصل 3 پردازش پرس و جو: پیوستن به عملیات در PostgreSQL
در پایگاه داده های رابطه ای، ترکیب داده ها از چندین جدول توسط عملیات Join انجام می شود که عملکرد بسیار مهمی در این زمینه ایفا می کند. PostgreSQL انواع مختلفی از Join Operations را برای مراقبت از شرایط مختلف اتصال فراهم می کند. در این پست وبلاگ که خلاصه ای از کتاب The Internals of PostgreSQL، فصل 3 قسمت 3 است، در مورد سه عملیات اتصال مهم در PostgreSQL بحث خواهیم کرد:
پیوستن به حلقه تودرتو
ملحق شدن به حلقه تودرتوی Materialized
پیوستن به حلقه تودرتوی نمایه شده
پیوستن به حلقه تودرتو:
در PostgreSQL، اتصال حلقه تودرتو به عنوان عملیات اتصال اساسی عمل می کند، که قادر است با هر نوع شرایط اتصال، علیرغم اینکه تغییرات کارآمد بسیاری دیگر وجود دارد، مقابله کند.
اتصال حلقه تو در تو برای بسیاری از شرایط اتصال سازگار است و نیازی به عملیات راه اندازی ندارد. ضرب کردن اندازه جداول داخلی و خارجی به طور مستقیم با هزینه اجرا متناسب است. معادله هزینه اجرا هزینه های چندگانه، هزینه های CPU و هزینه های اسکن جداول داخلی و خارجی را در نظر می گیرد.
پیوستن به حلقه تودرتوی Materialized:
از آنجایی که اسکن کل جدول داخلی برای هر تاپل جداول بیرونی فرآیند گرانی است، PostgreSQL پیوند حلقه تودرتوی مادی شده را برای کاهش هزینه اسکن جمعی جدول داخلی ارائه می دهد. این تغییر تنها یک بار جدول داخلی را اسکن می کند و مجری تاپل های جدول داخلی را در فایل های work_memory یا موقت می نویسد.
- با حذف نیاز به اسکن جدول داخلی برای هر تاپل از میز بیرونی، اتصال حلقه تو در تو Materialized هزینه کلی اسکن را کاهش می دهد.
- قبل از انجام عملیات اتصال، مجری تاپل های جدول داخلی را در حافظه یا فایل های موقت می نویسد.
- ماژول ذخیره سازی چندگانه موقت برای مادیت کردن جداول، ایجاد دسته و موارد دیگر به صورت داخلی توسط PostgreSQL ارائه شده است.
- برای ارائه هزینه برآورد دقیق و دقیق کل عملیات اتصال، برآورد هزینه اتصال حلقه تودرتو متغییرهایی مانند هزینه راه اندازی، هزینه اجرا و هزینه اسکن مجدد را در بر می گیرد.
پیوستن به حلقه تودرتوی نمایه شده:
هنگامی که نمایه ای از جدول داخلی وجود دارد که جستجوی مستقیم تاپل ها را ارائه می دهد که شرایط اتصال را برای تطبیق هر تاپل از جدول بیرونی برآورده می کند، این تغییر به عنوان اتصال حلقه تو در تو نمایه شده شناخته می شود.
این تغییر فرآیندی را بر اساس یک حلقه از جدول بیرونی ارائه میدهد که عملکرد عملیات اتصال را افزایش میدهد.
- Indexed Nested Loop Join از جستجوی فهرست در تاپل های جدول داخلی به جای اسکن متوالی که شرط اتصال را برآورده می کند، استفاده می کند.
- پیوستن حلقه تودرتوی نمایهسازی شده عملکرد عملیات اتصال را افزایش میدهد زیرا مستقیماً به دنبال تاپلها میگردد، این امر هنگام مدیریت مجموعه دادههای بزرگ بسیار مهم است.
- تخمین هزینه پیوستن حلقه تودرتو ایندکس شده متغیرهایی مانند هزینه های جستجو و هزینه اسکن جدول بیرونی را شامل می شود که هزینه عملیات پیوستن دقیق را تضمین می کند.
نتیجه
برای اطمینان از پردازش بهینه پرس و جو در PostgreSQL، عملیات اتصال کارآمد مهم هستند. درک عملیات پیوستن به کاربرانی مانند توسعه دهندگان، مدیران db کمک می کند تا مناسب ترین رویکرد را برای مورد استفاده خاص خود انتخاب کنند.
برای پایان دادن به این وبلاگ، عملیاتهای مختلف اتصال را مورد بحث قرار دادیم که هر کدام ویژگیهای منحصر به فرد و مزایای آن را ارائه میدهند، اطمینان از پردازش کارآمد دادهها و استفاده از این عملیات پیوستن با PostgreSQL باعث کارآمدتر شدن آن میشود.