`
bigfirebird
  • 浏览: 127564 次
  • 性别: 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语句生成器是一种工具,它能够帮助数据库管理员和开发者快速、高效地创建SQL语句,主要用于数据迁移或数据还原任务。这样的工具在处理大型数据库时尤其有用,因为手动编写和检查复杂的SQL脚本可能会非常耗时且...

    从SQLServer数据库导出SQL语句的程序

    它简化了手动编写大量SQL语句的工作,提高了工作效率,并确保了数据结构的一致性。 值得注意的是,尽管这类工具能极大地方便我们的工作,但在实际操作时仍需谨慎,特别是涉及生产环境的数据导出,应确保不会对现有...

    sql语句优化建议

    - **聚集索引**:在`date`上建立聚集索引,数据按顺序存储,重复值相邻,范围查找时只需扫描特定范围,大幅提高效率。 - **组合索引**:合理的组合索引(如`date`, `place`, `amount`)能同时满足多个查询需求,尤其...

    sql语句生成的小工具

    它们可能会检查索引使用、子查询效率等问题,并提供改进建议的SQL语句。 6. **版本控制集成**:与版本控制系统(如Git)集成,使得SQL脚本可以被版本化和协同编辑,便于团队合作和代码审查。 7. **导出和导入数据*...

    access数据库SQL语句切换工具

    `access数据库SQL语句切换工具`可能是一个软件或脚本,它可以帮助用户在不同的SQL语句之间切换,提高编写和测试SQL语句的效率。它可能具备如下功能: - 自动完成和语法高亮,以帮助编写SQL语句。 - 错误检查和提示,...

    利用binlog还原sql或者恢复数据python工具

    本篇文章将详细探讨如何使用Python工具binlog2sql来从binlog文件中还原SQL语句或恢复数据。 **一、binlog2sql工具介绍** binlog2sql是一款开源的Python工具,其主要功能是从MySQL的binlog文件中解析出SQL语句,...

    PyPI 官网下载 | fast-to-sql-1.1.3.tar.gz

    安装这个库通常通过Python的包管理器pip完成,只需在命令行中输入`pip install fast-to-sql-1.1.3.tar.gz`即可。 “fast-to-sql”库的关键特性包括: 1. **多种数据库支持**:库支持多种流行的SQL数据库,如MySQL...

    SQL语句格式化工具

    - **在线工具**:例如SQLFiddle、DB-Fiddle等网站提供在线的SQL执行和格式化功能,只需粘贴SQL语句,点击格式化按钮即可。 - **IDE插件**:多数数据库管理或开发IDE(如SQL Server Management Studio、DBeaver、...

    sql语句常用语句使用用例

    ### SQL语句常用语句使用详解 #### 一、查询数据(SELECT) **1. 查询所有数据** - **语法**: `SELECT * FROM 表名;` - **描述**: 此语句用于检索表中的所有列的所有数据。 - **应用场景**: 当需要查看表中的...

    sql测试脚本生成工具

    标题中的“sql测试脚本生成工具”指的是一个用于自动化创建SQL测试脚本的软件,它可以帮助开发者在数据库测试阶段快速生成必要的SQL语句。这样的工具通常可以提高测试效率,确保数据库操作的正确性和稳定性。 描述...

    jdbc-mysql-connector-j-8.0.31.jar jdbc-sqljdbc41.jar

    在JMeter中,只需将这个jar文件放入`lib`目录,JMeter就能识别并使用它来建立与MySQL数据库的连接。 另一方面,`jdbc-sqljdbc41.jar`是微软为SQL Server提供的JDBC驱动,版本号4.1。它允许Java应用程序与SQL Server...

    SQL语句生成器 V2.0

    使用SQL语句生成器 V2.0,用户可以选择性地插入或批量插入数据,只需提供数据源,软件就能自动生成对应的`INSERT`语句,大大提高了数据导入的效率。 值得注意的是,该工具仅支持Microsoft SQL Server,因此在2000...

    SQL脚本测试工具

    首先,SQL脚本测试工具允许用户编写和运行SQL语句,检查数据库的结构、数据和查询结果。这些工具通常具有以下功能: 1. **连接管理**:能够连接到多种类型的数据库,如MySQL、Oracle、SQL Server以及本文提到的...

    JEECG 数据权限自定义SQL表达式用法说明

    首先,自定义SQL表达式作为JEECG数据权限控制的核心,允许开发者通过编写SQL语句来定义数据访问的权限规则。在角色授权环节,通过在系统中配置不同的自定义SQL,可以精细地控制不同角色对数据的访问范围和权限级别。...

    go-simplesql

    在Go语言中,通常需要直接编写SQL语句来与数据库交互,但这种方式可能会导致代码中SQL语句过多,不易于管理和测试。 ### 4. Simplesql的用法 `go-simplesql` 提供了一种抽象层,将SQL操作转化为对Go对象的操作。...

    SQLAuto-main.zip

    用户只需设定参数范围,工具会自动生成所有可能的组合,然后逐一执行SQL语句,确保测试覆盖全面。 五、快速构造测试数据 在数据库测试中,构建合适的测试数据至关重要。SQLAuto-main支持快速生成大量测试数据,这些...

    GIS中文查询的中间语言向SQL语句的转换.pdf

    为了使非专业用户更方便地使用GIS,中文查询方式应运而生,用户只需输入简单的中文句子,如“长江流经哪些城市”,系统就能自动解析并执行查询,无需编写复杂的SQL语句或操作图形界面。 在GIS的中文查询系统中,...

    mybatis-generator生成sqlserver数据库Bean、Dao、Mapper代码工具

    Mapper XML文件包含了SQL语句的具体实现,与DAO接口对应,MyBatis框架会根据这些XML文件动态生成SQL执行。 在使用MBG之前,你需要准备以下几样东西: 1. 数据库连接信息:包括数据库URL、用户名和密码,这是MBG连接...

    MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据

    - **提高效率**:通过动态SQL,可以根据不同的业务场景和条件自动生成不同的SQL语句,大大提高了开发效率。 - **减少错误**:避免了手动拼接SQL可能引入的语法错误或逻辑错误。 - **增强安全性**:合理使用动态SQL...

    clickhouse测试数据hits_v1

    列式存储的优势在于,对于分析查询,我们只需要读取所需列,极大地提高了效率。 3. **数据分区与分片**:Clickhouse支持基于列的分区和分片策略,以优化查询性能。我们可以根据`timestamp`字段进行时间分区,比如按...

Global site tag (gtag.js) - Google Analytics