當前位置:首頁 » 編程語言 » sql重新組織索引
擴展閱讀
wifi不能中文名 2022-06-27 01:28:36
用什麼腳本預覽百度文檔 2022-06-27 01:28:13
sqlmap的tamper腳本 2022-06-27 01:25:14

sql重新組織索引

發布時間: 2022-05-22 12:30:09

❶ 如何重新組織索引 (sql Server Management Studio)

本主題說明了如何使用 SQL Server Management Studio 中的對象資源管理器重新組織某個索引或對某個表編制的所有索引。使用最少系統資源重新組織索引。它將以物理方式對葉級頁重新排序以與葉節點的從左向右的邏輯順序相匹配,從而對表和視圖的葉級聚集索引和非聚集索引進行碎片整理。重新組織還會基於現有的填充因子值壓縮索引頁。有關詳細信息,請參閱 重新組織和重新生成索引。

❷ SQL中如何重建一張表的索引

SELECT
tab.name AS [表名],
idx.name AS [索引名稱],
col.name AS [列名]
FROM
sys.indexes idx
JOIN sys.index_columns idxCol
ON (idx.object_id = idxCol.object_id
AND idx.index_id = idxCol.index_id
)
JOIN sys.tables tab
ON (idx.object_id = tab.object_id)
JOIN sys.columns col
ON (idx.object_id = col.object_id
AND idxCol.column_id = col.column_id);

❸ SQL Server 2000資料庫中如何重建索引

連續索引頁由從一個頁到下一個頁的指針鏈接在一起。當對數據的更改影響到索引時,索引中的信息可能會在資料庫中分散開來。重建索引可以重新組織索引數據(對於聚集索引還包括表數據)的存儲,清除碎片。這可通過減少獲得請求數據所需的頁讀取數來提高磁碟性能。 在Microsoft�0�3 SQL Server�6�4 2000 中,如果要用一個步驟重新創建索引,而不想刪除舊索引並重新創建同一索引,則使用 CREATE INDEX 語句的 DROP_EXISTING 子句可以提高效率。這一優點既適用於聚集索引也適用於非聚集索引。 以刪除舊索引然後重新創建同一索引的方式重建聚集索引,是一種昂貴的方法,因為所有二級索引都使用聚集鍵指向數據行。如果只是刪除聚集索引然後重新創建,則會使所有非聚集索引都被刪除和重新創建兩次。一旦刪除聚集索引並再次重建該索引,就會發生這種情形。通過在一個步驟中重新創建索引,可以避免這一昂貴的做法。在一個步驟中重新創建索引時,會告訴 SQL Server 要重新組織現有索引,避免了刪除和重新創建非聚集索引這些不必要的工作。該方法的另一個重要優點是可以使用現有索引中的數據排序次序,從而避免了對數據重新排序。這對於聚集索引和非聚集索引都十分有用,可以顯著減少重建索引的成本。另外,通過使用 DBCC DBREINDEX 語句,SQL Server 還允許對一個表重建(在一個步驟中)一個或多個索引,而不必單獨重建每個索引。 DBCC DBREINDEX 也可用於重建執行 PRIMARY KEY 或 UNIQUE 約束的索引,而不必刪除並創建這些約束(因為對於為執行 PRIMARY KEY 或 UNIQUE 約束而創建的索引,必須先刪除該約束,然後才能刪除該索引)。

❹ 如何重建sql資料庫索引

數據更新是一種常見的操作,然後數據倉庫的概念一般要求的是數據是集成、穩定的。HIVE作為一種分布式環境下以HDFS為支撐的數據倉庫,它同樣更多的要求數據是不可變的。
然而現實很多任務中,往往需要對數據進行更新操作,經查,Hive自0.11版本之後就提供了更新操作。於是想著試驗一下,看看HIVE更新的操作和性能。

❺ 如何重建SQL索引 要具體的命令

USE TableName
DECLARE @TableName varchar(255)
DECLARE TableCursor CURSOR FOR
SELECT table_name FROM information_schema.tables
WHERE table_type = 'base table'
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
DBCC DBREINDEX(@TableName,' ',90)
FETCH NEXT FROM TableCursor INTO @TableName
END
CLOSE TableCursor
DEALLOCATE TableCursor

❻ 怎樣sql2008 重新生成索引任務

