本篇文章着重讨论两个问题:

1、主键设为Int型与Varchar型,性能有何差异?

2、非聚集索引在大数量下能否提高性能?

测试环境:

Cpu: T2300 1.66G  内存:1G

系统: Windows Xp Sp3

数据库: SQL Server 2005

步骤:

一、建立两个表

字段 A B dtA dtB 表:TestA
类型 int varchar datetime datetime
说明 主键      
           
字段 A B dtA dtB 表:TestB
类型 int varchar datetime datetime
说明   主键   非聚集索引

二、填充数据

declare @a int 
set @a=1
use extdata
while (@a<5000000)

begin

insert TestA (A,B,dtA,dtB) values (@a,convert(varchar,@a,112),getdate(),getdate())
insert TestB (A,B,dtA,dtB) values (@a,convert(varchar,@a,112),getdate(),getdate())

set @a=@a+1

end

上面操作在我本本上耗时约80分钟

三、测试不同数据类型主键性能

---SQL执行计时
declare @date1 datetime
declare @date2 datetime
select @date1=getdate()
--测试语句
 

use extdata

select * from testa where A=2999999

select @date2=getdate()
select datediff(millisecond, @date1, @date2) 
--结果是毫秒数




 ---SQL执行计时

select @date1=getdate()
--测试语句
 

use extdata

select * from testb where B='2999999'

select @date2=getdate()
select datediff(millisecond, @date1, @date2) 
--结果是毫秒数

执行结果如下:

四、测试非聚集性能

---SQL执行计时
declare @date1 datetime
declare @date2 datetime
select @date1=getdate()
--测试语句

use extdata

select * from testa where A=2999999 or dtb=getdate()

select @date2=getdate()
select datediff(millisecond, @date1, @date2) 
--结果是毫秒数

---SQL执行计时

select @date1=getdate()
--测试语句

use extdata

select * from testb where B='2999999' or dtb=getdate()

select @date2=getdate()
select datediff(millisecond, @date1, @date2) 
--结果是毫秒数

在主键后又加入了一个对字段dtb的比较,其它TestB表中,此字段设为非聚集索引,结果如下:

========================================

测试结果:

1、主键为Int型或Varchar型,性能几乎是一样的。(经过多次对比,最多有10毫秒的差异,并且还是Varchar型的快一点)

2、数据量较大,建立合适的非聚集索引,能大大提高性能。(如上图,差别为400多倍)

本次测试可能不是特别全面,回头有机会补充。

转载于:https://www.cnblogs.com/baishifeng/archive/2009/06/10/1500461.html

SQL Server中使用索引性能的比较相关推荐

  1. 翻译:SQL Server中的索引内部结构:到SQL Server索引级别10的阶梯。

    SQL Server中的索引内部结构:到SQL Server索引级别10的阶梯. 大卫•杜兰特2012/01/20 该系列 本文是楼梯系列的一部分:SQL Server索引的阶梯. 索引是数据库设计的 ...

  2. CREATE VIEW SQL:在SQL Server中使用索引视图

    This is the fourth article in a series of learning the CREATE VIEW SQL statement. So far, we have do ...

  3. 在SQL Server中配置索引创建内存设置的最佳实践

    介绍 (Introduction) The Index Create Memory setting is an advanced SQL Server configuration setting wh ...

  4. SQL Server中唯一索引和唯一约束之间的区别

    This article gives you an overview of Unique Constraints in SQL and also the Unique SQL Server index ...

  5. 【译】索引进阶(十一):SQL SERVER中的索引碎片【上篇】

    原文链接:传送门. 第十章节我们分析了索引的内部结构.有了这些关于索引结构的知识,我们便可以分析索引碎片了:其产生的原因,如何防止,以及何时可以不去关注它们. 一些背景知识 / 复习 以下知识对于理解 ...

  6. SQL SERVER中一些常见性能问题的总结

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  7. 转:SQL SERVER中一些常见性能问题的总结

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  8. SQL Server中如何识别、查找未使用的索引(unused indexes)

    在SQL Server中,索引是优化SQL性能的一大法宝.但是由于各种原因,索引会被当做"银弹"滥用,一方面有些开发人员(甚至是部分数据库管理员)有一些陋习,不管三七二十一,总是根 ...

  9. 理解SQL Server中索引的概念,原理以及其他

    简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能.但索引可以在大多数情况下大大提升查询性能,在OLAP中尤其明显.要完全理解索 ...

  10. T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他(看了两次了,转了)

    简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能.但索引可以在大多数情况下大大提升查询性能,在OLAP中尤其明显.要完全理解索 ...

最新文章

  1. 程序提示确认关闭后退出
  2. ACM POJ 2723 Get Luffy Out(2-SAT入门)
  3. CTO下午茶: 没有安全,一切创新都是套路
  4. java 二维数组作为参数传递_java JNI 二维数组作为方法参数传递给本地
  5. OpenCV3.0或OpenCV3.1的SVM操作
  6. React学习:事件绑定、组件定义、for、map循环-学习笔记
  7. iec60870-5-104通讯协议编程_三菱FX编程口通讯协议1——协议解读
  8. Java8————日期时间 API
  9. AMI corpus download
  10. SQL Server中数据透视表的Python脚本
  11. Linux系统管理(10)——Centos8 重启网络服务 网络相关命令
  12. 快读快写:读入输出优化
  13. 获取位置_原神蜥蜴尾巴怎么获得 蜥蜴尾巴获取位置分享
  14. 《高效人士的116个IT秘诀》读书笔记
  15. SVM(三)—Kernels(核函数)
  16. 「每天一道面试题」AQS是什么?了解其内部同步队列实现结构吗?
  17. matlab 汽车 流场,MATLAB编程与汽车仿真应用
  18. Materials Studio建模与材料模拟计算工作站方案2022
  19. 实现mysql远程(通过IP地址访问)连接
  20. storm java 例子_Storm 运行例子

热门文章

  1. Wireshark实战分析之IP协议(二)
  2. Linux下高效实用的grep命令
  3. 结构体赋值 -- 构造函数
  4. ug导出step文件失败_UG/NX8.5无法成功导出STP文件,导出的文件只有3K
  5. 1.两数之和(leetcode-1)
  6. 利用ArcGIS Python批量拼接遥感影像(arcpy batch processing)
  7. Pytorch安装步骤
  8. qtp java_QTP Java swing 一些控件的遍历
  9. mem考试能用计算机吗,东华大学计算机学院MEM难考吗
  10. php评论倒序 zblog_ZblogPHP调用最新、评论最多、浏览最多、置顶文章