标签: query-tuning

SQL Server - 何时使用Clustered与非Clustered Index?

我知道集群索引和非集群索引之间的主要区别,并了解它们的实际工作方式.我理解群集和非群集索引如何提高读取性能.但有一件事我不确定是什么原因让我选择一个而不是另一个.

例如:如果一个表没有聚集索引,那么应该创建一个非聚集索引并且有什么好处呢?

sql-server indexing clustered-index query-tuning non-clustered-index

98
推荐指数
1
解决办法
10万
查看次数

使用过滤统计信息的情况

我正在通过以下链接过滤过滤统计数据.

http://blogs.msdn.com/b/psssql/archive/2010/09/28/case-of-using-filtered-statistics.aspx

数据偏重,一个区域有0行,其余都来自不同的区域.以下是重现该问题的完整代码

create table Region(id int, name nvarchar(100)) 
go 
create table Sales(id int, detail int) 
go 
create clustered index d1 on Region(id) 
go 
create index ix_Region_name on Region(name) 
go 
create statistics ix_Region_id_name on Region(id, name) 
go 
create clustered index ix_Sales_id_detail on Sales(id, detail) 
go

-- only two values in this table as lookup or dim table 
insert Region values(0, 'Dallas') 
insert Region values(1, 'New York') 
go

set nocount on 
-- Sales is skewed 
insert Sales values(0, 0) 
declare @i …
Run Code Online (Sandbox Code Playgroud)

sql-server performance query-tuning sql-server-2012

14
推荐指数
1
解决办法
618
查看次数

如何避免连接过多?

我希望您能帮助讨论如何使用通用方法避免过多的连接。对此有一般规则吗?

目前,我有一个非常复杂的查询,它连接了 11 个表并且性能很差(即使有索引和更新的统计数据)。使用 Entity Framework Profiler,我收到了减少连接数量的建议,而是执行几个单独的查询:link

每个连接都需要数据库执行额外的工作,并且查询的复杂性和成本随着每个连接的增加而迅速增加。虽然关系数据库针对处理连接进行了优化,但执行多个单独的查询通常比具有多个连接的单个查询更有效。

我应该如何修改以下示例以获得更好的性能?

select  *
from   Blogs blog0_
       inner join Posts posts1_
         on blog0_.Id = posts1_.BlogId
       inner join Comments comments2_
         on posts1_.Id = comments2_.PostId
       inner join Users user3_
         on posts1_.UserId = user3_.Id
       inner join UsersBlogs users4_
         on blog0_.Id = users4_.BlogId
       inner join Users user5_
         on users4_.UserId = user5_.Id
Run Code Online (Sandbox Code Playgroud)

sql sql-server join query-tuning

6
推荐指数
1
解决办法
7489
查看次数

SQL查询理论问题

我有一个大的历史交易表(15-20万行MANY列)和一行一列一列.具有一行的表包含日期(最后处理日期),该日期将用于提取trasaction表中的数据('process_date').

问题:我应该将'process_date'表连接到事务表,还是将事务表连接到'process_date'表?

sql sql-server query-tuning

5
推荐指数
1
解决办法
519
查看次数

通过ADO.NET检索SET STATISTICS IO和SET STATISTICS TIME值?

通过Management Studio执行T-SQL查询时,我可以使用SET STATISTICS IO ONSET STATISTICS TIME ON捕获统计信息以进行查询调优.

当我使用.NET客户端API执行T-SQL查询而不是使用Mangaement Studio的UI时,如何收集相同的统计信息?

这似乎是一个显而易见的事情,但在搜索MSDN和Google很长一段时间后,我很难过.我发现最接近的是MSDN上的SQL Server提供商统计信息(ADO.NET),但这些统计信息似乎是客户端关于网络连接的统计信息(例如,发送/接收的字节数),从客户端的角度来看,而不是服务器端统计信息我在找.

.net t-sql sql-server ado.net query-tuning

5
推荐指数
1
解决办法
1897
查看次数

SQLServer的UNION比UNION ALL具有更好的性能?

我知道UNION ALL应该比UNION具有更好的性能(参见:联盟与联盟的表现).

现在,我有这个庞大的存储过程(有很多查询),其中最后的结果是两部分SELECT,它们之间有一个UNION.由于两个数据集彼此都是外来的,我可以使用UNION ALL,它假设更好(没有明显的操作).

我在几个数据库上检查它,它工作正常.问题是我的一个客户给我他的数据库进行性能调整,当我调查它时,我注意到如果我将UNION ALL更改为UNION,性能会更好(!).这是我在存储过程中所做的所有改变.

有人可以解释一下这种情况会怎样?

谢谢,
Ziv

更新:
两个查询的附加执行计划(差异部分): 在此输入图像描述

sql sql-server-2008 sql-server-2008-r2 database-performance query-tuning

5
推荐指数
1
解决办法
3910
查看次数

密码:使用WHERE子句或MATCH属性定义进行完全匹配吗?

在Neo4j(3.0版)中,以下查询返回相同的结果:

1. MATCH (a:Label) WHERE a.property = "Something" RETURN a
2. MATCH (a:Label {property: "Something"}) RETURN a
Run Code Online (Sandbox Code Playgroud)

在处理一些大型数据集时,我注意到(并使用EXPLAINPROFILE进行了验证),在某些情况下,第二个查询之类的查询会更快更好地执行。虽然存在其他实例,两个版本的性能均相同,但我还没有看到第一个版本的性能更好的实例。

