小编Han*_*non的帖子

PostgreSQL SELECT 的速度是否会受到表中索引过多的不利影响?

我读过,当数据库上有很多索引时,它会严重损害性能,但在 PostgreSQL 文档中我找不到任何关于它的信息。

我有一个非常大的表格,大约有 100 列和 10 亿行,我经常需要在许多不同的领域进行大量搜索。

如果我添加很多索引(可能是 10 个唯一列索引和 5 到 7 个三列索引),PostgreSQL 表的性能是否会下降?

编辑:随着性能下降,我的意思是SELECT性能;该数据库将每月仅一次,所以更新UPDATEINSERT速度不是问题。

postgresql performance index

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

交叉应用与内部连接

我最近阅读了很多关于CROSS APPLYvs 的文章INNER JOIN。我尝试编写一些查询,它们都以类似的方式工作,执行计划似乎也相同。

也许有更深入知识的人可以向我解释这两者之间的区别?

OUTER APPLY (SELECT UserID
                , ActionPerformedDate = MAX(ActionDate)
            FROM dbo.AdminUsage
            WHERE SubscriberID = S.SubscriberID
                AND ActionPerformed = 'Some Action'
                AND Description = 'True'
            GROUP BY UserID) AS AU


LEFT JOIN (SELECT SubscriberID
                , UserID
                , MAX(ActionDate) OVER(PARTITION BY SubscriberID) AS ActionPerformedDate
            FROM dbo.AdminUsage
            WHERE ActionPerformed = 'Some Action'
                AND Description = 'True') AS AU
    ON AU.SubscriberID = S.SubscriberID
Run Code Online (Sandbox Code Playgroud)

在这种情况下是否有首选方法?

join sql-server subquery

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

使用 Case 语句检查约束

如果列的输入值大于 3,我想在列上添加一个检查约束,而不应将其保存为 1 个其他输入值。对于这种情况,我使用下面的查询,但在插入数据时显示错误消息。

create table tblTestCheckConstraint 
(
id int,
NewColumn int
)


alter table tblTestCheckConstraint
add constraint chk_tblTestCheckConstraint_NewColumn1 CHECK  
(
    CASE
        WHEN NewColumn >4 THEN 1
        ELSE NewColumn
    END = 1
)
Run Code Online (Sandbox Code Playgroud)

插入语句:

insert into tblTestCheckConstraint values ( 1,5)
insert into tblTestCheckConstraint values ( 1,2)
Run Code Online (Sandbox Code Playgroud)

错误信息:

Msg 547, Level 16, State 0, Line 1
The INSERT statement conflicted with the CHECK constraint "chk_tblTestCheckConstraint_NewColumn1". The conflict occurred in database "DBName"
, table "dbo.tblTestCheckConstraint", column 'NewColumn'.
The statement has been terminated.
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server check-constraints

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

索引过多的表怎么办?

我是这家公司的新 DBA。我看到他们的一些表有很多索引;例如,有些超过 50 或 60。

这是一件好事吗?从我的研究来看,这似乎对性能不利。

你会如何处理这个?

我想删除所有索引并从 0 开始。我认为开发人员一直在使用 Tuning Advisor 并没有真正了解索引。

index sql-server-2008 sql-server

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

收缩事务日志文件时偶尔会出错

我有一个每小时运行一次的事务备份作业。

首先它将数据库日志备份到另一个驱动器,然后缩小日志并删除旧.trn文件。

维修工作

中间任务使用以下代码缩小日志文件:

USE myDB
DBCC SHRINKFILE('myDB_LOG', 0, TRUNCATEONLY)
Run Code Online (Sandbox Code Playgroud)

但是,有时我会收到以下错误。

