小编Mad*_*dan的帖子

在连接条件中使用的列上应用索引

在下面的查询中,在连接条件中使用的列上使用索引有什么好处?

select * from table_a
inner join table_b on
           table_a.col1 = table_b.col1 and 
           table_a.col2 = table_b.col2
Run Code Online (Sandbox Code Playgroud)

在上面的join中,是否有利于索引表 table_a(col1,col2)或表table_b(col1,col2)中列的顺序是否影响性能?

如果假设有一个索引table_b(col1,col2)。这是否意味着我们需要按如下方式更改查询?

select * from table_a
    inner join table_b on
               table_b.col1 = table_a.col1 and 
               table_b.col2 = table_a.col2
Run Code Online (Sandbox Code Playgroud)

sql-server index-tuning

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

使用临时表连接调整查询

我有一个查询如下:

SELECT @tenor_from =CONVERT(DATETIME,MIN(spc.maturity_date),103)  
FROM source_price_curve spc  
INNER JOIN #source_price_curve_list spcl
    ON spc.source_curve_def_id  = spcl.price_curve_id  
WHERE spc.as_of_date >= @as_of_date_from
Run Code Online (Sandbox Code Playgroud)

运行需要将近 12 秒。从连接中删除临时表 #source_price_curve_list 会在不到 1 秒的时间内给出结果。

source_price_curve表有 1.3 亿条记录。临时表#source_price_curve_list在输出中有一条记录(如下所示)。将来可能会包含更多数据

select * from #source_price_curve_list
 rowID  price_curve_id
  1          1 
Run Code Online (Sandbox Code Playgroud)

为什么与单记录临时表的内部连接会使查询花费更长的时间?我需要将查询运行时间减少到 1 秒以内。

以下链接提供了带有连接的查询的执行计划:

https://www.brentozar.com/pastetheplan/?id=BksaaWjSb

没有join to temp table的查询运行不到1秒,执行计划链接如下:

https://www.brentozar.com/pastetheplan/?id=BJ2_3boSZ

表 source_price_curve 创建如下:

CREATE TABLE [dbo].[source_price_curve](
    [source_curve_def_id] [int] NOT NULL,
    [as_of_date] [datetime] NOT NULL,
    [Assessment_curve_type_value_id] [int] NOT NULL,
    [curve_source_value_id] [int] NOT NULL,
    [maturity_date] [datetime] NOT NULL,
    [curve_value] [float] NOT …
Run Code Online (Sandbox Code Playgroud)

performance sql-server query-performance

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

缩小数据库的性能优势

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

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

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

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

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

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

sql-server

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