小编Pau*_*ite的帖子

收缩数据库和文件有什么区别?

DBCC ShrinkDatabase()
DBCC ShrinkFile()
Run Code Online (Sandbox Code Playgroud)
  1. 我是否需要同时运行两个 DBCC 命令才能缩小数据库?
  2. 上面这两个有什么区别?

sql-server-2005 sql-server shrink dbcc

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

如何在 SQL Server 2017 中使用 SNAPSHOT_MATERIALIZATION 创建视图?

SQL Server 2017 有几个新的存储过程:

  • sp_refresh_single_snapshot_view – @view_name nvarchar(261) 的输入参数,@rgCode int
  • sp_refresh_snapshot_views – @rgCode int 的输入参数

以及 sys.messages 中的新条目:

  • 10149 – 无法在视图 '%.*ls' 上创建具有 SNAPSHOT_MATERIALIZATION 的索引,因为视图定义包含内存优化表。
  • 10642 – 无法为 '%.*ls' 上的索引 '%.*ls' 设置 SNAPSHOT_MATERIALIZATION,因为它仅适用于视图上的索引。
  • 10643 – 无法为 '%.*ls' 上的 '%.*ls' 设置 SNAPSHOT_MATERIALIZATION,因为它仅适用于视图上的聚集索引。
  • 10648 – 无法为 '%.*ls' 上的分区索引 '%.*ls' 设置 SNAPSHOT_MATERIALIZATION。
  • 10649 – 无法在具有 SNAPSHOT_MATERIALIZATION 的聚集索引 '%.*ls' 的 '%.*ls' 上创建非聚集索引 '%.*ls'。
  • 10650 – 刷新快照视图需要在数据库上启用快照隔离。
  • 3760 – 无法删除具有 SNAPSHOT_MATERIALIZATION 的视图 '%.*ls' 上的索引 '%.*ls'。
  • 4524 – 无法更改视图 '%.*ls',因为它具有快照实现。
  • 4525 – 在刷新视图之前无法对具有快照实现的视图 '%ls' 使用提示 '%ls'。 …

sql-server materialized-view sql-server-2017

37
推荐指数
1
解决办法
5293
查看次数

每个表都应该有一个单字段代理/人工主键吗?

我了解代理/人工密钥的一个好处 - 它们不会改变,而且非常方便。无论它们是单场还是多场,都是如此——只要它们是“人造的”。

但是,有时将自动递增的整数字段作为每个表的主键似乎是一个策略问题。拥有这样一个单字段键是否总是最好的主意,为什么(或为什么不)?

需要明确的是,这个问题不是关于人工 vs 自然的——而是关于是否所有人工键都应该是单字段的

database-design primary-key surrogate-key

36
推荐指数
3
解决办法
5875
查看次数

获取用户在评分表中的排名

我有一个非常简单的 MySQL 表,用于保存高分。它看起来像这样:

Id     Name     Score
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好。问题是:我如何获得用户排名?例如,我有一个用户NameorId并且想要获得他的排名,其中所有行都按Score.

一个例子

Id  Name    Score
1   Ida     100
2   Boo     58
3   Lala    88
4   Bash    102
5   Assem   99
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Assem的排名将是 3,因为他获得了第三高的分数。

查询应返回一行,其中包含(仅)所需的排名。

mysql rank

36
推荐指数
4
解决办法
15万
查看次数

SQL Server Management Studio 打开新窗口缓慢

将 SQL Server 和 Management Studio 从 2008 升级到 2012 后,Management Studio 2012 在打开新查询窗口和对话框时非常慢。

即使右键单击表格也很慢。在我开始在窗口内做任何事情之前,通常至少有 5 秒的延迟。每次都会发生这种情况,即使我连续两次打开同一个窗口。为什么会发生这种情况,我该如何解决?

其他应用程序非常快速地建立与数据库的连接。

我尝试过但没有帮助的事情:

  • 在谷歌上我需要修改我的hosts文件
  • 重置 SSMS“用户定义的设置”
  • 更新视频驱动程序、关闭硬件加速、禁用 DirectX
  • 禁用生物特征认证服务(我没有安装它)。

我的电脑应该足够快了,而且我还有 16GB 内存。我的硬件绝对不应该有问题。看起来 SSMS 正在等待某些东西 - 在发生这种情况时,我可以顺利运行其他程序。

我没有机会安装 SQL Server 2012 CU1 更新,因为安装修补程序似乎存在一些错误风险,我现在不能冒险。

