标签: sql-server

SQL 性能大变量 Varchar 转换成小列

将较大的 varchar 变量放入小列是否存在任何性能问题?我在执行计划中没有看到任何性能差异。只想验证。

例子,

create table dbo.Product
(
    ProductId int identity(1,1),
    ProductName varchar(25),
    ProductDescription varchar(255),

    constraint pk_ProductId Primary Key (ProductId)
)
Run Code Online (Sandbox Code Playgroud)

案例 1 大 varchar(4000)

declare @ProductNameVar varchar(4000),@ProductDescriptionVar varchar(4000)

set @ProductNameVar = 'Table'
set @ProductDescriptionVar ='manufactured , oak table, round edges..' 

INSERT INTO dbo.Product(ProductName, ProductDescription) 
VALUES (@ProductNameVar, @ProductDescriptionVar)
Run Code Online (Sandbox Code Playgroud)

案例 2 小型 Varchars

declare @ProductNameVar varchar(25),@ProductDescriptionVar varchar(255)

set @ProductNameVar = 'Table'
set @ProductDescriptionVar ='manufactured , oak table, round edges..' 

INSERT INTO dbo.Product(ProductName, ProductDescription) 
VALUES (@ProductNameVar, @ProductDescriptionVar)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

performance sql-server performance-tuning

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

SQL 左连接返回空列

我想LEFT JOIN在两个表上做一个,其中一个表有一个日期时间列,另一个表有一个日期列。当我在 SQL Server 中工作时,我曾经CONVERT将日期时间更改为日期。然后我写了 join 语句:

SELECT CONVERT(date,db1.dbo.table1.datecolumn), db2.dbo.table2.datecolumn
FROM db1.dbo.table1
LEFT JOIN db2.dbo.table2 
    ON db1.dbo.table1.datecolumn = db2.dbo.table2.datecolumn
Run Code Online (Sandbox Code Playgroud)

查询返回 table1 中的日期列,但 table2 中的列仅填充为 NULL 值。我不确定我做错了什么。我尝试CASTCONVERT,而不是,但没有运气。转换有什么事情发生吗?任何帮助表示赞赏。

null join sql-server

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

缩小数据库的性能优势

我有一个 1.5 TB 的数据库,之前只有 200 GB 的可用空间。由于性能问题,企业决定将 1 个月的数据保留政策减少到 1 周。由于这 3 周的数据被删除,现在它有 700 GB 的可用空间空间。

不再需要因数据删除而增加的 500 GB 可用空间,并且没有机会再次增长数据以占用这 500 GB 空间。

我计划收缩数据库(使用收缩文件命令)并运行索引优化过程来重建索引,如果碎片大于 30%。释放的空间不会被其他系统使用,但是可以在不久的将来有效地用于日志文件和临时数据库的增长。

除了空间释放之外,通过减小数据库的大小是否对性能有任何好处?

以前与缩小(在堆栈交换中)相关的问题没有正确回答我的查询。

预先感谢您的友好回复!!!

sql-server

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

Tempdb 文件在同一驱动器上是固态的?

我们目前在固态驱动器上有 tempdb(8 个文件)。

我们知道建议主 mdf 和事务日志 ndf 位于不同的驱动器上,以减少争用。tempdb 文件应该在不同的驱动器上以保持一致的原则,还是可以都在同一个驱动器上?

以下文章指出它们都在同一个驱动器上,但正在寻找背景技术解释。 对多个 tempdb 文件的建议

ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev2', FILENAME = N'G:\tempdb2.ndf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
GO
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev3', FILENAME = N'G:\tempdb3.ndf' , SIZE = 12288000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 0 )
....
Run Code Online (Sandbox Code Playgroud)

performance sql-server sql-server-2012 tempdb performance-tuning

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

UPDATE触发器导致死锁

我有一个 After Update 触发器,其中触发器在同一个表中插入一个值以查找持续时间列。我的目标是每当插入 end_time 值时,触发器将找到hh:mm:ss格式的持续时间并插入到持续时间列中。

问题-触发器导致如此多的死锁,从而阻塞了另一个进程。

列数据类型信息..

Start_time datetime, End_time datetime, Duration time(3)

