نمایش نتایج 1 تا 2 از 2

نام تاپیک: Index

  1. #1

    Index

    سلام دوستان
    من یک View دارم و در صورتی که بدون شرط Where اجرا شود 3 ثانیه طول می کشد که Result set برگرداند و اگر Where داشته باشد این زمان 50 ثانیه می شود. خودم فکر می کنم که Index های table هام به هم ریخته شده است. چطور می شود Index ها را regenerate کرد؟

    مشکل همون Index بود. حالا می خواهم یه script بنویسم که تمام Index ها را Rebuild کند. کسی دستورش رو بلده؟
    قبلا از راهنمایی تون تشکر می کنم.
    آخرین ویرایش به وسیله MaryamMarz : چهارشنبه 28 بهمن 1388 در 16:23 عصر

  2. #2
    کاربر دائمی آواتار saied_genius
    تاریخ عضویت
    آبان 1386
    محل زندگی
    IRAN فعلاً ...
    پست
    595

    نقل قول: Index

    اين script رو يه تست بزن.

    من تستش نکردم.

    DECLARE @Database VARCHAR(255)   
    DECLARE @Table VARCHAR(255)
    DECLARE @cmd NVARCHAR(500)
    DECLARE @fillfactor INT

    SET
    @fillfactor = 90

    DECLARE DatabaseCursor CURSOR FOR
    SELECT
    name FROM master.dbo.sysdatabases
    WHERE name NOT IN ('master','model','msdb','tempdb','distrbution')
    ORDER BY 1

    OPEN DatabaseCursor

    FETCH NEXT FROM DatabaseCursor INTO @Database
    WHILE @@FETCH_STATUS = 0
    BEGIN

    SET
    @cmd = 'DECLARE TableCursor CURSOR FOR SELECT table_catalog + ''.'' + table_schema + ''.'' + table_name as tableName
    FROM '
    + @Database + '.INFORMATION_SCHEMA.TABLES WHERE table_type = ''BASE TABLE'''

    -- create table cursor
    EXEC (@cmd)
    OPEN TableCursor

    FETCH NEXT FROM TableCursor INTO @Table
    WHILE @@FETCH_STATUS = 0
    BEGIN

    -- SQL 2000 command
    --DBCC DBREINDEX(@Table,' ',@fillfactor)

    -- SQL 2005 command
    SET @cmd = 'ALTER INDEX ALL ON ' + @Table + ' REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillfactor) + ')'
    EXEC (@cmd)

    FETCH NEXT FROM TableCursor INTO @Table
    END

    CLOSE
    TableCursor
    DEALLOCATE TableCursor

    FETCH NEXT FROM DatabaseCursor INTO @Database
    END
    CLOSE
    DatabaseCursor
    DEALLOCATE DatabaseCursor


    اگر sql server 2000 است اين خط کد را از comment در بيار.
    DBCC DBREINDEX(@Table,' ',@fillfactor)


    موفق باشيد.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •