首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >验证SQL Server统计信息

验证SQL Server统计信息
EN

Stack Overflow用户
提问于 2019-03-15 17:27:12
回答 2查看 81关注 0票数 0

从我的使用EF核心的ASP.NET应用程序中,我得到了一个对数据库的查询,其中有相当多的连接(13)。当我执行它时,它会工作--但它需要25秒才能完成。

然而,当我在数据库选项中使用"Legacy Cardinality Estimation“时,执行是即时的。据我所知,基数估计是基于统计数据完成的,因此我执行了exec sp_updatestats。虽然它曾经在相同的数据库(但不同的查询)上提供了帮助,但这一次它没有。

因此,我想到的第一个问题是:如何验证统计数据的正确性?如果是这样,基数估计器为什么会做出糟糕的选择?

或者更笼统地说:我如何在不求助于上述选项的情况下解决这个问题(打开一些遗留的东西听起来不太对)?

EN

回答 2

Stack Overflow用户

发布于 2019-03-15 17:54:10

检查索引rowcnt/rows是一个很好的开始。您通常可以在此处看到问题,尽管可以通过更新统计信息或获取最新的CU (累积更新)或SP (服务包)来修复它,即使这样,它也可能尚未修补。

我在2014年的sp2和sp3中遇到了这个问题,仅靠service packs无法修复基数估计器。您需要获取最新的累积更新。

代码语言:javascript
运行
AI代码解释
复制
declare 
     @table_name varchar(128) = 'TableName'
    ,@schema_name varchar(128) = 'dbo'

/* 2014 and after I believe */
select max(p.rows) rows from sys.tables t 
inner join sys.indexes i on t.object_id = i.object_id
inner join sys.partitions p on t.object_id = p.object_id and p.index_id = i.index_id -- current-ish
where t.name = @table_name and schema_name(t.schema_id) = @schema_name

/* 2008 to 2012 I believe */
select max(i.rows)
from sys.tables t
inner join sys.sysindexes i on i.id = t.object_id -- the old dbo.sysindexes becomes a view
where t.name = @table_name and schema_name(t.schema_id) = @schema_name

/* 2000 and possibly earlier */
select max(i.rows)
from sys.tables t
inner join dbo.sysindexes i on i.id = t.object_id -- a real live table, still selectable
where t.name = @table_name and schema_name(t.schema_id) = @schema_name
票数 0
EN

Stack Overflow用户

发布于 2019-03-18 15:23:53

不幸的是,当涉及到CE时,一切都是相同的。你自己说的。25秒vs <1秒,并且两者使用相同的统计数据、更新与否、相同的索引、相同的查询等等。我做了很多关于CE选择的工作,(在统计,索引和所有标准的推荐操作之后)一个估计器可能工作得很好,另一个可能很差。并且这可以是在具有1个过滤器差异或2个不同查询的非常相同的查询中产生完全相等的结果。在大多数情况下,两者都表现良好或可以接受。然而,有时他们中的一个完全搞砸了。在这里,你必须使用传统的CE2012,或者让你的声明“CE2014友好”。

或者,如果您的语句在代码中有明确的标识,例如'mystatementA021‘,那么您可以保留自己的统计数据,并选择CE2012或2014。但这是一个更长的故事。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55187893

