روش های پردازش کوئری

قبل از این که در مورد روش ها و پلن های اجرا کوئری صحبت کنیم باید بفهمیم کوئری های به جه صورتی پردازش می شوند و اوراکل به چه نحوی کوئری های اوراکل را مورد پردازش و تحلیل قرار می دهد. کوئری زیر را توجه کنید:

SELECT
    f.product AS beer
  , p.product AS crisps
FROM
  fridge f
CROSS JOIN
  pantry p
WHERE
  f.product         = ‘Beer’
  AND f.temperature < 5
  AND f.size        = ’50 fl oz’
  AND p.product     = ‘Crisps’
  AND p.style       = ‘Cream Cheese’
  AND p.size        = ‘250g’
ORDER BY
    crisps
  , beer
;

شما به عنوان یک برنامه نویس فکر می کنید در اوراکل کوئری به همان روشی که نوشته می شود خوانده می شود، اما اوراکل و درسایر دیتابیس های رابطه ای RDBMS خواندن کوئری از بالا به پایین نیست و در اغلب در بیشتر موارد کوئری از پایین به بالا خوانده می شود. دقیقا نه اما در مدت زمان حدود یک دقیقه کوئری پیچیده زمان می برد تا پردازش شود.

اوراکل از یک مکانیزم فانتری برای ترجمه transalate کوئری ها به چیزی قابل فهم و قابل اجرا استفاده می کند. در اصل مانند یک ربات داده است که دقیقاً کاری را انجام می دهد که ما به آن می گوییم انجام دهد و فرض کنید یک ربات به شما کمک می کند در اطراف خودتان خانه خریداری کنید و اولین و مهمترین وظیفه این ربات است که به شما کمک کند که فقط یک اشتها و نیازی که در آن دارید را برای شما فراهم کند.

چگونه می توانید به ربات بگویید بروید یک آبجو و یک بسته دلمه بگیرید؟ خوب ، احتمالاً به شما گفته است که به یخچال بروید ، به دنبال آبجو باشید ، یک بطری (50 فنجان) را با دمای زیر 5 درجه سانتیگراد بدست آورید ، سپس به داخل یخچال بروید و به دنبال یک بسته 250 گرم ترد پنیر خامه ای شوید. پس از اتمام کار ، باید به شما برگردد و وسایل را در مقابل خود قرار دهید ، طبق روشی که از شما خواسته شده است مرتب سازی شوید. درست است ، شما ابتدا به آن می گویید به محلی که یخچال و خانه های شیرینی انبار قرار دارد (احتمالاً آشپزخانه : FROM) بروید ، سپس به دنبال همه چیزهایی باشید که مطابق با معیارهای شما باشد (WHERE) و درنهایت خروجی را نمایش دهد (SELECT) و سپس بر اساس سفارش چیده و مرتب شود (ORDER BY).

به همین ترتیب بالا اوراکل کوئری را پردازش و تحلیل می کند و این تقریباً همان کاری است که اوراکل نیز انجام می دهد. تصویر زیر اولویت پردازش های اوراکل در کوئری های اوراکل می باشد.

SELECT
    product          AS item
  , MIN(temperature) AS min_temperature
  , COUNT(*)         AS num_products
FROM
  fridge
GROUP BY
  item
;

کوئری بالا با توجه به پردازش و تحلیل اوراکل خطا ORA-00904: invalid identifier می دهد به دلیل اینکه در پردازش اوراکل از پایین به بالا دستورات را می خواند در شرط GROUP BY نام item که ALIAS می باشد را نمی شناسد با اینکه در بالای دستور این کلمه به عنوان alias تعریف شده است.

مطالب زیر را حتما بخوانید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *