PDA

View Full Version : حرفه ای: مشكل در كار با index ها



Ali_M_K
چهارشنبه 29 مهر 1388, 08:16 صبح
سلام
من در sql 2008 چند تا index دارم كه هيچكدوم rebuild نميشن. مجبورم دستي اونها رو rebuild كنم.
به عنوان يه راه حل، من اين بانك رو از 2005 import كردم، با اينكه اونجا مشكلي نداشت اما تو 2008 مشكل rebuild هنوز حل نشده.

لطفا راهنمايي كنيد - ممنونم

mannai29
چهارشنبه 29 مهر 1388, 08:31 صبح
سلام از دستور زير مي تونين استفاده كنين:
DBCC DBREINDEX
(
table_name
[ , index_name [ , fillfactor ] ]
)
[ WITH NO_INFOMSGS ]

AminSobati
چهارشنبه 29 مهر 1388, 22:22 عصر
دستور DBCC DBREINDEX برای نسخه های 2000 و قبل تر هست، از 2005 به بعد ALTER INDEX... REBUILD استفاده کنید.
ولی اشاره نکردین چه خطایی دریافت میکنید

Ali_M_K
پنج شنبه 21 آبان 1388, 11:46 صبح
ممنونم از توجه شما
هيچ خطايي در يافت نميكنم.
ايندكس به درستي انجام ميشه مشكل من در مورد خودكار سازي اونه. (reBuild) نميشه. !

A.Farzin
چهارشنبه 09 دی 1388, 12:35 عصر
با عرض ادب خدمت استاد محترم

دستور DBCC DBREINDEX برای نسخه های 2000 و قبل تر هست، از 2005 به بعد ALTER INDEX... REBUILD استفاده کنید.
ولی اشاره نکردین چه خطایی دریافت میکنید

براي 2000
چگونه بايد DBCC DBREINDEX را بكار برد كه بطور خودكار يكايك جداول و ايندكهاي آنها را يكي يكي بازسازي كند (اگر ممكن است كد زير را اصلاح فرمايند)

DBCC DBREINDEX
(
table_name
[ , index_name [ , fillfactor ] ]
)
[ WITH NO_INFOMSGS ]

براي 2005 و بعد
چگونه بايد ALTER INDEX... REBUILD را بكار برد كه بطور خودكار يكايك جداول و ايندكهاي آنها را يكي يكي بازسازي كند (اگر ممكن است كد زير را اصلاح فرمايند)

USE database_name;
GO
ALTER INDEX index_name ON table_name.field_name
REBUILD;
GO

ممنون

AminSobati
پنج شنبه 10 دی 1388, 17:19 عصر
سلام دوست عزیزم،
راه کلاسیک این هست که از Cursor استفاده بشه و دستور ALTER یا DBCC رو بصورت Dynamic اجرا کنیم. ولی یک پروسیجر Undocumented به نام sp_msForEachTable میتونه کار رو راحت کنه. این پروسیجر همون کار Cursor رو انجام میده، یعنی روی نام تک تک جداول قرار میگیره و به جای علامت سوال، نام جدول رو قرار میده:



exec sp_msforeachtable 'print ?'




exec sp_msforeachtable 'alter index all on ? rebuild'

Ali_M_K
پنج شنبه 10 دی 1388, 22:16 عصر
سلام
آقایون از کمکتون ممنونم...
مشکلم حل شد.