搜索与一组范围匹配且性能良好的记录

时间:2019-03-27 16:29:53

标签: sql sql-server

假设我有一个具有以下结构的货币兑换表:

.data

.text
main:  
        # 5 parameters  
        li $s0, 2  
        li $s1, 3  
        li $s2, 5  
        li $s3, 10  
        li $s4, 20 

        addi $sp, $sp, -20 # 5 Words are 5 * 4 bytes  
        sw $s0, 0($sp)  
        sw $s1, 4($sp)  
        sw $s2, 8($sp)  
        sw $s3, 16($sp)  
        sw $s4, 20($sp)  

        jal addFiveNumbers  

        # free stack  
        addi $sp, $sp, 20  

        # print the result in $v0  
        move $a0, $v0
        li $v0, 1
        syscall

    # terminate program
    li $v0, 10
        syscall

addFiveNumbers:  

    lw $t0, 0($sp)  
    lw $t1, 4($sp)  
    lw $t2, 8($sp)  
    lw $t3, 16($sp)  
    lw $t4, 20($sp)  

    add $v0, $t0, $t1  
    add $v0, $v0, $t2  
    add $v0, $v0, $t3  
    add $v0, $v0, $t4  
    jr $ra 

我想查询该表中某个时间段或单个日期的货币兑换。例如,所有具有CREATE TABLE CurrencyExchanges ( Id int, FromCurrency uniqueidentifier, ToCurrency uniqueidentifier, RateDate date, Value int ); RateDate >= '2019-03-27' RateDate <= '2019-03-31'RateDate >= '2019-03-01'的记录。请注意,它们可能重叠。现在,我知道我可以做这样的事情:

RateDate <= '2019-03-28'

但是问题是我将这些日期范围的列表传递给查询,它们可能是几个。因此,我必须在where子句中添加大约1000个SELECT * FROM CurrencyExchanges WHERE (RateDate >= '2019-03-27' AND RateDate <= '2019-03-31') OR (RateDate >= '2019-03-01' AND RateDate <= '2019-03-28') 条件的列表。我担心在where子句中有1000个条件的性能如何。我想知道是否还有其他选择,例如使用OR作为标量值,还是其他选择。

有什么想法吗?如果使用该列表的IN条件方法,我会带来高性能的收益吗?

谢谢

0 个答案:

没有答案