
【SQL优化】
文章平均质量分 65
LongRui888
龙腾虎跃,睿意进取,加油!
展开
-
sql优化之:批量处理和分批处理
周五按照客户要求,修改任务参数,重新抽取1-5月的数据,默认情况下只会最近2个月的数据。到了周六,发现任务从早上9点到下午4点,持续了7个小时,考虑到之前一次同步4个月的数据也就是3个小时左右,正常应该早就跑完了。于是把任务给kill掉了,于是从下午4点开始rollback,还好晚上10点回滚完了。。。这次由于一次同步大量数据,导致任务运行失败的问题,我想了几点影响因素:1、这次任务为什么跑了7个小时仍然没跑完?经过监控,发现任务在近12点时,就已经运行到最后一步了,只要把数据inser原创 2020-06-04 14:49:49 · 1610 阅读 · 0 评论 -
SQL优化
总结一下自己在解决这个问题时采用的办法: 一、一开始,觉得速度这么慢是不是因为没建立索引而导致的。于是看了一下数据库中相关表的索引信息,发现只建立了聚集索引,其他字段,特别是一些重要的统计字段,表连接时用的字段,都没有建立索引,于是就针对sql语句中要用到的字段,一一建立了索引。然后再运行一下发现,原来要好几分钟才能出结果的sql语句,现在也就几秒钟,这充分显示了索引的巨大威力。原创 2011-12-18 15:40:23 · 1012 阅读 · 0 评论 -
sql优化:从设计表结构开始(SQL Server中如何让数据库中某一个字段随时间自动更新?)
今天在sql server论坛看到一个帖子:如何让数据库中某一个字段随时间自动更新?那么如何来实现呢?其实用sql server提供的 计算列,就可以轻松实现这个需求。例子如下:员工表,有字段:人员id,姓名,人员编码,人员入职时间,现在希望要增加一个字段显示工龄,就是在公司工作的时间,如 1.5年。if object_id('emp') is not null原创 2016-10-31 11:23:29 · 4000 阅读 · 0 评论 -
SQL优化:采用新语法提升分页性能(本质上就是新的算法)
用python调用selenium进行自动化测试,今天试了一下,非常简单,3步搞定。1、安装selenium就是pip install selenium 就可以了。C:\Users\Administrator>pip install seleniumCollecting selenium Using cached selenium-2.53.6-py2.py3-none-原创 2016-07-04 13:45:53 · 1634 阅读 · 0 评论 -
SQL优化:化解表关联的多对多join
昨天在写了一个存储过程,写好后执行存储过程时,发现非常慢,但是当前系统里的数据量就几十万条,数据量是比较小的。代码如下:declare @biz_date varchar(7)set @biz_date = '2016-10'select '达成率' kpi, 4 as sort, v.emp_id, count(distinct v.store_id)*1.0/nul原创 2016-12-22 14:34:53 · 8808 阅读 · 0 评论 -
SQL优化实战:外层查询条件放到内层查询中(predicate push down)
有了上次安装失败的经验后,这次安装就顺利多了。学习Python从安装各种模块开始。1、通过pip来安装IPy模块C:\Users\Administrator>pip install IPyCollecting IPy Downloading IPy-0.83.tar.gzInstalling collected packages: IPy Running setup原创 2016-05-09 14:14:40 · 4403 阅读 · 0 评论 -
sql优化实战:从1353秒到135秒(删除索引+修改数据+重建索引)
最近在优化日结存储过程,日结存储过程中大概包含了20多个存储过程。发现其有一个存储过程代码有问题,进一步发现结存的数据中有一个 日期字段business_date 是有问题的,这个字段对应的类型是varchar,但是存储过程传入参数的类型是char,导致最后结存进去的数据末尾多了几个空格。比如,应该是'2016-12'的,但现在是'2016-12 '。为了解决这个问题,要修改原创 2016-12-16 17:24:19 · 6274 阅读 · 1 评论 -
SQL优化:设置执行计划的显示格式
要优化,就得看懂执行计划,要看懂执行计划,首先要能显示多种格式的执行计划,而不仅仅是看图形的执行计划,因为文本的执行计划更细,能看出更多的问题。1、设置显示简单格式的执行计划,不执行sql语句 set showplan_text on ----------注意:SET SHOWPLAN 语句必须是批处理中仅有的语句。go declare @t table( t1 int)原创 2016-12-10 14:36:17 · 2080 阅读 · 0 评论 -
SQL优化:使用查询提示
先从一个问题开始:刚在MSDN上看到对Option的解释为:指定应在整个查询中使用所指定的查询提示。 每个查询提示只能指定一次,但允许指定多个查询提示。 使用该语句只能指定一个 OPTION 子句。请问如下问题:1.查询提示是什么意思?2."每个查询提示只能指定一次,但允许指定多个查询提示"这又是什么意思?3.Option中经常用(fast 整数),请问其中的fast和整数原创 2017-03-07 11:59:13 · 820 阅读 · 0 评论 -
SQL优化:统计信息
先从一个问题开始:我知道统计信息是为查询引擎做查询计划用的,现在有以下请教大家,谢谢!1.统计信息是什么时候会自动建立与更新,Insert、update、delete时候会自动更新统计信息吗?2.当我把数据库设置中的"自动创建统计信息"与"自动更新统计信息"设置为True,我还需要建立维护计划中建立计划维护统计信息吗?此处的自动建立与更新在什么时候会自动更新?3.当我修原创 2017-03-07 12:05:32 · 865 阅读 · 0 评论 -
SQL优化:分页方法从top->row_number->offset的演化
1、top这种方法主要是在sql server 2000中使用,效率较差,这里就不详细说了。2、row_number函数这种方法是sql server 2005以后,支持了row_number函数后,才开始使用的。一开始是这么写的,但是效率不好:declare @page_size int;declare @page_num int;--比如:每页10条记录原创 2016-07-28 16:19:53 · 1834 阅读 · 0 评论 -
SQL优化:基本概念(查询调整、资源调控)
查询调整 create table txt(id numeric(10,0) primary key, v varchar(20), vv int )create index txt_v on txt(v)insert into txtselect object_id, type_desc, ...原创 2012-08-04 11:35:45 · 3394 阅读 · 1 评论 -
SQL优化:设置性能相关的服务器参数
1、开启高级选项--显示可以配置的选项EXEC sp_configurego--要显示可以配置的高级选项,必须设置参数show advanced option为1EXEC sp_configure 'show advanced option',1reconfigurego--显示所有可以配置的选项,这里显然包括了高级选项EXEC sp_configurego原创 2016-05-18 15:09:05 · 3886 阅读 · 0 评论 -
SQL优化:建索引的原则
建立索引的基本规则:A、针对优先级高的、使用频繁的查询来增加索引,同时测试查询看索引是否被使用,并且不要同时增加多个索引。 B、除非有非常好的原因,否则在每一个表都增加一个聚集索引。 C、选择很少改变的、高度唯一的、数据类型占用字节少的列做为聚集索引键。非聚集索引应该建立在包含高度唯一数据的列上,基于查询中的应用挑选列,特别是在join和where子句中的列,为非键列考虑使用i原创 2017-03-07 12:39:22 · 2338 阅读 · 0 评论 -
SQL优化:创建索引,导致insert语句长时间等待
SQL Server中创建索引,导致insert语句长时间等待,之前觉得在创建索引,应该会影响insert操作,但一直没有实际验证过,今天验证了下一下,果然是这样。1、在会话1中创建索引:点击(此处)折叠或打开create index idx_temp on temp(biz_date,func_code)2、在会话2中插入一条数原创 2016-12-22 13:49:22 · 6925 阅读 · 3 评论 -
sql优化实战:把full join改为left join +union all(从5分钟降为10秒)
今天收到一个需求,要改写一个报表的逻辑,当改完之后,再次运行,发现运行超时。因为特殊原因,无法访问客户的服务器,没办法查看sql的执行计划、没办法知道表中的索引情况,所以,尝试从语句的改写上来优化。一、原始语句如下:select isnull(vv.customer_id,v.customer_id) as customer_id, isnull(vv.business_date原创 2016-12-09 18:18:07 · 13243 阅读 · 8 评论 -
SQL Server 服务器硬件配置
今天看了公司的数据库服务器的配置。机器是戴尔 PowerEdge R730。CPU是Intel Xeon E5-2620 v3 2.4GHz,用了2路,每路是6核心,12个线程,所以2路一共是12个核心,24个线程(也就是逻辑处理器,超线程技术,1个物理内核模拟2个逻辑内核)。另外,使用了64G的内存。截图如下:顺便科普一下超线程技术:尽管提原创 2016-07-12 13:25:41 · 8459 阅读 · 0 评论 -
【SQL Server性能优化】SQL Server 2008之表压缩
当数据库比较大,而要进行备份时,我们可以启动数据库备份的压缩,这样减少对于磁盘空间的消耗。其实,不仅可以在备份的时候压缩,在SQL Server 2008中,我们还可以对表进行压缩,下面通过压缩前、压缩后的比较,来展示SQL Server 2008强大的表压缩功能。这里在测试数据库找了一个较大的表,共有9439661 条记录,1、压缩前表的大小SP_SPACEUSE原创 2014-09-04 18:38:04 · 2671 阅读 · 0 评论 -
SQL Server的非聚集索引中会存储NULL吗?
SQL Server的非聚集索引中会存储NULL吗?这是个很有意思的问题,下面通过如下的代码,来说明,到底会不会存储NULL。--1.建表if OBJECT_ID('t1') is not null drop table t1gocreate table t1(id int primary key,v varchar(20))insert into原创 2013-11-11 19:44:04 · 2017 阅读 · 0 评论 -
SQL中left outer join与inner join 混用时,SQL Server自动优化执行计划
以下为示例代码: set statistics profile offDECLARE @t TABLE(id1 INT,c VARCHAR(10))INSERT INTO @t VALUES(1,'ab')INSERT INTO @t VALUES(2,'abc')INSERT INTO @t VALUES(3,'abcd')INSERT INTO @t VALUE原创 2011-10-21 11:11:47 · 7672 阅读 · 0 评论 -
【SQL Server学习笔记】全文检索
全文检索提供了基于字符串、二进制数据的智能单词短语的搜索,使得非结构化数据的搜索更为灵活,而且全文检索的执行效率比普通的like查询好很多。在SQL Server2008中全文检索功能已经集成到了数据库中,全文目录不在单独存储在文件系统中,现在也集成在数据库中。 与普通的B树聚集索引、非聚集索引不同,全文索引是由文本数据的索引标记组成的压缩的索引结构。标记是SQL Server在索引过程中原创 2012-07-27 11:58:05 · 3169 阅读 · 0 评论 -
【SQL Server学习笔记】Service Broker创建异步的、数据驱动的消息应用程序
Service Broker 可以创建异步的、数据驱动的消息应用程序,它允许一个数据库发送消息到其他数据库,而不需要等待响应,即使远程数据库不能立即处理这些消息,发送数据库也可以继续其他操作。通过使用T-SQL对象和命令,就可以完成管理Service Broker。 Service Broker 为SQL Server提供消息队列,这样就可以从数据库中发送异步事务性消息到队列,在队列中这些原创 2012-11-14 16:41:49 · 4117 阅读 · 1 评论 -
SQL Server中语句的自动参数化
use mastergoif exists(select * from sys.databases where name = 'test') drop database testgo--创建数据库create database testif exists(select * from sys.tables where name = 't') dro原创 2013-08-15 21:29:06 · 1898 阅读 · 0 评论 -
【SQL Server学习笔记】联接提示、查询提示、表提示
SQL Server的查询优化器在select查询执行的时候产生一个高效的查询执行计划。如果优化器不能选择最优的计划,那么就需要检查查询计划、统计信息、支持的索引等,而通过使用提示可以改变优化器选择查询计划的工程,使优化器生成一个更好的执行计划。1、联接提示 ::= { LOOP | HASH | MERGE | REMOTE }LOOP | HASH | MERGE 指原创 2012-09-04 16:13:27 · 2902 阅读 · 0 评论 -
SQL与NoSQL
关系型数据库的核心就是SQL,也就是关系,有很严谨的数学基础-关系代数,能很好的呈现现实世界的复杂联系。另一个重要的特性就是对事务的支持,也就是ACID,这是由Jim Gray提出的,他因此荣获1998年度的图灵奖。这种数据库,比较适合传统的企业,以及电商公司,也就是交易型。NoSQL,存储的是key-value对,存储模型相对简单,容易扩展,比较适合简单的业务。把任务分解原创 2013-09-06 16:07:31 · 1179 阅读 · 0 评论 -
【SQL Server性能优化】运用SQL Server的全文检索来提高模糊匹配的效率
今天去面试,这个公司的业务需要模糊查询数据,之前他们通过mongodb来存储数据,但他们说会有丢数据的问题,我从业务上了解到,显然对他们公司而言,丢数是绝对不能允许的。 另外,他们说之前也用过SQL Server的全文检索,但速度不够快,不如用mongodb快,当然我不太清楚他们所谓快的具体定义,比如查询只需要1秒,还是1分钟。他们的系统现在采用的是SQL Server,通过复制来实现高可原创 2013-09-04 19:16:44 · 10819 阅读 · 1 评论 -
通过SQL Server的扩展事件来跟踪SQL语句在运行时,时间都消耗到哪儿了?
从网上找的链接: http://blogs.msdn.com/b/sqlsakthi/archive/2011/02/20/sql-query-slowness-troubleshooting-using-extended-events-wait-info-event.aspx网友的帖子:http://bbs.youkuaiyun.com/topics/390577449?page=1#post-3954原创 2013-09-03 19:48:09 · 2646 阅读 · 0 评论 -
【SQL Server性能优化】删除大量数据的方法比较
use mastergoif exists(select * from sys.databases where name = 'test') drop database testgo--创建数据库create database testif exists(select * from sys.tables where name = 't') drop table tg原创 2013-08-16 19:15:26 · 15083 阅读 · 0 评论 -
通过非聚集索引让select count(*) from 的查询速度提高几十倍、甚至千倍
通过非聚集索引,可以显著提升count(*)查询的性能。有的人可能会说,这个count(*)能用上索引吗,这个count(*)应该是通过表扫描来一个一个的统计,索引有用吗?不错,一般的查询,如果用索引查找,也就是用Index Seek了,查询才就会很快,之所以快,是由于查询所需要访问的数据只占整个表中数据的10%左右,如果访问的数据多了,那反而不如通过表扫描来的更快,因为扫描用的是原创 2013-10-12 15:21:55 · 12823 阅读 · 5 评论 -
【SQL Server数据迁移】把csv文件中的数据导入SQL Server的方法
--修改高级参数sp_configure 'show advanced options',1go--允许即席分布式查询sp_configure 'Ad Hoc Distributed Queries',1go--如果配置的值不在合理范围(在最小值最大值范围内),那么可以强制覆盖reconfigure with override gosp_confi原创 2013-10-10 17:09:47 · 9945 阅读 · 0 评论 -
临时表、表变量、CTE的比较
之前在上家公司开发报表时,大量使用了CTE,一个CTE中包含了10到20个的语句,最后关联出结果集。也就是对每个小语句,根据引用语句中相关表的统计信息,估计产生多少行结果,然后再估计这些小语句产生的多个结果集,当再次进行关联时,估计会有多少行结果集,也就是对估计的结果,再次进行估计。这样偏差就会越来越大,最终往往会导致产生的执行计划不够准确,这样往往会有性能问题。 其实,本质问题就是,一个语句几千行,语句太复杂了,SQL Server很难做出最优化的执行计划,这确实难为SQL Server了,所原创 2013-09-08 10:46:59 · 4112 阅读 · 10 评论 -
【SQL Server高可用性】高可用性概述
数据库镜像为用户级数据库提供了高可用性,使得SQL Server数据库只有很少或没有非计划的停机时间,其它时间都处于可用状态。数据库镜像通过将一个服务器上的主数据库,和另一个服务器上的数据库副本的同步,允许数据库冗余,来实现高可用性。这个数据库副本可以用作热备用服务器,使用它可以在任何原因下当主库离线时,做一个快速的故障转移。与故障转移集群不同,数据库镜像不需要像共享磁盘阵列或SAN那样昂原创 2012-11-06 21:48:09 · 2613 阅读 · 0 评论 -
从Clustering Factor说起
引用的链接:http://www.cnblogs.com/killkill/archive/2009/10/04/1578054.html 这篇文章从Oracle 的Clustering Factor说起,尝试比较了ORACLE与SQL Server两个数据库,一开始作者认为这2个数据库在这方面应该差不多,但实际最后发现在一个数据库上的概念,在另一个数据库上不一定有;在一种数据库上有的问题原创 2013-01-22 18:05:46 · 825 阅读 · 0 评论 -
【SQL Server高可用性】分区表、数据库文件组
1、分区表提供了内建的方法,水平划分表和索引中的数据。水平分区是指每一个分区都有相同数量的列,只是减少了行的数量。分区使超大型表和索引的管理变的简单,减少加载时间,改善查询时间,允许更小的维护窗口。 --1.创建数据库create database wcon primary( name = wc_data, filename = 'D:\wc_data.mdf')原创 2012-07-17 10:09:02 · 2369 阅读 · 0 评论 -
【SQL Server学习笔记】索引
通过建立索引,能加快数据的访问速度。每个表只能有一个聚集索引,可以考虑列有:用来排序大型结果集的列,用在聚合函数中的列,包含完整唯一值的列;而频繁更新的列,非唯一的列,非常多列(多个列的组合),非常宽的列则不适合建聚集索引。在选择非聚集索引的列时,一般是那些在where,join,order by等子句中频繁引用的那些列,以及搜索返回较小结果集的高选择性列(少于表中所有行的20%)。此原创 2012-07-25 11:34:06 · 1372 阅读 · 0 评论 -
会话对应的线程id
--会话,连接,阻塞,线程select *from sys.sysprocesseswhere spid = @@SPID--类似于sys.sysprocessesselect *from sys.dm_exec_sessions sinner join sys.dm_exec_connections c on s.session_id = c原创 2012-09-11 17:26:12 · 1591 阅读 · 0 评论 -
SQL优化:表联接的执行计划比较
1、运行如下语句: declare @t table( t1 int)declare @tt table(t1 int ,t2 varchar(10))insert into @t values(1)insert into @t values(2)insert into @t values(3)insert into @t values(4)insert into @tt原创 2016-10-26 16:13:52 · 958 阅读 · 0 评论 -
SQL优化:从设计表结构开始(层次型表结构设计方法)
在业务中,经常会涉及到 数据本身是自关联的情况,比如,组织架构数据,每个人都会有一个上级,那么就是 id,parent_id 这样的设计。但是这么设计之后,如果我要查询某个人的所有下级,就要用递归查询来遍历,一个是查询sql比较复杂,另一个是对于数据量稍大点的,性能肯定不会好到那里去。那要怎么设计层次型表的结构呢?一个比较好的方法就是在表中增加一个字段 cover_code,数原创 2016-12-22 10:48:43 · 3781 阅读 · 0 评论 -
sql优化实战:从40分钟到10秒(更新统计信息)
sql代码如下: SELECT inout.biz_date , inout.EMP_ID , inout.duty_id , inout.store_id , org_id , '原创 2016-11-07 14:53:36 · 1420 阅读 · 0 评论 -
SQL优化实战:临时表+分批提交+按日结存
结存数据太慢怎么办? (1)第1次优化 一开始,客户经理说客户,不想在多个查询中看数据,想在一个表中看所有的数据,也就是说需要把原有的多个查询的sql合并为一个,但是实际上合并后,每个月的原始数据量大概是100w条左右,然后进行计算,最后返回大概3w条左右,速度比较慢。然后,客户反馈,在查询数据时非常慢,基本上查询1个月的数据,需要5分钟,于是对sql中涉及...原创 2016-05-09 13:53:25 · 4590 阅读 · 1 评论