`
shenkun_918
  • 浏览: 27441 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

sqlserver数据统计一

阅读更多

 

        Csdn2010 优秀博文中有一篇数据库方面的文章很好(用csdn的站内搜索也没有找到,幸好这篇博文地址保持起来了), http://blog.csdn.net/yzsind/archive/2010/12/06/6059209.aspx ,这几天会做一些数据库的操作,记录下操作步骤。以下操作只是在考虑怎么能尽快的把数据取出来,是特定环境下的。以下操作会涉及索引,标量子查询,分区几个方面。

    

数据库为之前系统的为 sqlserver 。此次操作涉及到表有 mobile 218 条数据, 9 列) ,service(149 条数据, 12 ) channel(42 条数据, 12 ) Spinfo(21 条数据, 8 ) service_log service mobile url access_date ip 5 字段,约 4 千万条数据,按月大概有 500 多万条数据)。

目标是需要统计 service_log ,按照月进行统计分析汇总。并且其他表中取出关联数据。导出了建表语句放在附件中。

    select count(*) from service_log 发现很慢,需要接近 20 分钟以上。那么任何类似的 sql:select …… from table1,table2…… where …… ,就不用写了。

    建立索引,对时间建立索引,建完有性能有了很大提升,差不多要 1 分钟。做关联之前毫无疑问,我们需要以时间段缩小数据量, select … from service_log where access_date between '2010-05-01' and '2010-05-30' .

    对于关联,首先试用了标量子查询,得到的结论是,标量子查询无法使性能得到改善(至少 sqlserver2005 是这样的)。这里将使用标量子查询和没有使用标量子查询的 2 sql 贴出来,不过使用标量子的 sql 可读性会好些。

 

没有使用标量子查询的sql: Select m.name,s.name,s.url,sp.name ,num.n from dbo.service s,dbo.service_log sl,(select count(*) as n ,sl.service as id from dbo.service_log sl where sl.access_date between '2011-02-01' and '2011-03-01' group by sl.mobile,sl.service) num, (select sp.id ,sp.name from dbo.spinfo sp) as sp, mobile m where sl.service=s.id and s.id = num.id and s.sp = sp.id and m.did=sl.mobile


 

使用标量子查询的sql: select (select name from dbo.mobile m where m.did=sl.mobile) as mobile, sl.service,s.name ,s.url, (select c.name from dbo.channel c where c.id = s.channel) as c, (select sp.name from dbo.spinfo sp where s.sp = sp.id) as sp, sl.num from dbo.service as s, (select sl.service ,sl.mobile as mobile,count(*) as num from dbo.service_log sl where sl.access_date between '2011-02-01' and '2011-03-01' group by sl.mobile,sl.service WITH CUBE) as sl where s.id = sl.service


 

    对于索引而言,分为聚集索引和非聚集索引。这 2 个差别,以字典按照拼音和偏旁来作解释比较好理解(详细见上面连接中的解释)。读了这个后,应该会对聚集索引和非聚集索引有一个了解 . 显然对于此处时间来讲,聚集索引和非聚集索引而言,该处建立聚集索引会使查询快些。 变为聚集索引后,可以发现上面的 sql 的查询,有 1 分钟变为 2 秒了。

   

   服务器上约 4000 万数据接近 2 秒,在本地数据库中有部分数据,大概有 1000 万条数据,用时不到一秒。更进一步的优化,可以用到表的分区,对于 sqlserver 表的分区操作。这有几篇篇博客写的很详细, http://blog.csdn.net/Sky_666/category/522973.aspx 。其中也讲到,对于已有数据库,可以对聚集索引进行表分区。

   

   同时可以结合缓存进行优化,之前做个一个项目进行过尝试。将所有基础表全部缓存,涉及到关联的操作,直接调用缓存的数据,不做表关联。大部分数据库操作只是针对一个表,这样所带来的是代码量会增大,可以借助ehcache 来处理这方面的工作。不过实际运用之中还是要依据情况来选择处理方式,这种几千万条数据的操作,直接用sql来操作就可以了。

 

分享到:
评论

相关推荐

    sql server数据库查看器

    SQL Server数据库查看器是一款专为SQL Server设计的强大而便捷的数据库管理工具,它提供了一种直观的方式来浏览、管理和操作数据库中的数据。对于SQL Server初学者和经验丰富的DBA(数据库管理员)来说,这款软件都...

    从Sqlserver移植到DM参考手册[csdn]

    2.1.2 统计SQLServer数据中的对象以及表数据量 2 2.2 准备移植环境 3 2.2.1 DM移植环境 4 2.2.2 SqlServer移植环境 5 2.3 常规对象及数据迁移 6 2.3.1 指定迁移计划 6 2.3.2 表对象迁移 6 2.3.3 视图对象迁移 9 ...

    最新全国行政区划编码 sqlserver 数据表

    总之,这个"最新全国行政区划编码 sqlserver 数据表"是一个非常实用的资源,对于开发和维护涉及地理位置信息的系统来说,它能够提供基础性的支持,简化地理数据的管理和使用。在使用时,需注意数据的时效性,确保...

    SQLServer数据查询的优化方法

    SQLServer数据查询的优化是一个涉及多方面技术的工作。通过对查询语句、索引以及表结构等方面进行细致的调整,可以有效地提高查询效率,进而提升整个应用程序的性能。需要注意的是,不同的应用场景可能需要采取不同...

    如何使用SQL Server数据库中查询累计值

    SQL Server 是一个功能强大且广泛使用的关系数据库管理系统,通过它可以对数据进行高效的存储、管理和查询。在实际应用中,我们经常需要对数据进行累计计算,例如银行账户余额的计算。本文将介绍使用 SQL Server ...

    如何使用SQL Server来过滤数据

    在SQL Server中,过滤数据是数据分析的关键步骤,尤其在处理关系型数据库时。规范化是数据库设计的基本原则,目的是减少数据冗余,确保数据的一致性和完整性。规范化要求数据以键值关联的方式存在于不同表中,避免了...

    sql server 2000数据挖掘技术指南

    《SQL Server 2000数据挖掘技术指南》是一本深度探讨如何在SQL Server 2000环境下进行数据挖掘的教程。数据挖掘是利用算法和统计方法从大量数据中发现模式、趋势和关联的过程,它对于商业智能、预测分析以及决策支持...

    SQLServer7指南(下)

    《SQLServer7指南(下)》是一份专为SQL Server 7.0用户设计的详尽教程,旨在帮助用户深入理解和掌握这一版本的数据库管理系统。SQL Server 7.0是微软发布的一个重要的数据库产品,虽然现在已经较为老旧,但对于理解...

    sql server 2000 试题汇编答案

    SQL Server 2000是微软公司推出的一款关系型数据库管理系统,它在20世纪末至21世纪初广泛应用于企业级数据管理。本压缩包文件"sql server 2000 试题汇编答案"显然是针对SQL Server 2000的练习题集及解答,旨在帮助...

    SQL Server 数据转换图文教程.rar

    聚合函数如`SUM`、`AVG`、`COUNT`、`MIN`和`MAX`用于对一组数据进行统计分析。在SQL Server中,可以使用`GROUP BY`语句结合聚合函数对数据进行分组计算,实现数据汇总。 5. **数据导入导出** SQL Server提供了`...

    深入解析sqlserver 2008 Microsoft SQL Server 2008 Internals

    1. **存储引擎**:SQL Server 2008的存储引擎是其核心部分,负责数据的管理和访问。书中详细讨论了页和分配结构(如B树索引)、事务处理、锁与行版本控制、内存管理以及查询执行计划的生成。 2. **查询优化器**:...

    省市县三级(SQL Server数据

    总之,省市县三级数据在SQL Server中的管理和使用涉及到数据库设计、查询优化、数据安全等多个方面,是业务系统中不可或缺的一部分,尤其在涉及地理位置、人口统计等领域的应用中起到关键作用。通过高效地管理和利用...

    sql server 2008 递归查询所有上级或下级数据

    在SQL Server 2008中实现递归查询来获取所有上级或下级数据是一项非常实用的技术,尤其是在处理具有层次结构的数据时。本篇将详细解释如何利用Common Table Expressions (CTE)来完成这样的查询,并对提供的示例代码...

    SQLServer2008Client绿色纯净版

    这个"SQLServer2008Client绿色纯净版"是一个便携式的安装包,无需复杂安装过程,解压后即可直接运行。 ### 1. SQL Server Management Studio (SSMS) SQL Server Management Studio是SQL Server 2008客户端的核心...

    SQL Server数据

    在本压缩包中,"SQL Server数据"可能包含了一系列与SQL Server相关的数据库文件、备份文件、脚本或者配置信息。 首先,我们要理解SQL Server的核心概念。SQL(Structured Query Language)是用于管理关系数据库的...

    SQL Server 中文帮助文档 chm格式

    1. **SQL Server架构**:了解SQL Server的核心组件,如数据库引擎、Analysis Services、Integration Services、Reporting Services等,以及它们在数据处理中的作用。 2. **安装与配置**:包括SQL Server的安装步骤...

    SqlServer2000性能工具Profiler.doc

    SQL Server Profiler 是一个强大的工具,用于监测 SQL Server 数据库的性能和行为。它允许管理员实时查看和记录数据库发生的各种事件,例如查询执行、锁定、错误等,从而帮助诊断性能问题和异常。以下是对 SQL ...

    SQL Server 2000试题汇编第一单元答案

    SQL Server 2000是微软公司推出的一款关系型数据库管理系统,它在IT领域中扮演着重要的角色,尤其是在数据存储、管理和分析方面。本题目汇编聚焦于SQL Server 2000的基础知识,旨在帮助学习者巩固和提升对这个系统的...

Global site tag (gtag.js) - Google Analytics