我有一个包含6列的表,其中一列是Id(big int,primary),一列是CreatedDate(datetime),并且它的行数超过一百万。 使用以下查询从该表中检索数据时,需要花费超过1分钟的时间。
select * from MyTable where CreatedDate between '2019-05-01' and '2019-05-30'
我也在下面的查询中使用过,但是也需要超过1分钟的时间。
declare @minId bigint, @maxId bigint
select @minId = min(Id) from MyTable where CreatedDate > = '2019-05-01'
select @maxId = max(id) from MyTable where CreatedDate <= '2019-05-30'
select @minId, @maxId
select * from MyTable where Id between @minId and @maxId
它只有一个索引(Id-主键),我认为向CreatedDate添加索引可能会影响插入/更新操作。
我想将此结果连接到另一个表以使一些报表数据显示在网格中,但是执行此查询时发生超时。
如何快速检索数据?
答案 0 :(得分:0)
答案 1 :(得分:0)
尝试创建以下索引:
import { Component } from '@angular/core';
@Component({
selector: 'select-example',
templateUrl: 'select-example.html',
styleUrls: ['./select-example.css'],
})
export class SelectExample {
//this is the missing bit your missing
customAlertOptions: any = {
header: 'Pizza Toppings',
subHeader: 'Select your toppings',
message: '$1.00 per topping',
translucent: true
};
customPopoverOptions: any = {
header: 'Hair Color',
subHeader: 'Select your hair color',
message: 'Only select your dominant hair color'
};
customActionSheetOptions: any = {
header: 'Colors',
subHeader: 'Select your favorite color'
};
}
请注意索引CREATE NONCLUSTERED INDEX [IX_CreatedDate_ID]
ON dbo.YourTable
(CreatedDate, ID)
GO
的顺序。 (CreatedDate, ID)
是索引的第一列。这是非常重要的。因此,当您使用CreatedDate
时,您的查询计划将包含WHERE CreatedDate BETWEEN '2019-05-01' and '2019-05-30'
。
您的查询应如下所示:
index seek
答案 2 :(得分:0)
使用存储过程尝试。存储过程已准备就绪,可以进行代码处理,而预编译的代码将花费较少的时间来获取数据。