加快LINQ查询的技巧?

Dar*_*ter 3 .net linq

我有一个LINQ查询,它搜索大约250,000条记录的SQL表,只搜索2个字段.这两个字段都已编入索引,但我发现它仍然运行得相当慢.

以下是代码,任何人都可以提出任何建议来加快速度吗?

谢谢

var qryN = (
    from bn in dbs.Uploads
    orderby bn.ID descending
    select new
    {

        ID = bn.ID,
        Serial = bn.serial_no,
        Manufacturer = bn.Mfgr,
        Model = bn.model,
        Code = bn.code,
        Qty = bn.qty,
        Description = bn.description,
        Comments = bn.comments,
        Location = bn.location,
        Price = bn.price,
        Email = "Register / Login for full details"
    });

if (dlType.Text != " " && dlType.Text != "")
{
    qryN = qryN.Where(bn => bn.Manufacturer == dlType.SelectedValue);
}

if (txtWord.Text != "")
{
    qryN = qryN.Where(bn => bn.Description.Contains(txtWord.Text));
    }

gvLoggedOff.DataSource =
    from p in qryN
    select new
    {
        p.ID, 
        p.Serial, 
        p.Manufacturer, 
        p.Model, p.Code, 
        p.Qty, 
        p.Description, 
        p.Comments, 
        p.Location, 
        p.Price, 
        p.Email
    };

gvLoggedOff.DataBind();    var qryN = (
    from bn in dbs.Uploads
    orderby bn.ID descending
    select new
    {

        ID = bn.ID,
        Serial = bn.serial_no,
        Manufacturer = bn.Mfgr,
        Model = bn.model,
        Code = bn.code,
        Qty = bn.qty,
        Description = bn.description,
        Comments = bn.comments,
        Location = bn.location,
        Price = bn.price,
        Email = "Register / Login for full details"
    });

if (dlType.Text != " " && dlType.Text != "")
{
    qryN = qryN.Where(bn => bn.Manufacturer == dlType.SelectedValue);
}

if (txtWord.Text != "")
{
    qryN = qryN.Where(bn => bn.Description.Contains(txtWord.Text));
    }

gvLoggedOff.DataSource =
    from p in qryN
    select new
    {
        p.ID, 
        p.Serial, 
        p.Manufacturer, 
        p.Model, p.Code, 
        p.Qty, 
        p.Description, 
        p.Comments, 
        p.Location, 
        p.Price, 
        p.Email
    };

gvLoggedOff.DataBind();
Run Code Online (Sandbox Code Playgroud)

Ste*_*ven 7

过滤器Description可能是一个问题:

qryN = qryN.Where(bn => bn.Description.Contains(txtWord.Text));
Run Code Online (Sandbox Code Playgroud)

Contains通话将转换为SQL description LIKE '%' + @p0 + '%'.这意味着即使您在description列上有索引,SQL服务器也必须遍历整个索引(或者甚至是整个表).如果可能,请将该行更改为以下内容:

qryN = qryN.Where(bn => bn.Description.StartsWith(txtWord.Text));
Run Code Online (Sandbox Code Playgroud)

这将转换为 description LIKE @p0 + '%'允许您的数据库服务器有效使用索引.