View Full Version : Function Based Indexes
Parastoo7
یک شنبه 09 آذر 1393, 12:33 عصر
سلام
كسي مي تونه مفهوم Function Based Indexes را توضيح دهد؟
كلا در اوراكل چند نوع ايندكس داريم؟
غالب مقاله ها انگليسي بود، خوب متوجه نشدم.
مهدی نان شکری
یک شنبه 09 آذر 1393, 14:32 عصر
با سلام
ایندکس یکی از متد های موجود برای افزایش Performance در واکشی اطلاعات در پایگاه داده رابطه ای می باشد.
اوراکل به صورت پیش فرض داده های ایندکس را به صورت B-Tree نگهداری می نماید.
در نتیجه اگر فیلد firstName از جدول Student در ایندکس ix_std_fn تعریف شده باشد در صورت اجرای کوئری
select * from student where firstName='ali'
اوراکل به جای این که کل جدول را Full Scan نماید بر اساس داده های موجود در ایندکس با چند مقایسه رکورد های مورد نظر را بدست می آورد. که به این عمل INDEX RANGE SCAN گفته می شود.
برای مقایسه صحیح می توانید روش جستجوی یک شخص در یک دفترچه تلفن که بر اساس نام مرتب می باشد را با موردی که دفترچه تلفن نا مرتب است را مقایسه نمایید.
حال اگر کوئری مورد نظر به صورت ذیل تغییر یابد
Select * from student where Upper(firstName) = 'ALI'
در این شرایط چون RDBMS از خروجی تابع Upper اطلاعی ندارد لذا پایگاه داده از ایندکس مورد نظر نمی تواند استفاده کند و به Full scan روی می آورد.
با استفاده از Function Based Indexes که از اوراکل 8i معرفی شده است می توان بر این مشکل غلبه کرد. برای این منظور می بایست تعریف ایندکس به صورت ذیل باشد:
CREATE INDEX ix_student_firstname ON student(UPPER(first_name));
موفق باشید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.