说明:执行查询“USE myDB DBCC SHRINKFILE('myDB_LOG'...”失败并出现以下错误:“备份、文件操作操作(例如 ALTER DATABASE ADD FILE)和数据库上的加密更改必须序列化。重新发出当前备份或文件操作操作完成后的语句。将数据库上下文更改为“myDB”。”。可能的失败原因:查询问题、“ResultSet”属性设置不正确、参数设置不正确或连接未正确建立。 End Error DTExec: The package execution returns DTSER_FAILURE (1). Started: 22:00:19 Finished: 22:04:17 Elapsed: 238.26 seconds. The package execution failed. The step failed.

为什么会这样?

有没有更好的方法来备份和收缩数据库日志?

sql-server-2008 sql-server maintenance

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

选择日期范围为当前年份减去 #years 的记录

我想从比当前年份减去“x”年之前的时间点选择并最终删除记录。

我不确定最有效的方法来做到这一点。

oracle

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

如何将 varchar 值列表插入到单列表中?

在 SQL Server 2005 中:

CREATE TABLE __RADHE
(
    itemNo varchar(10) not null primary key clustered
);
GO

INSERT INTO __RADHE ???

'34926840', '34927020', '34927202', '34927384', '34927566',
'34927830', '34927889', '34930743', '34930750', '34927897',
'34927848', '34927574', '34927392', '34927210', '34927038',
'34926857', '34917120', '34917286', '34917443', '34926865',
'34927046', '34927228', '34927400', '34927582', '34927855',
'34927905', '34930768', '34930776', '34927913', '34927863',
'34927590', '34927418', '34927236', '34927053', '34926873',
'34917450', '34917294', '34917138', '34917146', '34917302',
'34917468', '34926881', '34927061', '34927244', '34927426',
'34927608', '34927871', '34927921', '34930784', '34927616',
'34927434', '34927251', '34927079', '34926899', '34917476',
'34917310', '34917153', '34917161', …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server insert

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

SQL Server - 从子查询/派生表中删除

有没有办法可以把下面的SELECT语句变成一个DELETE

I would like to delete the corresponding returned records from the [ETL].[Stage_Claims] table.

Since I used derived tables I can't reference the Stage_Claims table.

To summarize, the 2 physical tables used in the below query have identical structures. Only difference is DUPS_Claims is a subset of Stage_Claims.

DUPS_Claims contains duplicate records found in Stage_Claims. If a record exists 3 times in Stage_Claims, we will have that record 3 times in DUPS_Claims as …

sql-server

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

根据 15 分钟的间隔获取计数

我有一个包含通话记录的表:

tbl_calls

cl_Id
cl_StartDate
cl_endDate
Run Code Online (Sandbox Code Playgroud)

我传递两个参数@StartDate@EndDate给我的存储过程。

我的要求是在每 15 分钟的持续时间内获取通话记录的数量。

例如,如果:

@StartDate = '2015-11-16 00:00:00.000', 
@EndDate = '2015-11-16 23:59:00.000'
Run Code Online (Sandbox Code Playgroud)

输出应该是:

Date                        Count
2015-11-16 00:00:00.000      10(Count of startDate between '2015-11-16 00:00:00.000' AND '2015-11-16 00:15:00.000')
2015-11-16 00:15:00.000       7(Count of startDate between '2015-11-16 00:15:00.000' AND '2015-11-16 00:30:00.000')
2015-11-16 00:30:00.000      50(Count of startDate between '2015-11-16 00:30:00.000' AND '2015-11-16 00:45:00.000')

upto @EndDate
Run Code Online (Sandbox Code Playgroud)

我已经尝试了以下查询,但它不能正常工作。有一个更好的方法吗?

DECLARE @StartDate DATETIME = DATEADD(DAY,-1,GETUTCDATE()),
        @EndDate DATETIME = GETUTCDATE()

SELECT New 
FROM
    (SELECT 
         (CASE 
             WHEN cl_StartTime BETWEEN @StartDate AND …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2008-r2 count date

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

如何识别默认邮件配置

在 SQL Server 中,我们可以设置多个电子邮件配置,其中只有一些设置为默认值。

我尝试使用以下查询来获取帐户列表:

select *
from msdb.dbo.sysmail_profile p 
    join msdb.dbo.sysmail_profileaccount pa on p.profile_id = pa.profile_id 
    join msdb.dbo.sysmail_account a on pa.account_id = a.account_id 
    join msdb.dbo.sysmail_server s on a.account_id = s.account_id
Run Code Online (Sandbox Code Playgroud)

有什么方法可以识别默认邮件配置文件吗?

sql-server sql-server-2012 database-mail

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