我在linq中创建了一个查询,它返回了我店里最活跃的销售人员的表:
ProjectDB3Context db = new ProjectDB3Context();
db.Database.Log = message => Trace.WriteLine(message);
var result = db.tblUsers.Join(db.tblSales,
u => u.ID,
sl => sl.tblUserId,
我正在试验postgres和sql server。
sql server中的相同查询给出了以下结果:
CPU time = 31 ms, elapsed time = 800 ms.
在postgres中:
38 ms
但是,当我通过.net使用SqlConnection、SqlCommand和NpgsqlConnection执行相同的查询时,NpgsqlCommand
sqlserver速度提高了30%
有人能解释这个吗?
为什么,当像下面这样打开查询时:
WHERE (statement1) AND ((statement2) OR (statement3))
SSMS查询设计器是否将其重构为以下语法:
WHERE (statement1) AND (statement2) OR (statement1) AND (statement3)
我认为这与SQL server解析查询的方式有关,在ors之前运行ands?
有没有一个通用的规则来确定语句的最佳顺序以实现最终优化?
在运行了我自己的测试之后,第二个查询将处理时间缩短了0.5ms。我知道它很小,但会随着
我注意到,包含ROW_NUMER()代码的预准备语句经常被重新编译,尽管它们的SQL代码没有改变。
(来自《Microsoft SQL Server 2008: T-SQL查询》一书中的示例):
WITH SalesRN AS (
SELECT
ROW_NUMBER() OVER (ORDER BY qty, empid) AS rownum,
empid,
mgrid,
qty
FROM
dbo.SalesOrder
)
SELECT
rownum,
empid,
mgrid,
qty
FROM
SalesRN
WHERE
rownum > 100
我们在SQL Server应用程序中遇到了性能问题(用PHP编写,但在管理演播室中运行查询时会遇到相同的时间问题,因此我不认为这是相关的)。
违规查询如下:
SELECT
c.name, t.name AS type, c.is_nullable, c.is_identity,
object_definition(c.default_object_id) AS default_value,
c.precision, c.scale, c.max_length, c.collation_name,
CASE WHEN p.column_id IS NOT NU
通过分析我们产品中的一些查询,我发现使用EntityFramework6参数会影响这一查询的性能。这方面有很多话题,都有不同的意见。
在我的测试用例中,这两个查询是相同的,除了我将params内联到SQL之外。
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
SET STATISTICS TIME ON
exec sp_executesql N'SELECT DISTINCT
[Extent1].[POSTerminalID] AS [POSTerminalID]
FROM [dbo].[POSDataEvents] AS [E
对于这个特殊情况,我将在下面解释,使用表变量比不使用表变量执行得更好。
我想知道为什么,如果可能的话,去掉表变量。
这是使用表变量的查询:
USE [BISource_UAT]
GO
set statistics io on
SET STATISTICS TIME ON
SET NOCOUNT ON;
DECLARE @OrderStartDate DATETIME = '15-feb-2015'
DECLARE @OrderEndDate DATETIME = '28-feb-2016'
DECLARE @tmp TABL
在对StackOverflow数据库的查询进行调优时,我遇到了以下问题:
SELECT TOP 50 Id AS [User Link],
(
SELECT COUNT(*)
FROM Posts
WHERE PostTypeId = 1 AND
LastEditorUserId = Users.Id AND
OwnerUserId != Users.Id
) AS QuestionEdits,
(
SELECT COUNT(*)
FROM Posts
WHERE PostTypeId = 2 AND
我有一个由前端应用程序执行的SQLServer2017 select语句。该查询有三个联接和UNION。每个join语句都有一个子句,其中NAME LIKE '%ibm%'。
当我将%ibm%改为NAME LIKE %services%时,运行速度和往常一样快。
我在所有表上重建了所有索引。我使用了和数据库调优顾问来分析查询。它在我创建的一些列中找到了缺少的统计信息。它还建议创建三个已过滤的索引视图,但在我们的过程中这不是一个选项。所有这些都没有改变查询性能中的任何内容。
查询
SELECT companyName FROM (
SELECT TOP 25
我在SQL Server 2014中有一个SQL查询,它输出以下内容(摘录所示,实际输出约为45,000条记录):
ResaID Agency Sales MTH Market Property
235 Smith 500 February 2015 UK RAV
451 John 1600 February 2015 France PLN
258 Alan 800 January 2015 UK BLS
我需要一
为什么第二个带有EXECUTE命令的查询运行速度比没有第一个查询快4倍?我该如何解决这个问题?
为什么在第二种情况下创建额外的表(可工作的)?
变量:
DECLARE @count INT, @followerId BIGINT
SET @count=1024
SET @followerId=10
第一次查询(常见查询):
SELECT TOP (@count) Photo.* FROM Photo
WHERE EXISTS (SELECT accountId FROM Follower
WHERE Follower.followerId=@followerId
AND Follower.a
可能的解释是在这里
在SQL Server 2014企业版(64位)中,我正在尝试从视图中读取。标准查询只包含一个ORDER BY和OFFSET-FETCH子句,如下所示。
方法1
SELECT
*
FROM Metadata
ORDER BY
AgeInHours ASC,
RankingPoint DESC,
PublishDate DESC
OFFSET 150000 ROWS
FETCH NEXT 40 ROWS ONLY
但是,这个相当简单的查询执行的速度几乎比返回相同结果的查询慢9倍(跳过像150 k这样的大量
我试图找出哪一个是最好的选择,我的主要要求是减少IO。
我有一个记录为500米的表,下面提到的查询是在表上选择默认的聚集索引扫描。
我尝试创建一个覆盖非聚集索引,但它仍然选择聚集索引扫描作为默认。所以我强迫它使用覆盖索引,我的观察是逻辑读取从3M降到1M,但是CPU和持续时间增加了。
我在试着了解这里的行为和什么是最好的。
查询:
set statistics time, io on;
select
min(CampaignID),
max(CampaignID)
from Campaign
where datecreated < dateadd
我有一个包含2697条记录的SQL server 2012表,但该表未编制索引。数据将在未来增加到100k条记录。我不会使用这个表加入任何其他表来检索记录。最初,我创建了一个用户定义的函数来从表中检索记录。
后来我知道视图比用户定义的函数更快,因此我为该表创建了一个视图。
为了了解查询的性能,我包含了以下代码来获取我的UDF、VIEW和直接SQL语句的CPU时间和运行时间。
SET STATISTICS IO ON;
SET STATISTICS TIME ON;
当我使用select查询直接从我的表中提取数据时,我得到了下面的CPU时间和运行时间
SELECT [CollegeName]
在过去的几个小时里,我一直在处理Server全文搜索的各种不同变体。然而,我仍然无法弄清楚排名是如何工作的。我遇到了几个例子,让我感到困惑的是,他们的排名如何高于其他人。例如
我有一张没有索引的5科尔+更多的桌子。所有这些都是nvarchar字段。
我正在运行这个查询(好吧,几乎..。我重新输入了不同的名字)
SET @SearchString = REPLACE(@Name, ' ', '*" OR "') --Splits words with an OR between
SET @SearchString = '"'
我正在尝试追踪性能问题。我正在对SQL Server Express数据库运行以下SQL查询:
SELECT COUNT(OrderID)
FROM FutureOrderHeader
WHERE ScheduledFulfillmentTime >= {0}
AND ScheduledFulfillmentTime < {1}
AND SplitStatus <> 2
AND Deleted = 0
AND OrderMode = {2}
当我使用Entity Framework运行该命令时,如下所示:
var results = ((
我正在构建一个Sharepoint应用程序,它在多个数据库(在同一个MS服务器上)上运行单个SQL查询。就速度而言,我在连接字符串中指定的数据库重要吗?因此,如果我的查询如下:
SELECT col1, col2 FROM db1.table UNION ALL
SELECT col1, col2 FROM db2.table UNION ALL
SELECT col1, col2 FROM db3.table
如果我的连接字符串如下所示,会有什么不同吗?
Server=***;Database=db1; Integrated Security=SSPI; Connection Tim
在执行查询后,我如何知道某个特定用户的排名?这是在SQL Server 2005中实现的。例如,我使用的查询是:
CREATE PROCEDURE [dbo].[getmyRankinContest]
@UserID int
AS
BEGIN
select userid,
from
invitecount
group by userid
order by sum(points) desc
END
但@UserID是我的UserID。如何在上面的代码中添加@UserID来获得我的排名?有什么建议吗?
提前谢谢..
假设有一张大桌子叫..。有1000万行的BigTable。最初,没有主键,所以我添加了标识列以及主键约束和聚集索引。
ALTER TABLE BigTable ADD id int identity(1,1) not null;
ALTER TABLE BigTable ADD CONSTRAINT pk_id primary key CLUSTERED (id);
然后我做了一个简单的选择
select id from BigTable;
server采取1 mins 23 seconds返回结果。
set statistics time on
SQL Server Execution T
在MS Access 2000中,我有一个名为Stack Trace的表,我应该从该表中随机提取400条记录,其中包含不同的文本列。我查看了中的一个示例,向表中添加了一个autonumber字段,并编写了如下查询:
假设评估名称是所需的不同字段,ID是自动编号的主键,那么应该使用什么查询来查找其中一个文本字段具有不同值的随机400条记录?
第一个查询没有不同的评估名称。
SELECT Top 400 *
FROM (SELECT *,
Rnd(ID) AS RandomValue
FROM [Street Data])
ORDER BY Rando
我有一个在使用SET STATISTICS TIME ON时运行的存储过程,整个过程的执行时间是31秒,但是当查看来自STATISTICS TIME的信息时,每个查询的所有运行时间加起来的结果都大于31秒。
例如:
SQL Server Execution Times: CPU time = 109 ms, elapsed time = 128 ms.
SQL Server Execution Times: CPU time = 156 ms, elapsed time = 159 ms.
SQL Server Execution Times: CPU time = 152
这个问题可以是针对SQL server的。当我编写查询时,例如:
SELECT * FROM IndustryData WHERE Date='20131231'
AND ReportTypeID = CASE WHEN (fnQuarterDate('20131231')='20131231') THEN 1
WHEN (fnQuarterDate('20131231')!='20131231') THEN 4