从100万条数据中找出年龄最大的人员
2010-04-01 11:33
246 查看
今天在网上看到这样一篇文章,就是关于从100万条人员信息中选择年龄最大的人员信息的查询问题。
我觉得很有收藏价值,所以在这整理了一下,与大家分享
首先创建一张人员信息表:
create table person
(
id int identity(1,1) not null,
pid varchar(18) not null,
md varchar(11) not null,
age int
)
go
declare @pid varchar(15)
declare @age int
declare @mb varchar(11)
declare @count int
set @count = 0
--插入100万条随机的记录
while(@count < 1000000)
begin
--生成随机的PID
select @pid=substring(cast(rand() as varchar(20)),3,6)+
substring(cast(rand() as varchar(20)),3,6)+substring(cast(rand() as varchar(20)),3,6)
--生成随机的MB
select @mb=substring(cast(rand() as varchar(20)),3,6)+
substring(cast(rand() as varchar(20)),3,5)
--生成随机的AGE
select @age = cast (rand() * 100 as int)
--将生成的随机数据插入表
insert into person
values ( @pid, @mb,@age)
set @count = @count + 1
end
已经创建了人员信息表,并且在其中随机的插入了100万条数据
下面有两种查询方式
我们在这做个比较
方法一:
DECLARE @BD DATETIME
DECLARE @ED DATETIME
SET @BD = GETDATE()--执行之前记录时间
SELECT TOP 1 * FROM PERSON ORDER BY AGE DESC
SET @ED = GETDATE()--执行之后记录时间
SELECT datediff(millisecond,@BD,@ED)--用毫秒的方法显示执行时间。
解决办法:
为person表的age这一列创建索引
create nonclustered index ix_age
on person(age)
/*清空缓存*/
DBCC FREEPROCCACHE --清空SQL缓存
DBCC DROPCLEANBUFFERS
方法二:子查询
DECLARE @BD DATETIME
DECLARE @ED DATETIME
SET @BD = GETDATE()
select * from person where age =(
select max(age) from person )
SET @ED = GETDATE()
SELECT datediff(millisecond,@BD,@ED)
方法一的查询效率明显低于方法二
我觉得很有收藏价值,所以在这整理了一下,与大家分享
首先创建一张人员信息表:
create table person
(
id int identity(1,1) not null,
pid varchar(18) not null,
md varchar(11) not null,
age int
)
go
declare @pid varchar(15)
declare @age int
declare @mb varchar(11)
declare @count int
set @count = 0
--插入100万条随机的记录
while(@count < 1000000)
begin
--生成随机的PID
select @pid=substring(cast(rand() as varchar(20)),3,6)+
substring(cast(rand() as varchar(20)),3,6)+substring(cast(rand() as varchar(20)),3,6)
--生成随机的MB
select @mb=substring(cast(rand() as varchar(20)),3,6)+
substring(cast(rand() as varchar(20)),3,5)
--生成随机的AGE
select @age = cast (rand() * 100 as int)
--将生成的随机数据插入表
insert into person
values ( @pid, @mb,@age)
set @count = @count + 1
end
已经创建了人员信息表,并且在其中随机的插入了100万条数据
下面有两种查询方式
我们在这做个比较
方法一:
DECLARE @BD DATETIME
DECLARE @ED DATETIME
SET @BD = GETDATE()--执行之前记录时间
SELECT TOP 1 * FROM PERSON ORDER BY AGE DESC
SET @ED = GETDATE()--执行之后记录时间
SELECT datediff(millisecond,@BD,@ED)--用毫秒的方法显示执行时间。
解决办法:
为person表的age这一列创建索引
create nonclustered index ix_age
on person(age)
/*清空缓存*/
DBCC FREEPROCCACHE --清空SQL缓存
DBCC DROPCLEANBUFFERS
方法二:子查询
DECLARE @BD DATETIME
DECLARE @ED DATETIME
SET @BD = GETDATE()
select * from person where age =(
select max(age) from person )
SET @ED = GETDATE()
SELECT datediff(millisecond,@BD,@ED)
方法一的查询效率明显低于方法二
相关文章推荐
- Python实现:斐波那契数列、交换两个变量的值、从一组数据中找出最大最小值
- tsql 从数据表中找出缺失的最大、最小ID值。
- 一是关于怎样找出和去除重复数据,这在另一个帖子利已有详细介绍。二是关于找出某一列里最大或最小的前几个,或是大于或小于某一个值(最大值或平均值)的数据
- 找出一堆数据中最大或者最小的K个数
- 【数据结构】找出N个数据中最大的前k个数据(利用堆排序)
- 求区间最大值---找出下面“输入数据及格式”中所描述的输入数据文件中最大重叠区间的大小
- 使用JAVA找出一组数据的最大值
- TOP-K排序算法,从海量不重复数据中找出最大/小的K个数
- 编写一个程序对Largest函数进行测试,找出一组数据的最大值
- mysql中使用sql找出每组当中最大的那条数据
- 从大量的数据中找出若干个最大或者最小的数据
- 上亿个数据保存在硬盘中,找出最大的N个。
- 给出一组整数型的数据,找出最大值,数据的个数是任意的
- Excel如何利用条件格式找出数据区域中最大的几项
- JAVA冒泡排序/JAVA冒泡排序再找出给定数据中的最大值最小值/JAVA数组排序
- 【数据结构】找出N个数据中最大的前k个数据(利用堆排序)
- 找出数据集合中的最小值和最大值的两种算法比较
- 从键盘为3*3的矩阵输入数据,找出主对角线上最大的元素,以及所在的行号
- 找出从键盘上输入的3个实型数据中的最大值。
- 在规模为n的数据元素集合中找出最大元