sql-server ssms sql-server-2012

36
推荐指数
4
解决办法
5万
查看次数

MySQL解释中过滤是什么意思?

MySQL 文档中所述

过滤的列指示将由表条件过滤的表行的估计百分比。也就是说,rows 显示估计的检查行数,而 rows × filters / 100 显示将与先前表连接的行数。在 MySQL 5.7.3 之前,如果使用 EXPLAIN EXTENDED,则会显示此列。从 MySQL 5.7.3 开始,默认启用扩展输出,不需要 EXTENDED 关键字。

我还是不明白。这里的“过滤”是什么意思?我们可以从这个专栏中得到什么信息?

例如,当我开始查询时,有些查询会显示 100,而有些查询会显示 18 或任何低于 100 的值。

+-------------+-------+--------+---------+---------+------+----------+
| select_type | table | type   | key     | key_len | rows | filtered |
+-------------+-------+--------+---------+---------+------+----------+
| PRIMARY     | a     | range  | search  | 4       |  174 |   18.00  | <--
| PRIMARY     | b     | eq_ref | PRIMARY | 4       |    1 |   100.00 |
| PRIMARY     | …
Run Code Online (Sandbox Code Playgroud)

mysql innodb mysql-5.7

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

从选择子查询中获取多列

SELECT 
   *, 
   p.name AS name, 
   p.image, 
   p.price,
   ( 
       SELECT ps.price 
       FROM product_special ps 
       WHERE p.id = ps.id
         AND ps.date < NOW() 
       ORDER BY ps.priority ASC, LIMIT 1
   ) AS special_price,
   ( 
       SELECT ps.date 
       FROM product_special ps 
       WHERE p.id = ps.id
         AND ps.date < NOW() 
       ORDER BY ps.priority ASC, LIMIT 1
   ) AS date
FROM product p LEFT JOIN product_special ps ON (p.id = ps.id)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我重复相同的子查询只是为了得到另一列。我想知道有没有更好的方法来做到这一点?

id是两个表中的主键。如果有帮助,我可以让product_special.priority变得独一无二。

subquery

35
推荐指数
5
解决办法
16万
查看次数

NOLOCK 总是不好?

我是一名报表开发人员,希望尽可能提高我的查询效率。我曾经与一位 DBA 一起工作,他告诉我 - 我相信是因为我总是在生产服务器上处理报告 -NOLOCK在每个查询中使用。

现在,我与一个NOLOCK在任何情况下都被禁止的 DBA 一起工作- 即使我的报告(由于几个表上缺乏索引)正在停止复制和系统更新。在我看来,在这种情况下,aNOLOCK将是一件好事。

由于我的大部分 SQL 培训都是来自不同意见的 DBA,因此我想向各种各样的 DBA 提出这个问题。

sql-server locking nolock

34
推荐指数
4
解决办法
4430
查看次数

如何将数据库从 SQL Server 2012 移动到 SQL Server 2005

如果我需要将数据库从 SQL Server 2012(32 位)移动到 SQL Server 2005(64 位),我有哪些选择?

我知道我不能:

  • 在 SQL Server 2005 上还原数据库的备份
  • 分离和附加

我知道我可以:

  • 使用导入数据向导,我在一个数据库上尝试过,但它只移动数据,即使那样也很麻烦,因为我需要做很多工作来创建临时表来维护标识列,重新创建所有 FK、索引等。

有没有更简单的选择?

sql-server migration downgrade

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

“CONCAT”不是可识别的内置函数名称

一位客户报告说他们在 SQL Server 2012 上运行,我们在最终交付之前交付了一些测试查询以进行测试,但是:

“CONCAT”不是可识别的内置函数名称。

我知道这CONCAT()是 SQL Server 2012 中引入的一个新的内置函数,这一切都很好,但是我被要求回滚我的更改以使这个 2008R2 兼容,打着“执行查询的用户可能不具有要执行的 Transact-SQL 权限。” 所以我只是证明我的观点,客户端很可能在 DEV 中安装的 SQL Server 版本与在 PROD 中安装的版本不同。

我找不到任何关于专门拒绝SELECT/EXECUTE内置标量值函数的权限的信息,但是否有可能,如果是这样,用户是否仍会收到相同的错误文本?

sql-server-2008 sql-server sql-server-2012 concat

34
推荐指数
2
解决办法
12万
查看次数