如何提高ASP.NET MVC中从SQL Server数据库获取数据的速度

我是asp.net mvc5的新手。 我有一个模型Shipping和我的dbo.Shippings.sql是这样的:

 CREATE TABLE [dbo].[Shippings] ( [Id] INT IDENTITY (1, 1) NOT NULL, [TruckerId] NVARCHAR (MAX) NULL, .........more there... CONSTRAINT [PK_dbo.Shippings] PRIMARY KEY CLUSTERED ([Id] ASC), CONSTRAINT [FK_dbo.Shippings_dbo.AspNetUsers_ApplicationUserId] FOREIGN KEY ([ApplicationUserId]) REFERENCES [dbo].[AspNetUsers] ([Id]) ON DELETE CASCADE ); CREATE NONCLUSTERED INDEX [IX_ApplicationUserId] ON [dbo].[Shippings]([ApplicationUserId] ASC); 

我的第一页必须显示未售出的所有发货( if shipping.truckerId == null表示尚未售出)

在我的ShippingController我有以下内容:

 // GET: Shipping public ActionResult Index(string sortOrder, string currentFilter, string searchString, int? page) { //below is sorting ViewBag.CurrentSort = sortOrder; ViewBag.FromSortParm = String.IsNullOrEmpty(sortOrder) ? "from_desc" : ""; ViewBag.DestSortParm = sortOrder == "Destination" ? "dest_desc" : "Destination"; if (searchString != null) { page = 1; } else { searchString = currentFilter; } ViewBag.CurrentFilter = searchString; //below is searching state and zipcode var shippings = from s in db.Shippings where s.TruckerId == null select s; if (!String.IsNullOrEmpty(searchString)) { shippings = shippings.Where(s => s.FromState.Contains(searchString)//from state || s.DestState.Contains(searchString)//dest state || s.FromZipCode.Contains(searchString)//from zipcode || s.DestZipCode.Contains(searchString));//dest zipcode } switch (sortOrder) { case "from_desc": shippings = shippings.OrderByDescending(s => s.From); break; case "Destination": shippings = shippings.OrderBy(s => s.Destination); //not working break; case "dest_desc": shippings = shippings.OrderByDescending(s => s.Destination); //not working break; default: shippings = shippings.OrderByDescending(s => s.OrderDateTime); break; } int pageSize = 10; int pageNumber = (page ?? 1); return View(shippings.ToPagedList(pageNumber, pageSize)); //return View(shippings.ToList()); } 

我认为:

 var shippings = from s in db.Shippings where s.TruckerId == null select s; 

如果db变得更大,那么获取信息并不是一个聪明的方法。

我只需要显示它的FromCity,FromState,FromZipCode,PickUpDateTime,DestCity,DestState,DestZipCode,Price,Content和TruckerId,它们告诉它是否已售出。

请帮忙!

编辑和更新:当我提出这个问题时,我对网络开发和数据库都是一个新手。 通过为db创建索引,我能够获得更好的性能。 所以快速查找可能。 我还制作了网络应用程序的架构。 我还创建了一个未出售的运输视图。 因此,如果网络从数据库中点击视图,它将不必花费时间进行过滤。

没有声誉评论,我会删除这个,或重拍回答!

关于什么 :

  1. 如果您不需要更多状态,可以添加一些enum状态(已售出,有效,在租金中……)或仅为卖出的bool值
  2. 或者也许一些优化 (比如将NVARCHAR(MAX)降低到可能的最长值,例如属性名称为NVARCHAR(20)

PS:我认为,这个选择不会减慢很多……