建索引(尤其是主键)时请注意索引列顺序
IF OBJECT_ID('test_indexorder', 'U') IS NOT NULL
BEGIN
TRUNCATE TABLE test_indexorder
DROP TABLE test_indexorder
END
go
CREATE TABLE test_indexorder
(
id INT IDENTITY(1, 1)
NOT NULL ,
name VARCHAR(20) NOT NULL ,
content VARCHAR(50) NOT NULL ,
co1 VARCHAR(50) ,
co2 VARCHAR(50) ,
co3 VARCHAR(50) ,
co4 VARCHAR(50) ,
co5 VARCHAR(50) ,
CONSTRAINT pk_testorder PRIMARY KEY CLUSTERED ( id DESC )
)
go
--insert 1000000 条数据
SET nocount ON ;
DECLARE @t DATETIME ;
SET @t = GETDATE() ;
DECLARE @cn INT ;
SET @cn = 1000000 ;
WHILE ( @cn > 0 )
BEGIN
INSERT INTO test_indexorder
( name ,
content ,
co1 ,
co2 ,
co3 ,
co4 ,
co5
)
VALUES ( 'name' + CAST(@cn AS VARCHAR(10)) ,
CAST(NEWID() AS VARCHAR(50)) ,
CAST(NEWID() AS VARCHAR(50)) ,
CAST(NEWID() AS VARCHAR(50)) ,
CAST(NEWID() AS VARCHAR(50)) ,
CAST(NEWID() AS VARCHAR(50)) ,
CAST(NEWID() AS VARCHAR(50))
) ;
SET @cn = @cn - 1 ;
END
PRINT '插入时间(毫秒):' ;
PRINT DATEDIFF(millisecond, @t, GETDATE()) ;
SET nocount OFF ;
GO
CHECKPOINT
DBCC freeproccache
DBCC dropcleanbuffers
GO
go
SET nocount ON ;
DECLARE @t DATETIME ;
SET @t = GETDATE() ;
WITH t_rn
AS ( SELECT * ,
rn = ROW_NUMBER() OVER ( ORDER BY id DESC )
FROM test_indexorder
)
SELECT id ,
name ,
content ,
co1 ,
co2 ,
co3 ,
co4 ,
co5
FROM t_rn
WHERE rn BETWEEN 19007 AND 19057 ;
PRINT '查询时间(毫秒)'
PRINT DATEDIFF(millisecond, @t, GETDATE())
SET @t = GETDATE() ;
WITH t_rn
AS ( SELECT * ,
rn = ROW_NUMBER() OVER ( ORDER BY id ASC )
FROM test_indexorder
)
SELECT id ,
name ,
content ,
co1 ,
co2 ,
co3 ,
co4 ,
co5
FROM t_rn
WHERE rn BETWEEN 17007 AND 17057 ;
PRINT '查询时间(毫秒)'
PRINT DATEDIFF(millisecond, @t, GETDATE())
SET nocount OFF ;
BEGIN
TRUNCATE TABLE test_indexorder
DROP TABLE test_indexorder
END
go
CREATE TABLE test_indexorder
(
id INT IDENTITY(1, 1)
NOT NULL ,
name VARCHAR(20) NOT NULL ,
content VARCHAR(50) NOT NULL ,
co1 VARCHAR(50) ,
co2 VARCHAR(50) ,
co3 VARCHAR(50) ,
co4 VARCHAR(50) ,
co5 VARCHAR(50) ,
CONSTRAINT pk_testorder PRIMARY KEY CLUSTERED ( id DESC )
)
go
--insert 1000000 条数据
SET nocount ON ;
DECLARE @t DATETIME ;
SET @t = GETDATE() ;
DECLARE @cn INT ;
SET @cn = 1000000 ;
WHILE ( @cn > 0 )
BEGIN
INSERT INTO test_indexorder
( name ,
content ,
co1 ,
co2 ,
co3 ,
co4 ,
co5
)
VALUES ( 'name' + CAST(@cn AS VARCHAR(10)) ,
CAST(NEWID() AS VARCHAR(50)) ,
CAST(NEWID() AS VARCHAR(50)) ,
CAST(NEWID() AS VARCHAR(50)) ,
CAST(NEWID() AS VARCHAR(50)) ,
CAST(NEWID() AS VARCHAR(50)) ,
CAST(NEWID() AS VARCHAR(50))
) ;
SET @cn = @cn - 1 ;
END
PRINT '插入时间(毫秒):' ;
PRINT DATEDIFF(millisecond, @t, GETDATE()) ;
SET nocount OFF ;
GO
CHECKPOINT
DBCC freeproccache
DBCC dropcleanbuffers
GO
go
SET nocount ON ;
DECLARE @t DATETIME ;
SET @t = GETDATE() ;
WITH t_rn
AS ( SELECT * ,
rn = ROW_NUMBER() OVER ( ORDER BY id DESC )
FROM test_indexorder
)
SELECT id ,
name ,
content ,
co1 ,
co2 ,
co3 ,
co4 ,
co5
FROM t_rn
WHERE rn BETWEEN 19007 AND 19057 ;
PRINT '查询时间(毫秒)'
PRINT DATEDIFF(millisecond, @t, GETDATE())
SET @t = GETDATE() ;
WITH t_rn
AS ( SELECT * ,
rn = ROW_NUMBER() OVER ( ORDER BY id ASC )
FROM test_indexorder
)
SELECT id ,
name ,
content ,
co1 ,
co2 ,
co3 ,
co4 ,
co5
FROM t_rn
WHERE rn BETWEEN 17007 AND 17057 ;
PRINT '查询时间(毫秒)'
PRINT DATEDIFF(millisecond, @t, GETDATE())
SET nocount OFF ;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器