PDA

View Full Version : ایندکس بر روی view



s_ahmadneya
یک شنبه 04 اسفند 1387, 15:49 عصر
من اوراکل view نوشته ام که ستونهایش تابع ها است که خودم نوشته ام .
حال با select روی این view سرعت خیلی پایین است و تقریبا جواب نمی دهد (داده ها بالای میلیون رکورد است.)
با rownum هم وقتی حاصل جستجو تهی است سرعت وحشتناک پایین است .
ایا می شود روی این veiw
index تعریف کرد ؟
چطور

aidin300
دوشنبه 05 اسفند 1387, 08:01 صبح
سلام
قابليت ايندكس گذاري روي view وجود نداره چون ويو داده اي رو شامل نميشه كه بخواهيد روي اين داده ها ايندكس بذاريد بهتره در صورت امكان از به جاي اين function ها از join يا Function Based Indexes (http://www.oracle-base.com/articles/8i/FunctionBasedIndexes.php) استفاده كنيد، و در مورد rownum هم ترتيب زير رو در نظر بگير

The FROM/WHERE clause goes first.
ROWNUM is assigned and incremented to each output row from the FROM/WHERE clause.
SELECT is applied.
GROUP BY is applied.
HAVING is applied.
ORDER BY is applied.

anubis_ir
دوشنبه 05 اسفند 1387, 09:07 صبح
يا مي‌تونيد از اس كيوال سرور استفاده كنيد كه indexed view را پشتيباني مي‌كند :)

amir1982
جمعه 21 فروردین 1388, 12:42 عصر
شما با توضیحاتی که دادی کاملاً مشخصه که تو viewی که ساختی حتماً چندین full scan داری به دلیل تعریف توابع. بحث rownum هم که اصلاً مشخصه حتماً باعث فول اسکن میشه، شخصاً تو اینجور مشکلات میرم سراغ Explain Plan و از طریق اون کد رو بهینه میکنم. اگر از توابع تحلیلی که از over هم استفاده میکنه استفاده کرده باشی باز هم فول اسکن رخ میده. با TOAD یه Explain Plan بگیر و Cardinality , Cost رو کنترل کن. من احتمال زیاد میدم، اگر کانفیگ سرور خوب باشه، شما احتمالاً با مشکل کارتزین هم تو کدی که برای view نوشتی روبرو هستی. بهتره روی کد بیشتر کار کنی. اوراکل نمیذاره شما ایندکس رو ویو تعریف کنی چون خودش این کار رو با توجه به نوع فیلدها و ایندکسهای اون میسازه پس مطمئن باش ایندکس به هیچوجه مشکل رو برطرف یا حتی کمتر هم نمیکنه چون دیتیبیس خودش قبلاً اینکار رو کرده. اینم برای اینکه این دوستی که جواب قبلی رو داده بدونه که اون چیزی که اسم برده ازش پیش اوراکل اسباب بازیه. اگر جزئیات بیشتری خواستی میتونم کمکت کنم

s_ahmadneya
دوشنبه 24 فروردین 1388, 15:11 عصر
شما با توضیحاتی که دادی کاملاً مشخصه که تو viewی که ساختی حتماً چندین full scan داری به دلیل تعریف توابع. بحث rownum هم که اصلاً مشخصه حتماً باعث فول اسکن میشه، شخصاً تو اینجور مشکلات میرم سراغ Explain Plan و از طریق اون کد رو بهینه میکنم. اگر از توابع تحلیلی که از over هم استفاده میکنه استفاده کرده باشی باز هم فول اسکن رخ میده. با TOAD یه Explain Plan بگیر و Cardinality , Cost رو کنترل کن. من احتمال زیاد میدم، اگر کانفیگ سرور خوب باشه، شما احتمالاً با مشکل کارتزین هم تو کدی که برای view نوشتی روبرو هستی. بهتره روی کد بیشتر کار کنی. اوراکل نمیذاره شما ایندکس رو ویو تعریف کنی چون خودش این کار رو با توجه به نوع فیلدها و ایندکسهای اون میسازه پس مطمئن باش ایندکس به هیچوجه مشکل رو برطرف یا حتی کمتر هم نمیکنه چون دیتیبیس خودش قبلاً اینکار رو کرده. اینم برای اینکه این دوستی که جواب قبلی رو داده بدونه که اون چیزی که اسم برده ازش پیش اوراکل اسباب بازیه. اگر جزئیات بیشتری خواستی میتونم کمکت کنم
Explain Plan چیه و چطوری باید استفاده کنم ؟

aidin300
دوشنبه 24 فروردین 1388, 15:32 عصر
کد زیر کمکت می کنه تا Plan مربوط به یک کوئری رو پیدا کنی

explain plan for select * from table_name;
select * from table(dbms_xplan.display);
اگه باز مشکلی بود یه تاپیک جدید باز کن