小编a_h*_*ame的帖子

是否可以将行大小估计与最大列宽分离?

换句话说,是否可以声明一列VARCHAR(n)并使其估计大小不是n/2?

一个示例用例可能是存储 URL - 您希望大多数是相对的并且少于 20 个字符左右(例如“About/AboutUs”),但希望偶尔支持带有大量查询字符串参数的长 URL。

sql-server optimization

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

带有一个操作数的“+”运算符!

'+' 运算符在以下语句中的表现如何?

select + 'taco';  --Result is 'taco'
Run Code Online (Sandbox Code Playgroud)

它是与第一个字符串空白('' + 'taco')进行字符串连接,还是其他意思?

mysql sql-server t-sql operator

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

在 SQL 查询中包含 SQL 文件

在 Oracle SQL Developer 中,有没有办法在 SQL 查询中包含 SQL 文件?就像\include{myfile.tex}LaTeX 中的命令一样。

例子:

  • file1.sql 包含 FROM my_table;
  • file2.sql 包含 SELECT * \include{file1.sql}

执行file2.sql从Oracle SQL Developer中应该是相当于执行SELECT * FROM my_table;

oracle-sql-developer

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

是否存在插入 + 删除比更新更快的实际场景?(SQL 服务器)

我只是想知道是否存在插入/删除组合比更新其他插入函数更快的常见场景。

这是我的具体例子。

我必须使用一次包含 1000 条记录的页面更新数据库。(我无法合并页面)。

这些记录中约有 5% 或 50 行是需要“更新”而不是作为全新插入的重复项。

我认为,不是“基于 ID 更新,否则插入新行”的典型功能,“插入所有内容”并在最后一次性删除重复项可能会更快。

两个原因:

  1. 并行性。如果我希望多个进程同时处理这个任务,那么......如果我有一个很大的提交大小和同时搜索和更新 ID 的事务,我可能会遇到行锁。通过“插入所有内容”并稍后删除“旧”记录,我可以有无限的进程同时写入数据。

  2. 我觉得在最后优化一个大的“删除查找”很容易。它看起来像下面这样:

    with CTE as (
       select primary_id,update_date,
              rn = row_number()over(partition by primary_id order by update_date desc)
       from MyTable
    )
    delete from CTE where rn > 1
    
    Run Code Online (Sandbox Code Playgroud)

我的意思是性能提升是存在的——我只是想知道这是否违背了最佳实践。有人能明白为什么插入 + 删除重复项似乎比“更新,如果没有找到,插入”更快?

我可以看到一个危险是在数据加载运行时有一段时间表不准确(在删除之前)。但是在任何更新过程中,这种情况难道不是真的吗?

这也将是数据仓库的临时表,而不是实时使用的数据。我只是想知道为什么我没有经常看到这种方法。

performance sql-server etl insert parallelism

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

将行连接成单个字符串查询,运行 5 小时并计数

我有一张有 260 万条记录的表。它看起来像这样:

email                           prject_name
rafael.nadal@xyz.com              lab1
rafael.nadal@xyz.com              lab2
rafael.nadal@xyz.com              lab3
TEST@TEST.COM                     shift1
TEST@TEST.COM                     shift2
Run Code Online (Sandbox Code Playgroud)

但我希望我的桌子看起来像这样:

email                     project_name
rafael.nadal@xyz.com     lab1, lab2, lab3
TEST@TEST.COM            shift1, shift2, shift3
Run Code Online (Sandbox Code Playgroud)

我用过这个查询

select distinct email ,
STUFF((Select ','+project_name
from dbo.[UMG sent 2016] as  T1
where T1.email=T2.email
FOR XML PATH('')),1,1,'') from dbo.[UMG sent 2016] as T2;
Run Code Online (Sandbox Code Playgroud)

它已经运行了5个小时。
如何加快流程?

sql-server t-sql group-concatenation

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

Postgresql - Sybase 概念对应

下图很好地描述了 PostgreSQL 的主要概念:

在此处输入图片说明

我发现自己必须使用 Sybase ASE 15,我想知道 Sybase 中有哪些类似的概念。例如,从我目前所了解的情况来看,Sybase 缺乏模式的概念。所以一些问题是:

  • Sybase ASE 15 有模式的概念吗?
  • 参照完整性约束的边界是什么?例如,在 PostgreSQL 中,您可以跨模式(但不能跨数据库)使用外键。Sybase ASE 15 是什么情况?

sybase

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

需要解释多对多关系的 SELECT 查询

我有两个通过另一个(多对多)相关的表

这是模式摘录:

CREATE TABLE user (
    user_id  INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    email    TEXT    NOT NULL UNIQUE
);

CREATE TABLE alias (
    alias_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    address  TEXT    NOT NULL UNIQUE
);

CREATE TABLE alias_member (
    alias_id INTEGER NOT NULL,
    user_id  INTEGER NOT NULL,
    PRIMARY KEY(alias_id, user_id),
    FOREIGN KEY(alias_id) REFERENCES alias(alias_id) ON DELETE CASCADE,
    FOREIGN KEY(user_id)  REFERENCES user(user_id)   ON DELETE CASCADE
);
Run Code Online (Sandbox Code Playgroud)

我有一个满足我需求的查询:

SELECT email
FROM
    user,
    alias,
    alias_member
WHERE 
    user.user_id = alias_member.user_id
    AND alias.alias_id = …
Run Code Online (Sandbox Code Playgroud)

sqlite

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

查看 SQL Server 2016 登录审核

我对失败和成功都有登录审核。如何查看实际日志?它们位于何处?

https://docs.microsoft.com/en-us/sql/ssms/configure-login-auditing-sql-server-management-studio

有没有办法忽略服务帐户?

sql-server audit

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

SQL 数据类型和 SmallInt/TinyInt 与常规整数

使用正确的数据类型对 SQL Server 有什么好处?

例子:

  1. SmallInt/TinyInt 与常规整数
  2. 十进制(2)与浮点数
  3. Varchar(100) 与 char(100)

如今,有了现代计算,这真的很重要吗?

谢谢,

database-design sql-server datatypes

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

SQL 在创建另一个索引时可以使用索引吗?

我只是遇到了必须在索引中包含一列的情况。这需要删除索引,然后重新创建它。这让我想到,这肯定是很多不必要的工作。

假设我先创建了新索引,然后删除了旧索引。让我们假设我有这表明旧索引将不会被丢弃,直到某种方式后,新的已创建了一个。

通过在创建新索引时使用旧索引,服务器会获得任何性能优势吗?

index sql-server

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