Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL语言使用';描述';_Sql - Fatal编程技术网

SQL语言使用';描述';

SQL语言使用';描述';,sql,Sql,我测试我的SQL语言,发现一个问题,当我删除'desc'时,SQL运行得很快,但当我添加'desc'时,SQL运行得很慢。如何优化我的SQL语言。多谢各位 DELETE FROM [WHRW_BATCH] WHERE [Start_TM] NOT IN (SELECT TOP 10000 [Start_TM] FROM [WHRW_BATCH] ORDER BY [Start_TM] DES

我测试我的SQL语言,发现一个问题,当我删除'desc'时,SQL运行得很快,但当我添加'desc'时,SQL运行得很慢。如何优化我的SQL语言。多谢各位

DELETE FROM [WHRW_BATCH] 
WHERE [Start_TM] NOT IN (SELECT TOP 10000 [Start_TM] 
                         FROM [WHRW_BATCH] 
                         ORDER BY [Start_TM] DESC

这看起来像SQL Server语法。在该数据库中,我建议使用可更新的CTE:

WITH todelete AS (
      SELECT wb.*,
             ROW_NUMBER() OVER (ORDER BY Start_TM DESC) as seqnum 
      FROM WHRW_BATCH wb
     )
DELETE FROM todelete
    WHERE seqnum > 10000;
这将保留10000条最新记录

如果表相当大(即大多数记录被删除),则您可能会发现临时表的速度更快:

select top (10000) wb.*
into temp_whrw_batch
from WHRW_BATCH wb
order by Start_TM desc;
然后从表中删除所有行并重新插入:

truncate table WHRW_BATCH;

insert into WHRW_BATCH
    select *
    from temp_whrw_batch;

-请添加一个标记,以指定您使用的是
mysql
postgresql
sqlserver
oracle
还是
db2
——还是其他完全相同的东西。您的数据索引是否按asc排序?这也许可以解释为什么订购desc需要时间。对不起,我做的标签不清楚。这是SQL SERVER,谢谢。