从查询中检索数据

时间:2019-06-19 09:10:20

标签: sql-server

我有一个包含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添加索引可能会影响插入/更新操作。

我想将此结果连接到另一个表以使一些报表数据显示在网格中,但是执行此查询时发生超时。

如何快速检索数据?

3 个答案:

答案 0 :(得分:0)

  1. 在CreatedDate上创建索引将有助于检索,同时在Insert中会产生一些副作用
  2. 除非打算使用所有通配符,否则请避免选择所有带有'*'通配符的列。选择冗余列可能会导致不必要的性能下降。

答案 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)

使用存储过程尝试。存储过程已准备就绪,可以进行代码处理,而预编译的代码将花费较少的时间来获取数据。

Sample stored procedure code