我只更改列大小,为什么它的警告“更改列数据类型导致索引太大”?
主页
/
user-197259
YHTAN's questions
YHTAN
Asked:
2021-06-28 13:48:27 +0800 CST
根据我的研究,我发现很多人提到覆盖索引将有助于减少“键查找”阻塞。我热衷于测试和理解它,但我的测试并没有显示出预期的结果。
首先我运行下面的代码,我尝试在第一个事务上更新表而不提交,然后在另一个会话上,我运行一个查询以从 tableA 中选择 col2 和 col3。根据这本书,第二个会话将被第一个会话阻止。
-- Create the table for testing
CREATE TABLE [TableA]
(
[col1] INT,
[col2] INT,
[col3] INT,
[col4] CHAR(100) DEFAULT('abc') NOT NULL
);
GO
DECLARE @int INT;
SET @int = 1;
-- Load data into the table
WHILE (@int <= 1000)
BEGIN
INSERT INTO [TableA]
([col1], [col2], [col3], [col4])
VALUES (@int*2, @int*2, @int*2, @int*2);
SET @int = @int + 1;
END
GO
CREATE CLUSTERED INDEX [cidx_TableA]
ON [TableA] ([col1]);
-- Create a non-clustered index
CREATE NONCLUSTERED INDEX [idx_TableA_col2]
ON [TableA] ([col2]);
GO
BEGIN TRANSACTION
UPDATE [TableA] SET col3=999 WHERE Col2=4
--Rollback
--ON another session, I query this.
SELECT [col2],col3 FROM [TableA]
WHERE [col2]=66
option (recompile)
第二个会话确实使用对集群索引 cidx_TableA 的键查找并返回结果,我希望它不会返回任何结果,因为假设它会通过第一个会话的更新锁定。为什么?
我还没有创建覆盖索引,因为它根本没有任何阻塞。那么,覆盖指数真的有效吗?
YHTAN
Asked:
2021-06-01 01:55:51 +0800 CST