ALTER TRIGGER [dbo].[GET_DURATION] ON [dbo].[INBOUND_CALL_xxx]
AFTER UPDATE AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
Begin Transaction

               UPDATE INBOUND_CALL_xxx
               SET DURATION = convert(time(0),(END_TIME- START_TIME))                                                     
               FROM INBOUND_CALL_xxx with (nolock)
Commit;
Run Code Online (Sandbox Code Playgroud)

performance sql-server-2008 sql-server sql-server-2012 performance-tuning

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

银行的txt格式

我正在开发一项服务,允许用户存储来自银行的数据,但银行以不同的格式向我提供他们的账户报表,其中之一如下

68520157286 0106201809510981PAY TRAN SPEI -000000000088640000001321436306018973NON1 CLA24 REF 0000000

我想知道是否有人知道这种格式的名称以及如何处理它以将其存储在SQL Server 中,我在 txt 文件中收到这种格式,该文件可以包含一千多条记录。,让我对格式印象深刻的是两件事:

在此处输入图片说明

首先,乍一看我们可能会认为信息是由空格分隔的,如图所示。

其次,数量之间有很多零,这让我很难知道它们是要处理的数量的一部分还是字符分隔格式的一部分。

所以,我的问题是知道格式的名称,以及是否方便处理来自 SQL 的所有信息来存储它,或者是否应该在尝试将其放入数据库之前通过先前的分离过程。非常感谢大家的时间。

sql-server format

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

比较 2 db sqlserver 上的表

我有 2 个数据库的 SQL Server。

我想比较它们,看看哪些表在第一个数据库上而不是在第二个数据库上。

只有表的名称很重要,我不关心这些表中的值。

我该怎么做?

sql-server

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

有没有办法识别数据库同义词背后的对象?

我有一个使用同义词的脚本。我必须更改该代码,问题是我无法理解同义词指的是哪个对象。有办法查到吗?我正在使用创建该同义词的原始数据库实例。

PS 我正在使用 MS SQL Server。

谢谢你的时间。

sql-server t-sql synonyms

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

连接表而不会丢失数据

我处于需要查询数据库中的数据的情况,但正在努力解决如何正确形成查询的问题。基本上我需要从下表中获取数据:

Table: Contact
    contact_id INT [Primary Key]
    first_name VARCHAR(50)
    last_name  VARCHAR(50)

Table: Contact_Phone
    contact_id   INT [Foreign Key/Composite Primary Key]
    phone_number VARCHAR(15) [Composite Primary Key]
    extension    VARCHAR(10), NULL

Table: Contact_Fax
    contact_id   INT [Foreign Key/Composite Primary Key]
    fax_number   VARCHAR(15) [Composite Primary Key]

Table: Contact_Email
    contact_id   INT [Foreign Key/Composite Primary Key]
    email        VARCHAR(100) [Composite Primary Key]
Run Code Online (Sandbox Code Playgroud)

现在并不是我Contacts桌子上的每个联系人都有电话、传真或电子邮件。有些人只有一部电话或传真。其他人只是一封电子邮件。我知道有一个联系人只有一个电话号码。

现在我的问题是,如果我尝试对所有这些表进行简单的查询以查找特定的联系信息,如果其中任何一个都没有条目(例如,我的一个没有传真或电子邮件的联系人) 然后我根本没有返回任何数据。

所以问题是,我如何将这个查询放在一起,以便如果我试图查找特定联系人的信息,即使其中一个发生,我仍然能够看到所有数据(电话/传真/电子邮件)是空白?

join sql-server query

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

MS SQL Server 不在指定的文件组中创建表

我的数据库中有三个文件组:

在此处输入图片说明

默认为三级。现在我想在 PRIMARY 上创建表,它显示以下错误

关键字“primary”附近的语法不正确。

create table tb1
(
    id int identity primary key nonclustered,
    somecolumn nvarchar(15)
)
on PRIMARY;
Run Code Online (Sandbox Code Playgroud)

当我将默认文件组选项更改为 PRIMARY 时,它可以在 PRIMARY 上创建表。当我的语法没有错误时,为什么会显示此错误?

谢谢你的时间。

sql-server filegroups

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