【发布时间】:2013-08-01 04:27:22
【问题描述】:
我正在开发一个 ASP.NET MVC 应用程序。此应用程序由 200 个用户使用。这些 用户不断(每 5 分钟)从 100,000 个项目的列表中搜索一个项目(这个列表将每月增加 1-2%)。这个包含 100,000 个项目的列表存储在 SQL Server 表中。
搜索是通配符搜索
例如:
Select itemCode, itemName, ItemDesc
from tblItems
Where itemName like '%SearchWord%'
搜索需要非常快,因为主要业务依赖于搜索和选择项目。
我想知道如何获得最佳性能。搜索结果必须立即出现。
我尝试过的-
-
我尝试将全部 100,000 条记录预加载到内存缓存中,然后从内存缓存中读取。我试图避免每次搜索都调用 SQL Server。
这需要很多时间。每次用户搜索项目时,我们都会从内存缓存中检索 100,000 条记录,然后进行搜索。这比直接 SQL 搜索花费的时间几乎多出 2-3 倍。
-
我尝试对 SQL Server 表进行直接搜索,但将结果限制为一次仅 50 条记录(使用前 50 条记录)
这似乎没问题,但仍远未达到我们所寻求的性能
我想听听可能的解决方案和任何文章/代码的链接。
提前致谢
【问题讨论】:
-
您能详细说明一下您的应用程序的架构吗?执行关键字搜索时,它是精确关键字词还是通配符/屈折词?作为一般规则,您应该将搜索的繁重工作留给数据库..
-
这是全文目录搜索还是
LIKE? -
嗨,菲尔,这将是一个通配符搜索。
-
Alex,它不会是全文目录搜索。这类似于使用 Like '%SearchKey%'
-
有几个解决方案:缓存(您尝试过的),对列进行索引(使插入速度变慢,但读取速度会更快)。缓存可能会导致数据库中的数据不是最新的,但如果处理得当,您可以将其保持关闭,这将防止对数据库的命中。索引是数据库读取性能的最佳选择,它会增加一些写入开销,因此您应该考虑到这一点。
标签: c# sql-server-2008 asp.net-mvc-4 optimization memcached