【SQL优化】
文章平均质量分 65
LongRui888
龙腾虎跃,睿意进取,加油!
展开
-
SQL优化:统计信息的显示
显示表或索引视图的当前查询优化统计信息对于表,统计信息是根据索引或表列的列表创建的。统计信息包含一个带有统计信息的相关元数据的标题、一个用于度量各列之间的相关性的密度向量、一个带有统计信息第一个键列中的值的分布的直方图。DBCC SHOW_STATISTICS 根据统计信息对象中存储的数据显示标题、直方图和密度向量。使用以下语法,您可以指定表或索引视图以及target(目标索引名称、统...原创 2019-01-17 13:06:41 · 609 阅读 · 0 评论 -
SQL优化:统计信息的批量创建、更新
在查询执行时间很重要并且不能等待查询优化器以生成单列统计信息时,sp_createstats对于基准确定之类的应用程序十分有用。 1、sp_createstatssp_createstats的参数包括:参数值默认都是NO.@indexonly:仅对位于现有索引中并且不是任何索引定义中的第一列的列,创建统计信息@fullscan: 将CREATE STATISTICS语句与FU...原创 2019-01-17 13:16:23 · 650 阅读 · 0 评论 -
SQL优化:统计信息的更新时间
通过视图,可以查询到某个表的某个统计信息是什么时候更新过的,从而可以判断统计信息在数据大量变化时,SQL Server是否自动更新了统计信息。如果没有自动更新,就可以手动出发统计信息。代码如下:可以先查看某个表有多少统计信息:sp_helpstats '表名'然后在查更新时间:select stats_date(s.object_id,s.stats_id) [统计信息...原创 2019-01-17 13:23:12 · 1689 阅读 · 0 评论 -
SQL优化:统计信息的更新时会锁表
在更新某个表的统计信息时,会导致阻塞问题吗?通过实验发现(这里省略实现过程),在更新某个表的统计信息时,会对表加上X锁,这个肯定会导致阻塞问题: ...原创 2019-01-17 13:26:30 · 2070 阅读 · 0 评论 -
SQL优化:优化的最佳实践
SQL Server优化查询性能的最佳实践1、在select查询中,只返回需要的列。查询中存在的列越少,则使用的IO和网络带宽就会越少。2、在减少列的同时,也要考虑一下减少行。使用where子句来减少查询返回的行,不要让应用程序在只需显示前10行时,却返回10000行。3、减少join次数。连接到单个查询中的每个表都会增加额外的开销。虽然具体join多少个表会收到数据库设计、容量大小以...原创 2019-01-14 14:33:58 · 1166 阅读 · 1 评论 -
SQL优化:优化的途经
SQL Server查询性能优化需要多种途径: 1、数据库设计。这可能是影响查询性能和数据完整性最重要的因素了,设计决策会影响读取、修改的性能。规范化的OLTP数据库关注数据库完整性、去除冗余、建立多个实体之间的关系,这是一个适合快速事务处理的设计。通常在规范化的OLTP设计中看到很多的表,这意味着在查询中要连接很多表。另一方面,OLAP数据仓库设计经常使用非规范化的星形结构、雪花状结...原创 2019-01-14 14:39:52 · 203 阅读 · 0 评论 -
SQL优化:优化的层次
优化的层次:1、语句级别(包含索引)可以简化sql语句,减少要join的表。对于查询很频繁的表,对where条件中的字段要创建索引。索引除了能加快查询,也会让 update、insert、delete操作变慢,所以,索引不能太多,而是需要根据sql不断调整索引。 2、系统级别:索引碎片、锁定、统计信息、系统参数配置、数据库设计索引碎片:当对表进行update、inser...原创 2019-01-14 14:57:42 · 646 阅读 · 0 评论 -
SQL优化:索引碎片
通过函数 sys.dm_db_index_physical_stats(db_id('wcc'), --数据库id null, --对象id:数据库名称.架构.对象名称 null, --索引id null, --分区号 '' --模式 )可以查看索引碎片的具体情况...原创 2019-01-14 15:50:59 · 644 阅读 · 0 评论 -
SQL优化:索引使用情况
通过使用视图 sys.dm_db_index_usage_stats,可以查询到索引的使用情况,包括:seek次数、scan次数、lookup次数、更新次数。如果seek次数很高,说明索引的使用情况很好,因为索引就是用来seek的。如果scan次数很高,说明大部分都是索引扫描,使用的方式不是太理想。代码如下:create table txt(id int primary key,...原创 2019-01-14 16:08:10 · 481 阅读 · 0 评论 -
SQL优化之监控篇:捕获正在执行的查询
sql监控是优化的第一步,能帮助我们找到执行有问题的sql语句,再进行有针对性的优化。SYS.DM_EXEC_REQUESTS视图中包含了正在执行的查询。SYS.DM_EXEC_SQL_TEXT试图中包含了sql对应的文本,也就是具体的sql语句,方便我们进行优化。 代码如下:select r.session_id, --会话id r.status, ...原创 2019-01-30 11:00:14 · 2798 阅读 · 0 评论 -
SQL优化之监控篇:查看估计的执行计划
上一篇文章讲了,如何捕获到正在执行的sql,拿到sql文本后,就可以看一下sql的估计执行计划,注意,只是估计,不是实际的执行计划。查看执行计划是优化sql的第一步。 1、显示估计的执行计划注意,下面列出了3种方式,在实际使用中需要根据需求,选择一种就可以了。SET SHOWPLAN_TEXT ON --显示估计的执行计划SET SHOWPLAN_ALL ON ...原创 2019-01-30 11:11:32 · 2241 阅读 · 0 评论 -
SQL优化之监控篇:查看实际的执行计划、运行时信息
上一篇讲了查看估计的执行计划,这一篇要讲如何查看实际的执行计划,以及在分析和编译、执行sql时,花了多久时间。另外,我们还能知道一个sql中,引用到的各个表的扫描次数、逻辑读次数、物理读次数,这些对于sql优化是非常重要的。 1、显示实际执行计划、运行时cpu、io的开销--显示实际的执行计划及统计信息、各种操作SET STATISTICS PROFILE ON --...原创 2019-01-30 11:20:59 · 1900 阅读 · 0 评论 -
SQL优化之监控篇:查看缓存的执行计划的性能统计信息
上篇文章讲到,捕获正在运行的sql,以及查看实际执行计划和运行时信息,而本文要讲的是,如何抓取到之前一个时间段内,sql的运行时信息。因为有问题的sql可能已经运行完了(比如,有个sql从早上6点开始运行,到7点运行结束,而现在已经是早上10点了),没办法获取到这个sql,而sql server会把之前运行过的sql的信息记录下来,所以,我们可以从缓存中找到这些历史的sql。 下...原创 2019-01-30 11:31:44 · 878 阅读 · 0 评论 -
SQL优化之监控篇:查看系统最大瓶颈
有时候我们需要从sql server的实例级别,了解等待类型及其等待的时间,从而指导系统的最大瓶颈在哪儿。我们可以通过视图 SYS.DM_OS_WAIT_STATS来获取到这些信息,视图中的字段定义:列名 数据类型 说明 wait_type nvarchar(60) 等待类型的名称。 waitin...原创 2019-01-30 11:40:26 · 619 阅读 · 0 评论 -
SQL优化之监控篇:找到IO争用
上一篇讲到如何从实例级别,知道最大的瓶颈在哪儿。一般情况下数据库的瓶颈很有可能在 IO上,因为当数据库比较大的时候,内存没办法缓存下所有数据,所以,总是需要从磁盘读取数据到内存,在从内存访问数据进行计算的,而磁盘的访问速度和内存的访问速度相差千倍,就会拖慢整个处理速度。 可以通过sys.dm_io_virtual_file_stats 函数, 获取到 数据库-文件级别的性能统计信...原创 2019-01-30 11:49:06 · 1153 阅读 · 0 评论 -
SQL优化中的重要概念:事务
sql 优化和事务有关系?从表面上看,让sql跑的更快,似乎和事务这个概念没什么联系,但是关系数据库中最重要的2个概念就是 关系、事务。关系,对应到sql中,是通过 主外键以及join 来实现的,当然,没有主外键,照样能关联表。事务,是数据库提供的,特别是在高并发的情况下,保障数据一致的一种机制。但实际上,当一个会话在修改数据,而另一个会话又要读取数据时,事务就自动发挥作用了...原创 2019-01-30 12:10:59 · 495 阅读 · 0 评论 -
SQL优化中的重要概念:锁定
上篇文章讲的是事务,这篇就引出另一个重要概念,就是锁定。当一个用户要读取另一个用户正在修改的数据,或者一个用户正在修改另一个用户正在读取的数据,或者一个用户要修改另一个用户正在修改的数据,就会出现并发问题。锁定能防止并发问题。资源的锁定方式称为锁定模式,SQL Server中的锁定模式:共享锁,意向锁,更新锁,排他锁,架构稳定锁,架构修改锁,大批量更新锁,键范围锁。不是所有锁模式都是...原创 2019-01-30 12:16:19 · 1186 阅读 · 0 评论 -
SQL优化中的重要概念:阻塞
上一篇讲到锁定的概念,那么接下来就是如何找到由于锁定而发生阻塞的进程,并解决阻塞问题。1、会话1,修改数据,但没有提交事务BEGIN TRAN select @@SPID --输出:287UPDATE t SET v = '88888'WHERE idd = 12、会话2,由于会话一事务没有提交,导致阻塞BEGIN TRAN select @@SP...原创 2019-01-30 12:26:23 · 487 阅读 · 0 评论 -
SQL优化中的重要概念:死锁
上面几篇文章讲到 事务、锁定、阻塞,最后还有一种比较极端的情况,就是死锁,这也是锁定、阻塞的一种情况。死锁是当两个事务分别锁定了资源,而又继续请求对方已获取的资源,那么就会产生死锁。发生死锁的原因:A、会话以不同的顺序访问表。B、会话长时间运行事务,在一个事务中更新了很多表或行,这样增加了冲突的可能。C、会话1申请了一些行锁,会话2申请了一些行锁,之后决定将其升级为表锁。 ...原创 2019-01-30 12:31:38 · 999 阅读 · 0 评论