`
bigfirebird
  • 浏览: 125143 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

百万数据查询测试 只需1秒--Sql语句效率测试

阅读更多
关于SQL查询效率,100w数据,查询只要1秒,与您分享:

机器情况
p4: 2.4
内存: 1 G
os: windows 2003
数据库: ms sql server 2000
目的: 查询性能测试,比较两种查询的性能

SQL查询效率 step by step

-- setp 1.
-- 建表
create table t_userinfo
(
userid int identity(1,1) primary key nonclustered,
nick varchar(50) not null default '',
classid int not null default 0,
writetime datetime not null default getdate()
)
go

-- 建索引
create clustered index ix_userinfo_classid on t_userinfo(classid)
go

-- step 2.

declare @i int
declare @k int
declare @nick varchar(10)
set @i = 1
while @i<1000000
begin
set @k = @i % 10
set @nick = convert(varchar,@i)
insert into t_userinfo(nick,classid,writetime) values(@nick,@k,getdate())
set @i = @i + 1
end
-- 耗时 08:27 ,需要耐心等待

-- step 3.
select top 20 userid,nick,classid,writetime from t_userinfo
where userid not in
(
select top 900000 userid from t_userinfo order by userid asc
)

-- 耗时 8 秒 ,够长的

-- step 4.
select a.userid,b.nick,b.classid,b.writetime from
(
select top 20 a.userid from
(
select top 900020 userid from t_userinfo order by userid asc
) a order by a.userid desc
) a inner join t_userinfo b on a.userid = b.userid
order by a.userid asc

-- 耗时 1 秒,太快了吧,不可以思议

-- step 5 where 查询
select top 20 userid,nick,classid,writetime from t_userinfo
where classid = 1 and userid not in
(
select top 90000 userid from t_userinfo
where classid = 1
order by userid asc
)
-- 耗时 2 秒

-- step 6 where 查询
select a.userid,b.nick,b.classid,b.writetime from
(
select top 20 a.userid from
(
select top 900000 userid from t_userinfo
where classid = 1
order by userid asc
) a order by a.userid desc
) a inner join t_userinfo b on a.userid = b.userid
order by a.userid asc

-- 查询分析器显示不到 1 秒.

查询效率分析:
子查询为确保消除重复值,必须为外部查询的每个结果都处理嵌套查询。在这种情况下可以考虑用联接查询来取代。

如果要用子查询,那就用EXISTS替代IN、用NOT EXISTS替代NOT IN。因为EXISTS引入的子查询只是测试是否存在符合子查询中指定条件的行,效率较高。无论在哪种情况下,NOT IN都是最低效的。因为它对子查询中的表执行了一个全表遍历。

建立合理的索引,避免扫描多余数据,避免表扫描!
几百万条数据,照样几十毫秒完成查询.
分享到:
评论

相关推荐

    SQL查询安全性及性能优化

    注意:在检测之前要清理缓存,因为当我们执行SQL语句的时候查出的数据会在数据库中进行缓存,重新查询会返回缓存中的信息。 DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE 经验:使用子查询嵌套不要过多,尽量使用表...

    达梦数据库_SQL语言手册

    第章数据查询语句和全文检索语句 单表查询 简单查询 带条件查询 集函数 情况表达式 连接查询 子查询 标量子查询 表子查询 派生表子查询 定量比较 带 谓词的子查询 多列表子查询 查询结果的合并 和 ...

    SQL语法大全

    rs.open SQL语句,conn,3,2 3. SQL常用命令使用方法: (1) 数据记录筛选: sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]" sql="select * from 数据表 where 字段名 like \'%字段值%\'...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    版次:1-1 主编推荐  资深Oracle专家力作,OakTable团队推荐  全面、独到、翔实,题材丰富  Oracle开发人员和DBA必备 内容简介  Oracle 数据库中的SQL是当今市场上功能最强大的SQL实现之一,而本书全面展示了...

    SQL培训第一期

    存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。 1.9.2 准备 create table t_user ( username varchar2(20), ...

    MySql基本查询、连接查询、子查询、正则表达查询讲解

    查询数据是指从数据库中的数据表或视图中获取所需要的数据,在mysql中,可以使用SELECT语句来查询数据。根据查询条件的不同,数据库系统会找到不同的数据。 SELECT语句的基本语法格式如下: [sql] view plain copy ...

    c++ 面试题 总结

    for(i=0,j=strlen(a)-1;i(a)/2;i++,j--) { t=a[i]; a[i]=a[j]; a[j]=t; } cout; } //第二种 string str; cin&gt;&gt;str; str.replace; cout; -------------------------------------------------------------...

    WinSQL Professional v9.0.107.624 破解版

    无论是在同一数据库或不同的数据库工程多个RDBMS优秀的测试数据生成工具生成用于测试目的的数百万行阅读从多个来源的数据,如文本文件,其他表或使用预先定义的格式,可视化工具很容易得出的E / R双字母组合和查看表...

    MSSQL 查询管理器 V1.0.0.135

    SQL查询器流传着很多软件,但相信此软件会有它的特别之处,本软件是经多名工程师测试。功能以及效率是有见证。本软件体积优势非常轻巧功能强大,1.4M的大小携带方便。如有建议请发邮件到75934092@qq.com,谢谢你的...

    MSSQL Server 管理器 V3.0 免注册

    SQL查询器流传着很多软件,但相信此软件会有它的特别之处,本软件是经多名工程师测试。功能以及效率是有见证。本软件体积优势非常轻巧功能强大,1.7M的大小携带方便。如有建议请发邮件到75934092@qq.com,谢谢你的...

    PLSQLDeveloper_解压版

    只需在一个使用简单的表里输入信息,PL/SQL Developer会生成合适的SQL来创建和修改项目。 模板清单 PL/SQL Developer的模块清单是一个真正节约时间的并且能帮你执行标准化的工具。无论你在何时需要插一些标准的SQL...

    plsqlplus+instantclient_11_2

    只需在一个使用简单的表里输入信息,PL/SQL Developer会生成合适的SQL来创建和修改项目。 模板清单 PL/SQL Developer的模块清单是一个真正节约时间的并且能帮你执行标准化的工具。无论你在何时需要插一些标准的SQL...

    ASP.NET开发伴侣--分页组件

    6、进行数据绑定时只需几条语句,大大提高软件开发速度和开发效率;7、深入.Net底层的事件处理和数据处理机制,翻页速度更快,完全胜任企业级数据实施方案;8、接受标准的CssClass样式表控制按钮及标签,风格样式...

    Toad 使用快速入门

    可以查看SQL语句的执行情况:通过下方的AutoTrace窗口 ,看到SQL语句的实际执行结果和执行效率。 支持历史SQL(F8) :可以方便的查询以前执行过的SQL,不用反复重新输入。  可以执行匿名块,存储过程,从...

    MSSQL Server 管理器 V2.0.0.0

    SQL查询器流传着很多软件,但相信此软件会有它的特别之处,本软件是经多名工程师测试。功能以及效率是有见证。本软件体积优势非常轻巧功能强大,1.7M的大小携带方便。如有建议请发邮件到75934092@qq.com,谢谢你的...

    MSSQL Server 管理器 V1.0.0.138

    SQL查询器流传着很多软件,但相信此软件会有它的特别之处,本软件是经多名工程师测试。功能以及效率是有见证。本软件体积优势非常轻巧功能强大,1.4M的大小携带方便。如有建议请发邮件到75934092@qq.com,谢谢你的...

    计算机二级C语言考试题预测

    (3) 在一棵二叉树上第5层的结点数最多是(B) 注:由公式2k-1得 A. 8 B. 16 C. 32 D. 15 (4) 下面描述中,符合结构化程序设计风格的是(A) A. 使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑 B. 模块...

    多功能.Net翻页组件(太实用了)

     进行数据绑定时只需一条语句,大大提高软件开发速度和开发效率。  深入.Net底层的事件处理和数据处理机制,翻页速度更快,完全胜任企业级数据实施方案。  接受标准的CssClass样式表控制按钮及标签,风格样式更加...

Global site tag (gtag.js) - Google Analytics