复制
相关文章
获取当前jar包路径_java获取jar文件
获取classpath的路径,若没有其他依赖,在cmd下运行该可执行jar包,则该值即为该jar包的绝对路径。代码如下:
全栈程序员站长
2022/11/10
7.6K0
获取手机nfc的MW version 和 FW version 记录
/vendor/nxp/opensource/commonsys/packages/apps/Nfc/nci/jni/NativeNfcManager.cpp 中会打印NFC的版本信息。
用户7557625
2020/07/28
1.1K0
Spring Boot -- 如何获取已加载的JAR文件流
最近遇到一个需求,在程序运行期间,拿到已加载类对应的jar包,然后上传到另一个地方,本以为利用ClassLoader直接定位到jar的InputStream流直接读取就ok,事实却没有这么简单,我把问题总结为以下几个小点,逐一解决。
屈定
2020/02/10
5.6K1
Error:Could not download ecj.jar : No cached version available for offline mode
最近重新打开老项目时,发现要配置一些东西,结果半天没有配置完,我寻思是网络问题,然后就换了一个网络,然后就报错了。错误如下
晨曦_LLW
2020/09/25
7770
如何替换jar中的jar配置
spring boot项目,使用jar方式打包部署;有时候我们需要替换项目中某个引用jar,又不想将整个项目重新打包。
summerking
2022/09/19
2.7K0
Jenkins获取jar包的快照号
主要用于打jar包的工程,显示快照包的名字。当jar打包完成后,会在target目录中,截取快照名。
陈不成i
2021/06/03
8360
Android项目实战(三十三):AS下获取获取依赖三方的jar文件、aar 转 jar
使用 Android studio 开发项目中,有几种引用三方代码的方式:jar 包 ,类库 ,gradle.build 的compile依赖。 大家会发现github上不少的项目只提供compile依赖的方式,但是当用到jar包使用过的情况 且 该项目不提供jar包的时候怎么办? 其实Android Studio 在compile方式 依赖三方项目的时候 就已经在本地有了该项目的jar包了,我们只需要去本地找到那个jar包就可以了。 查找方法: 一、项目大纲路径下的:External Libraries
听着music睡
2018/05/18
2.9K0
获取jar包内部的资源文件
通常获取一个资源文件很简单,问题是对于jar包内的资源文件,可能会发生意外。假如这里有一个文件操作的类:
用户7798898
2020/09/27
1.7K0
获取main函数的类以及jar包
抛出异常的时候,异常栈中有所有函数栈,这样就可以找到main函数所在的类。不过也需要注意,这个异常要在主线程抛出,不能在其他线程抛出。
十毛
2021/06/29
1.4K0
‘dependencies.dependency.version‘ for mysql:mysql-connector-java:jar is missing.问题处理
项目使用的技术框架是Spring Boot,依赖管理工具是Maven,需要用到数据库所以引入了mysql-connector-java相关jar包。
程序员十三
2023/06/10
6770
如何直接运行jar包_怎么运行jar文件
nohup:不挂断地运行命令,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中
全栈程序员站长
2022/11/10
2.7K0
idea打包jar文件_idea如何打包jar外部包
因为有好多项目,所以这里需要建立空,如果只有一个目的项目,可以选择根据这个依赖,选择下面一项。
全栈程序员站长
2022/11/10
2.4K0
idea打包jar文件_idea如何打包jar外部包
如何发布jar到clojars
Clojars 是一个为开源 Clojure 类库打造的仓库,截止2017年9月17日,大概有19831个项目发布在上面。整个网站也是用 Clojure 编写的。
lambeta
2018/08/17
8750
如何发布jar到clojars
java-解决jar包反射获取不到类
在开发一个基础工具包给业务组的小伙伴们使用的时候,发现一个小问题,就是在反射的时候在自己电脑上运行的正常,但是打成jar包后,就class not fuond,有点奇怪。 如果能借助Spring这个都不是事,关键是不能用。
潇洒
2023/10/20
7370
【错误记录】jar 执行错误 ( java.lang.UnsupportedClassVersionError: Unsupported major.minor version 52.0 )
在 【IntelliJ IDEA】导出可执行 JAR 包 博客中导出的 jar 包 ;
韩曙亮
2023/03/29
5080
IDEA 激活教程,如何使用 IDEA 解决 jar 包冲突?如何正确导入 jar 包?
在我们的项目开发中,如果使用 Maven 引用了过多依赖,那么就很容易遇到 jar包冲突这个问题。
编程小记
2022/03/23
2K0
IDEA 激活教程,如何使用 IDEA 解决 jar 包冲突?如何正确导入 jar 包?
如何使用Java的JAR文件
hello,大家好,我是小面!今天有个小伙伴私信我说如何使用Java的Jar文件?今天将给大家介绍一下Java的jar文件。
灬沙师弟
2023/03/07
2.3K0
如何使用Java的JAR文件
Maven 如何引入本地jar包
通常大家需要引入一个第三放 jar 包,直接在 maven 仓库中搜索,然后将依赖的格式 copy 到 pom.xml文件中即可。
明明如月学长
2021/08/31
1.6K0
Maven 如何引入本地jar包
MapReduce项目如何输出jar包?
右键单击工程,点开“Export…”,在弹出的对话框中选择“java/JAR file”,
马克java社区
2021/06/24
3670
点击加载更多

相似问题

在表格中折叠/展开div?

10

在graphviz中展开/折叠表格

19

向DataGrid单元中添加展开/折叠按钮

10

表格行折叠/展开css

10

Jquery表格折叠多重展开

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档