neo4j文档和教程也有所不同。两者之间没有明确的比较。docs和tut使用这两个版本,通常倾向于第一个版本(可能是因为非精确匹配只能使用WHERE子句来完成)。但是指南还指出,缩小搜索范围的越早,搜索速度就越快。

  1. 我对两个版本将始终返回相同的结果吗?
  2. 我认为第二个版本通常会更好,因为它会缩小搜索范围,这对吗?

performance neo4j cypher query-tuning

5
推荐指数
1
解决办法
329
查看次数

在部分CHAR列上创建索引

我有一个CHAR(250)列用作varchar(24)列的外键.

在MySQL中我记得我可以创建一个指定列(24)的索引,以便在最左边的24个字符上创建索引.这似乎不可能在MS SQL Server上.

我的问题是:

是否可以在SQL Server 2008上使用索引视图来索引该列的子字符串,如果是这样,它是否会对表的性能产生任何副作用?

sql t-sql sql-server-2008 query-tuning

3
推荐指数
1
解决办法
4176
查看次数

MySQL查询调优 - 为什么使用变量中的值比使用文字慢得多?

更新:我在下面自己回答了这个问题.

我正在尝试修复MySQL查询中的性能问题.我认为我所看到的是,将函数的结果赋给变量,然后运行带有与该变量进行比较的SELECT相对较慢.

但是,如果为了测试,我将比较替换为变量,并将其与我知道该函数将返回的字符串文字等效值(对于给定的场景)进行比较,然后查询运行得更快.

例如:

...

SET @metaphone_val := double_metaphone(p_parameter)); -- double metaphone is user defined

SELECT 

        SQL_CALC_FOUND_ROWS
        t.col1,
        t.col2, 
        ...

    FROM table t

            WHERE

            t.pre_set_metaphone_string = @metaphone_val -- OPTION A

            t.pre_set_metaphone_string = 'PRN' -- OPTION B (Literal function return value for a given name)
Run Code Online (Sandbox Code Playgroud)

如果我使用选项A中的行,则查询速度很慢.

如果我使用选项B中的行,那么查询速度很快,就像您期望的任何简单字符串比较一样.

为什么?

mysql database-tuning query-tuning

3
推荐指数
1
解决办法
1479
查看次数

泄漏等级1的执行计划引用

运行一个非常简单的查询:

SELECT TOP 10 *
FROM WH.dbo.vw_data m
ORDER BY DateCompleted
Run Code Online (Sandbox Code Playgroud)

大约需要4分钟.

执行的96%由以下内容占用:

在此输入图像描述

警告意味着什么,它是如何解释的?

该字段DateCompleted未编入索引:这是否意味着除非我们使用索引命中备用字段,否则添加索引DateCompleted将始终很慢?

sql t-sql database sql-server query-tuning

3
推荐指数
2
解决办法
4286
查看次数

如何调整此视图?获取时间需要9.968但我想要.5.那么如何提供更好的表现呢

SELECT
/*+ INDEX(ID_BL_REF_NO REF_number_BL_idx*/ DECODE(BL_TYPE,'E',BL_ORIGIN_NAME,'I',BL_FINAL_NAME) FROM_PORT,
 DECODE(BL_TYPE,'I',BL_ORIGIN_NAME,'E',BL_FINAL_NAME) TO_PORT,
(BL_VESSEL_CONNECT||'/'||BL_VOYAGE_CONNECT||'/'||BL_PORT_CONNECT) Mother_vessel_voyage_port,
SUM(BLC_SIZE) No_of_20s,
SUM(BLC_SIZE)  No_of_40s,
SUM(DECODE(BLC_SIZE,'20',1,'40',2)) Teus,
SUM(BLC_GROSSWT) GrossWt,
round((BLC_GROSSWT/SUM(DECODE(BLC_SIZE,'20',1,'40',2))),2) AverageWt,
SUM(DECODE(BLF_MODE,'P',BLF_LOCAL_AMOUNT)) PREPAID,
SUM(DECODE(BLF_MODE,'C',BLF_LOCAL_AMOUNT)) COLLECT,
SUM(DECODE(BLF_MODE,'E',BLF_LOCAL_AMOUNT)) ELSEWHERE,
(SUM(DECODE(BLF_MODE,'P',BLF_LOCAL_AMOUNT)+DECODE(BLF_MODE,'C',BLF_LOCAL_AMOUNT)+DECODE(BLF_MODE,'E',BLF_LOCAL_AMOUNT))/SUM(DECODE(BLC_SIZE,'20',1,'40',2))) AVERAGE
FROM ID_BL_DETAILS,id_bl_containers,ID_BL_FREIGHT
WHERE BL_REFNO=BLC_REFNO
AND BLF_REFNO=BLC_REFNO
GROUP BY BL_VESSEL_CONNECT,BL_VOYAGE_CONNECT,BL_PORT_CONNECT,BL_ORIGIN_NAME,BL_LODPORT,BL_DISPORT,BL_FINAL_NAME,BLC_GROSSWT,BL_TYPE
Run Code Online (Sandbox Code Playgroud)

sql oracle query-tuning

0
推荐指数
1
解决办法
2576
查看次数

Oracle如何计算解释计划中的成本?

任何人都可以解释如何在Oracle解释计划中评估成本吗?是否有任何特定的算法来确定查询的成本?

例如:全表扫描,具有较高的性价比,索引扫描下... Oracle如何评估情况的 full table scan,index range scan等等?

此链接与我要求的相同:关于Oracle解释计划中的成本的问题

但是,任何人都可以用一个例子来解释,我们可以通过执行找到成本explain plan,但它如何在内部工作?

oracle performance oracle10g oracle11g query-tuning

0
推荐指数
1
解决办法
1万
查看次数