我有一个非常简单的查询:
SELECT COUNT(*)
FROM messages
INNER JOIN users ON messages.user_id = users.user_id
Run Code Online (Sandbox Code Playgroud)
加入需要 1146 毫秒,没有加入需要 220 毫秒(220 毫秒对我来说仍然很慢)。在包含 1,000,000+ 行的消息表上进行测试。
我在两个表 ( message_idand user_id)上都设置了主键,并设置了连接messages.user_idand的外键users.user_id。
此查询的原因是为分页系统提供记录总数。
我还能做些什么来加速查询?
我在 SQL Server 2012 中有一个包含 460.000 行的表。
该表具有以下架构:

我们的应用程序有问题,所以所有 500.000 行都是Comments用空格填充的。
这导致表大小约为 3.7GB:

在此之后,我执行以下操作来修复结尾空格,但数据库保持在 3.7GB。
update voucher set comments = ltrim(rtrim(comments))
Run Code Online (Sandbox Code Playgroud)
一个快速计算显示,一个完全填充的行大约有 280 个字节的原始数据,一个空行(所有 varchars 为空)有 32 个字节。
这意味着对于 460.000 行,我的表应该在 32MB-122MB 之间。
为什么表是3.7GB?我怎样才能收回空间?
我在想,除了使用相同的架构设置 HADR 之外,是否可以以某种方式利用 SQL Server 2012 中的 AlwaysOn 架构为 DEV 和 QA 环境正确创建副本?
sql-server architecture sql-server-2012 high-availability availability-groups
我很困惑这个自动增长属性对 SQL Server 中的任何数据库或日志文件的作用。
根据我的理解:
请帮助我知道这个假设是否正确,如果是错误的,请纠正我。
我是一个偶然的 dba。我正在做索引重建/重组。一旦我适应了这些任务,我很想使用一些脚本。我确实浏览了一些有关此主题的论坛页面。我有一个 sql server 2008R2 实例,它有大约 25 个不同大小和需求的数据库。我被指派为 8 个数据库进行索引调整。由于大小和碎片级别以及索引的数量以及碎片整理发生的速度因数据库而异,我知道有些数据库需要每月进行一次索引维护,而其他一些则需要每周进行一次索引维护。我有两个问题:
我应该多久安排一次重建/重组过程? 例如:上个月我为高于 30% 的片段级别重建了索引,并为 5-30% 的片段级别重新组织和更新了统计信息。然后我一周后检查,我发现一两个碎片索引,一个月后我检查它,我发现大约10个碎片索引..是不是再次安排索引维护的合适时间?
如果我为实例开发一个通用脚本,我应该如何使它适用于实例上的所有数据库,因为不是每个数据库都需要同时进行索引维护。
index sql-server maintenance sql-server-2008-r2 fragmentation
我有一个带有 REAL 类型列的简单表。
表中有 2 行,值分别为 0.23 和 0.24。如果我运行以下命令:
SELECT AVG(MyColumn) FROM dbo.MyTable
Run Code Online (Sandbox Code Playgroud)
我希望得到 0.235 的结果,但实际上我得到 0.2349999901234。
有人可以告诉我为什么吗?
我正在尝试选择服务器中 15% 的可用磁盘空间。
SELECT DISTINCT
s.volume_mount_point [Drive],
CAST(s.available_bytes / 1048576.0 as decimal(20,2)) [AvailableMBs],
((CAST(s.total_bytes / 1048576.0 as decimal(20,2)))*15)/100 AS [FifteenpercentAvailableMBs]
FROM
sys.master_files f
CROSS APPLY sys.dm_os_volume_stats(f.database_id, f.[file_id]) s
Run Code Online (Sandbox Code Playgroud)
此查询在 Microsoft SQL Server 2008 R2 (SP2) 中运行良好
但它不适用于 Microsoft SQL Server 2008 R2 (RTM)
我怎样才能使这个查询在 2008 R2 RTM 中工作?(我的意思是有没有其他查询可以用来获得 15% 的可用空间?)
我需要创建一个如下所示的表:
+----+---------+---------+
| Id | Product | Version |
+----+---------+---------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 1 |
| 4 | 1 | 3 |
| 5 | 2 | 2 |
+----+---------+---------+
Run Code Online (Sandbox Code Playgroud)
哪里ID是Identity(1,1)我需要的Version是自动填充这取决于插入Product。
SELECT使用ROW_NUMBER()with可以达到类似的效果PARTITION:
SELECT ID, Product,
ROW_NUMBER() OVER(PARTITION BY Product ORDER BY ID) AS Version
FROM Products
Run Code Online (Sandbox Code Playgroud)
我有哪些选择?
我查询此 SQL 查询:
SELECT * FROM [DB].[dbo].[Table]
WHERE [DATE] BETWEEN '01-01-2016' AND '31-03-2016'
AND ([TIME] >= '00:00:00' OR [DATE] > '01-01-2016')
AND ([TIME] <= '00:00:00' OR [DATE] < '31-03-2016');
Run Code Online (Sandbox Code Playgroud)
但在 SQL Studio 中,结果为另一个日期和时间。
[DATE] = VARCHAR(10) (DD-MM-YYYY)
[TIME] = VARCHAR(10) (HH:MM:SS) 24h
Run Code Online (Sandbox Code Playgroud)
怎么修 ?
sql-server ×9
architecture ×1
date ×1
ddl ×1
dmv ×1
foreign-key ×1
functions ×1
identity ×1
index ×1
join ×1
maintenance ×1
performance ×1
permissions ×1
size ×1
t-sql ×1
time ×1