重新生成索引在對象資源管理器中,連接到SQLServer2005資料庫引擎實例,再展開該實例。展開「資料庫」,展開包括具有指定索引的表的資料庫,再展開「表」。展開該索引所屬的表,再展開「索引」。右鍵單擊要重新生成的索引,再單擊「重新生成」。
若要開始重新生成操作,請單擊「肯定」。為表重新生成所有索引在對象資源管理器中,連接到SQLServer2005資料庫引擎實例,再展開該實例。展開「資料庫」,展開包括具有指定索引的表的資料庫,再展開「表」。轉載,僅供參考。
展開索引所屬的表。右鍵單擊「索引」,再單擊「全部重新生成」。若要開始重新生成操作,請單擊「肯定」。

❼ sql重新組織碎片索引和重新組織索引的區別

重新生成索引將會刪除並重新創建索引。它通過根據現有填充因子設置壓縮頁來刪除碎片,回收磁碟空間,並對連續頁中的索引行重新排序。有關索引碎片的詳細信息,請參閱重新組織和重新生成索引。重新生成索引在對象資源管理器中,連接到 SQL Server 2005 資料庫引擎??實例,再展開該實例。展開「資料庫」,展開包含具有指定索引的表的資料庫,再展開「表」。展開該索引所屬的表,再展開「索引」。右鍵單擊要重新生成的索引,再單擊「重新生成」。若要開始重新生成操作,請單擊「確定」。為表重新生成所有索引在對象資源管理器中,連接到 SQL Server 2005 資料庫引擎??實例,再展開該實例。展開「資料庫」,展開包含具有指定索引的表的資料庫,再展開「表」。展開索引所屬的表。右鍵單擊「索引」,再單擊「全部重新生成」。若要開始重新生成操作,請單擊「確定」。

❽ sql server如何重建索引到其它文件組

在日常工作中,我們發現很多實施案例中,sql server的資料庫數據與索引在一起。我見過一個客戶的,他的資料庫總共大小才60g,但索引與數據完全混在一起,從管理資料庫的直覺來看,性能方面肯定有問題,所以我建議他們,不管怎麼樣,把索引與資料庫分開,對性能是有好處的!但是sql server的索引,想要通過重建的方式,把數據與索引分開,並不是一件容易的事懷,在使用rebuild時,並不能增加文件組選項。後來研究發現,可以通過以下方式把數據與非聚簇索引分開,具體如下:
set nocount on

declare @index table
(
object_id int,
objectName sysname,
index_id int,
indexName sysname,
fill_factor tinyint,
allow_row_locks bit,
allow_page_locks bit,
is_padded bit,
indexText varchar(max),
indexTextEnd varchar(max)
)

declare @indexColumn table
(
object_id int,
index_id int,
column_id int,
index_column_id int,
max_index_column_id int,
is_descending_key bit,
is_included_column bit,
columnName varchar(255),
indexText varchar(max) null
)

