我正在管理一个用经典ASP编写的Intranet站点,在Windows Server 2008上的IIS7中运行,并使用Microsoft Access作为数据存储区(切换到功能更强大的数据库不是一个选项,也不是切换到.NET)。
每个页面都会对数据存储区进行多次调用,以便填充各种视图等。
随着网站流量的增加,我们遇到了页面响应时间问题,一个可能的原因在于与数据存储区的连接效率。
用于此类设置的最有效的ADO连接类型是什么?
答案 0 :(得分:1)
我们的一些网站遇到了类似的问题。所有内容都是数据库驱动的。我们使用SQL Server并在显示网页时尽可能少地进行数据库往返。我们开始关注大量使用网站不断访问数据库,并对我们的网站如何构建进行了一些改变。
我们最终用静态包含文件替换了大约70%的数据库驱动内容。我们将网站内容数据分为三组。
我们用包含文件替换了静态内容。如果客户希望进行更改,他们告诉我们,我们进行了更改(收费)。
我们将半静态内容归类为数据,这些数据很少发生变化,但可以由客户使用后端界面进行更改。在这种情况下,我们还使用了静态包含文件。在对数据库进行更改之后,我们运行(对用户透明)静态数据创建小部件,该小部件基于数据库更新将静态数据重新创建为包含文件。下次调用页面时,它将使用新构建的包含文件。
答案 1 :(得分:0)
我不确定您是否可以通过使用不同的ADO类型获得性能。我认为这更多地与数据库大小和结构有关。
我的申请也遇到了类似的麻烦。虽然我为我的客户构建了许多很多应用程序,但其中很少有人拥有庞大的受众。最近我建了一个,而且是男孩,我必须学习一两件事才能让它变得高效。
如果您尚未考虑,请考虑以下几点。有些可能对你有点基础但对其他人也有用:
1) INDEX或FULLTEXT INDEX - 为了加速我的数据库,我在我查询的列中添加了INDEX,这大大加快了我的查询速度(但稍微减慢了INSERT的速度)。我还在我搜索多个单词的列中添加了FULLTEXT INDEX,因此我可能会丢失非常慢的LIKE / IN子句。
2)规范化或去规范化 - 我的一个查询使用连接和子查询搜索了16个表,结果显得缓慢,笨重且令人困惑。我通过创建一个“非规范化”表来修复此问题,该表包含我搜索所需的16个表中的所有可用数据。因此,在FULLTEXT INDEX和非规范化索引表的帮助下,我的查询只有几行,非常快。在使用非规范化表之前,必须先了解规范化表。对我来说,这是你可以违反规则的正确情况。
3) SQL字段选择 - 仅选择SQL查询中所需的字段。这是一个简单的错误,但仍然可以做到。例如,如果您不需要返回所有列,请不要执行(select from myTable),执行更精确的操作(如选择id,来自myTable的fname),如果这是您需要的唯一列。
4)数据库清理 - 我不确定Access,但在MYSQL中你可以使用OPTIMIZE查询来清理你的数据库,该查询修复数据库中的任何空白,有时通过插入和删除来创建经常有很多数据。您还可以使用EXPLAIN,它详细解释您的查询,例如计时器,使用的索引,使用的行和返回的记录。
有很多方法可以获得数据库性能。如果你谷歌“数据库优化”或“数据库调优”,你应该找到一些很好的阅读..