接下来如何查询以更少的时间修改我的数据(在本示例中,反之亦然)。
这看起来像是当前结果
这是我的查询
SELECT *
FROM Z_PRAESENZZEIT
WHERE ZPZ_Datum = N'2019-02-11T00:00:00.000' and ZPZ_LPE_ID = 121
order by ZPZ_ID ASC
我需要按小于(ZPZ_Von:1899-12-30 10:00:00 <1899-12-30 13:00:00
的ZPZ_ID和ZPZ_VON进行排序答案 0 :(得分:1)
有一些非常简单的方法可以优化数据查询,但是对您有用的方法似乎是使用ZPZ_LPE_ID作为标识符,在该列上有一个索引是有意义的(并确保重建索引)从而实际上提高了速度)。
ZPZ_Datum = N'2019-02-11T00:00:00.000'
也是可疑的。看起来像一个日期字段,但是您像字符串一样使用它,因此我将假定它实际上不是日期字段。字符串比较通常比日期和数字比较慢,因此您应该考虑将其设置为日期字段并将其与日期进行比较。
答案 1 :(得分:1)
我认为您不希望在更短的时间内(即更有效)进行排序,而是希望按小于给定值的时间进行排序。
SELECT *
FROM Z_PRAESENZZEIT
WHERE
ZPZ_Datum = N'2019-02-11T00:00:00.000' and
ZPZ_LPE_ID = 121
ORDER BY
CASE WHEN ZPZ_Von < N'1899-12-30 13:00:00' THEN 0 ELSE 1 END,
ZPZ_ID
这将首先列出ZPZ_Von
少于1899-12-30 13:00:00
的{{1}}的所有记录,然后列出ZPZ_ID
的所有其他记录。此ZPZ_ID
表达式创建两个组,按这些组对记录进行排序。
如果您只是想先按时间排序,然后再按ID排序(如果两个或多个记录具有相同的时间),则写
CASE
默认顺序始终为ORDER BY ZPZ_Von, ZPZ_ID
,即从小到大。如果要反转,请写ASC
。
答案 2 :(得分:0)
我将您的查询写为:
SELECT *
FROM Z_PRAESENZZEIT
WHERE ZPZ_Datum = '2019-02-11' and ZPZ_LPE_ID = 121
ORDER BY ZPZ_ID ASC;
对于此查询,您需要Z_PRAESENZZEIT(ZPZ_LPE_ID, ZPZ_Datum, ZPZ_ID)
上的索引。这应该同时满足WHERE
并允许ORDER BY
避免排序。