insert into @index
select
i.object_id,
object_name(i.object_id),
i.index_id,
i.name,
fill_factor,
allow_row_locks,
allow_page_locks,
is_padded,
'CREATE NONCLUSTERED INDEX [' + i.name + '] ON [dbo].[' + object_name(i.object_id) + '] ' + char(13),
'WITH (PAD_INDEX = ' +
CASE WHEN is_padded = 1 THEN ' ON ' ELSE ' OFF ' END +
', STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = ON, ONLINE = OFF, ALLOW_ROW_LOCKS = ' +
CASE WHEN allow_row_locks = 1 THEN ' ON ' ELSE ' OFF ' END +
', ALLOW_PAGE_LOCKS = ' +
CASE WHEN allow_page_locks = 1 THEN ' ON ' ELSE ' OFF ' END +
CASE WHEN fill_factor > 0 THEN ', FILLFACTOR = ' + convert(varchar(3), fill_factor) ELSE '' END +
') ON [IndexFG];print('''+i.name+' @ '+object_name(i.object_id)+''')' --+ CHAR(13) + ' GO;'+ CHAR(13) --注意標紅的地方,這是新的文件組的名稱
from sys.indexes i
where i.type = 2 and not exists(select 1 from sys.key_constraints kc where kc.name=i.name)
and objectproperty(i.object_id , 'IsUserTable') = 1
order by object_name(i.object_id), i.name

insert into @indexColumn
select
i.object_id,
i.index_id,
ic.column_id,
ic.index_column_id,
max(ic.index_column_id) over (partition by i.object_id, i.index_id, is_included_column),
is_descending_key,
is_included_column,
'[' + c.name + ']',
null
from @index i
join sys.index_columns ic
on i.object_id = ic.object_id
and i.index_id = ic.index_id
join sys.columns c
on ic.object_id = c.object_id
and ic.column_id = c.column_id
order by i.object_id, i.index_id, ic.index_column_id

declare @fields varchar(max)
declare @object_id int, @index_id int

select @fields = null, @object_id = -1, @index_id = -1

update @indexColumn
set @fields = indexText =
case when object_id = isnull(@object_id, object_id) and index_id = isnull(@index_id, index_id)
then isnull(@fields + ', ', ' ') + columnName + case when is_descending_key = 0 then ' ASC' else ' DESC' end
else columnName + case when is_descending_key = 0 then ' ASC' else ' DESC' end
end,
@object_id = case when object_id <> @object_id
then object_id else @object_id end,
@index_id = case when index_id <> @index_id
then index_id else @index_id end
from @indexColumn
where is_included_column = 0

select @fields = null, @object_id = -1, @index_id = -1

update @indexColumn
set @fields = indexText =
case when object_id = isnull(@object_id, object_id) and index_id = isnull(@index_id, index_id)
then isnull(@fields + ', ', ' ') + columnName
else columnName
end,
@object_id = case when object_id <> @object_id
then object_id else @object_id end,
@index_id = case when index_id <> @index_id
then index_id else @index_id end
from @indexColumn
where is_included_column = 1

update @index
set indexText = i.indexText + '( ' + char(13) + char(9) + ic.indexText + char(13) + ') '
from @index i join @indexColumn ic
on i.object_id = ic.object_id
and i.index_id = ic.index_id
and ic.index_column_id = ic.max_index_column_id
and ic.is_included_column = 0

update @index
set indexText = i.indexText + 'INCLUDE ( ' + char(13) + char(9) + ic.indexText + char(13) + ') '
from @index i join @indexColumn ic
on i.object_id = ic.object_id
and i.index_id = ic.index_id
and ic.index_column_id = ic.max_index_column_id
and ic.is_included_column = 1

update @index
set indexText = indexText + indexTextEnd
from @index

select indexText, objectName, indexName
from @index

最後的查詢結果第一行就是執行的命令!

❾ 如何重新生成索引 (SQL Server Management Studio)

重新生成索引將會刪除並重新創建索引。它通過根據現有填充因子設置壓縮頁來刪除碎片,回收磁碟空間,並對連續頁中的索引行重新排序。有關索引碎片的詳細信息,請參閱重新組織和重新生成索引。重新生成索引在對象資源管理器中,連接到 SQL Server 2005 資料庫引擎�0�2實例,再展開該實例。展開「資料庫」,展開包含具有指定索引的表的資料庫,再展開「表」。展開該索引所屬的表,再展開「索引」。右鍵單擊要重新生成的索引,再單擊「重新生成」。若要開始重新生成操作,請單擊「確定」。為表重新生成所有索引在對象資源管理器中,連接到 SQL Server 2005 資料庫引擎�0�2實例,再展開該實例。展開「資料庫」,展開包含具有指定索引的表的資料庫,再展開「表」。展開索引所屬的表。右鍵單擊「索引」,再單擊「全部重新生成」。若要開始重新生成操作,請單擊「確定」。

❿ sql問題,索引的修改。alter index語句如何使用,謝謝

alter index常用的語法如下:
(1)重建指定索引:
ALTER INDEX ind ON TA
REBUILD;
(2)重建全部索引:
ALTER INDEX ALL ON TA
REBUILD;
(3)禁用索引:
ALTER INDEX ALL ON TA
DISABLE;
(再次啟用使用REBUILD重建而不是ENABLED)
(4)指定參數重建索引:
ALTER INDEX ALL ON TA
REBUILD WITH(FILLFACTOR=80);
(5)指定參數修改索引:
ALTER INDEX ALL ON TA
SET(IGNORE_DUP_KEY = ON);

注意:alter index語法,不能用於修改索引定義,如添加或刪除列,或更改列的順序