SQL Server中使用索引性能的比较
本篇文章着重讨论两个问题:
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 | |
说明 | 主键 | 非聚集索引 |
二、填充数据
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分钟
三、测试不同数据类型主键性能
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)
--结果是毫秒数
执行结果如下:
四、测试非聚集性能
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中使用索引性能的比较相关推荐
- 翻译:SQL Server中的索引内部结构:到SQL Server索引级别10的阶梯。
SQL Server中的索引内部结构:到SQL Server索引级别10的阶梯. 大卫•杜兰特2012/01/20 该系列 本文是楼梯系列的一部分:SQL Server索引的阶梯. 索引是数据库设计的 ...
- 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 ...
- 在SQL Server中配置索引创建内存设置的最佳实践
介绍 (Introduction) The Index Create Memory setting is an advanced SQL Server configuration setting wh ...
- SQL Server中唯一索引和唯一约束之间的区别
This article gives you an overview of Unique Constraints in SQL and also the Unique SQL Server index ...
- 【译】索引进阶(十一):SQL SERVER中的索引碎片【上篇】
原文链接:传送门. 第十章节我们分析了索引的内部结构.有了这些关于索引结构的知识,我们便可以分析索引碎片了:其产生的原因,如何防止,以及何时可以不去关注它们. 一些背景知识 / 复习 以下知识对于理解 ...
- SQL SERVER中一些常见性能问题的总结
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- 转:SQL SERVER中一些常见性能问题的总结
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- SQL Server中如何识别、查找未使用的索引(unused indexes)
在SQL Server中,索引是优化SQL性能的一大法宝.但是由于各种原因,索引会被当做"银弹"滥用,一方面有些开发人员(甚至是部分数据库管理员)有一些陋习,不管三七二十一,总是根 ...
- 理解SQL Server中索引的概念,原理以及其他
简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能.但索引可以在大多数情况下大大提升查询性能,在OLAP中尤其明显.要完全理解索 ...
- T-SQL查询进阶--理解SQL Server中索引的概念,原理以及其他(看了两次了,转了)
简介 在SQL Server中,索引是一种增强式的存在,这意味着,即使没有索引,SQL Server仍然可以实现应有的功能.但索引可以在大多数情况下大大提升查询性能,在OLAP中尤其明显.要完全理解索 ...
最新文章
- 程序提示确认关闭后退出
- ACM POJ 2723 Get Luffy Out(2-SAT入门)
- CTO下午茶: 没有安全,一切创新都是套路
- java 二维数组作为参数传递_java JNI 二维数组作为方法参数传递给本地
- OpenCV3.0或OpenCV3.1的SVM操作
- React学习:事件绑定、组件定义、for、map循环-学习笔记
- iec60870-5-104通讯协议编程_三菱FX编程口通讯协议1——协议解读
- Java8————日期时间 API
- AMI corpus download
- SQL Server中数据透视表的Python脚本
- Linux系统管理(10)——Centos8 重启网络服务 网络相关命令
- 快读快写:读入输出优化
- 获取位置_原神蜥蜴尾巴怎么获得 蜥蜴尾巴获取位置分享
- 《高效人士的116个IT秘诀》读书笔记
- SVM(三)—Kernels(核函数)
- 「每天一道面试题」AQS是什么?了解其内部同步队列实现结构吗?
- matlab 汽车 流场,MATLAB编程与汽车仿真应用
- Materials Studio建模与材料模拟计算工作站方案2022
- 实现mysql远程(通过IP地址访问)连接
- storm java 例子_Storm 运行例子
热门文章
- Wireshark实战分析之IP协议(二)
- Linux下高效实用的grep命令
- 结构体赋值 -- 构造函数
- ug导出step文件失败_UG/NX8.5无法成功导出STP文件,导出的文件只有3K
- 1.两数之和(leetcode-1)
- 利用ArcGIS Python批量拼接遥感影像(arcpy batch processing)
- Pytorch安装步骤
- qtp java_QTP Java swing 一些控件的遍历
- mem考试能用计算机吗,东华大学计算机学院MEM难考吗
- php评论倒序 zblog_ZblogPHP调用最新、评论最多、浏览最多、置顶文章