gpt4 book ai didi

sql - 递归 SQL 查询加速非索引查询

转载 作者:行者123 更新时间:2023-12-03 01:49:40 25 4
gpt4 key购买 nike

这个问题很大程度上是出于好奇心,因为我确实有一个有效的查询(只是比我想要的时间要长一点)。

我有一个包含 400 万行的表。该表上的唯一索引是自动递增的 BigInt ID。该查询正在查找其中一列中的不同值,但仅返回 1 天。不幸的是,计算的 ReportDate 列不是 DateTime 类型,甚至不是 BigInt,而是 YYYYMMDD 格式的 char(8)。所以查询有点慢。

  SELECT Category 
FROM Reports
where ReportDate = CONVERT(VARCHAR(8), GETDATE(), 112)
GROUP BY Category

注意,上面语句中的日期转换只是将其转换为YYYYMMDD格式进行比较。

我想知道是否有一种方法可以优化此查询,因为我知道我唯一感兴趣的数据位于表的“底部”。我正在考虑某种递归 SELECT 函数,它逐渐增长一个可用于最终查询的临时表。

例如,在 psuedo-sql 中:

N = 128
TemporaryTable = SELECT TOP {N} *
FROM Reports
ORDER BY ID DESC

/* Once we hit a date < Today, we can stop */
if(TemporaryTable does not contain ReportDate < Today)
N = N**2
Repeat Select

/* We now have a smallish table to do our query */
SELECT Category
FROM TemproaryTable
where ReportDate = CONVERT(VARCHAR(8), GETDATE(), 112)
GROUP BY Category

这有道理吗?这样的事情可能吗?

这是在 MS SQL Server 2008 上。

最佳答案

我可能建议您不需要转换以 YYYYMMDD 格式存储为字符数据的Date;该格式本质上是可以单独排序的。我会将您的日期转换为该格式的输出。

此外,您编写转换的方式是转换每个单独行的当前日期时间,因此即使为整个查询存储该值也可以加快速度......但我认为只需将您要搜索的日期转换为该字符格式就会有所帮助。

当然,我还建议您创建需要创建的索引...但这不是您问的问题:P

关于sql - 递归 SQL 查询加速非索引查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3916916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com