Php 向表中添加新列并降低整个数据库的运行速度。。为什么?

Php 向表中添加新列并降低整个数据库的运行速度。。为什么?,php,sql-server,Php,Sql Server,我有一个USERDATA表,并向其中添加了一些新列。 不是全部为NUL,默认为0或1。然而,我的网站在这样做之后变得很慢。 我是说真的很慢。这是因为我网站上的查询脚本: $num_rows = $db->doQuery('SELECT TOP 50 IDNum, IDName, Nation, (SELECT SUM(Loyalty) FROM USERDATA WHERE USERDATA.Knights = KNIGHTS.IDNum AND USERDATA.Authority =

我有一个USERDATA表,并向其中添加了一些新列。 不是全部为NUL,默认为0或1。然而,我的网站在这样做之后变得很慢。 我是说真的很慢。这是因为我网站上的查询脚本:

$num_rows = $db->doQuery('SELECT TOP 50 IDNum, IDName, Nation, (SELECT SUM(Loyalty) FROM USERDATA WHERE USERDATA.Knights = KNIGHTS.IDNum AND USERDATA.Authority = 1) as ClanLoyalty, (SELECT SUM(MannerPoint) FROM USERDATA WHERE USERDATA.Knights = KNIGHTS.IDNum AND USERDATA.Authority = 1) as ClanManner FROM KNIGHTS WHERE KNIGHTS.IDNum NOT IN (1,15001) ORDER BY ClanLoyalty DESC, IDName ASC');
它以前工作得很好,但是在添加了新的列之后,这些列根本不包括在上面的查询中。。它仍然减慢了网站对前50名的要求。。基本上,SUM查询就是这样做的。。为什么这些新专栏会产生这样的问题

USERDATA只有32k行,以前它工作得很好。我没有指定constaint,这可能是问题吗


我使用MSSQL Server 2005。

像这样更改查询

SELECT TOP 50 IDNum,
              IDName,
              Nation,
              Sum(Loyalty)     ClanLoyalty,
              Sum(MannerPoint)  ClanManner
FROM   KNIGHTS
       LEFT JOIN USERDATA
              ON USERDATA.Knights = KNIGHTS.IDNum
                 AND USERDATA.Authority = 1
WHERE  KNIGHTS.IDNum NOT IN ( 1, 15001 )
Group by IDNum,IDName,Nation
ORDER  BY ClanLoyalty DESC,
          IDName ASC 

你可以看看这里的讨论,@RADAR同意,但OP仍然使用了相同的子查询两次,可以删除,仍然非常慢。然而,我测试了它,这是由我添加的新列引起的,但奇怪的是,这些列甚至没有包含在这个查询中。唯一的问题是它从新列所在的USERDATA中获取数据。这可能是什么原因造成的?可能我需要编辑这些列。是因为bigint在MSSQL Server 2005中被安装了错误,还是我应该试试?请给我任何一点检查,因为我真的很紧张,我无法解决它…你能转换不在吗@NoDisplayName查询可以生成不同的计划,这可能比您的查询要好得多。您能否将下划线表的架构与执行计划共享