【问题标题】:SQL performance linq indexesSQL 性能 linq 索引
【发布时间】:2013-04-23 02:00:17
【问题描述】:

我有一个存储路线的 SQL 数据库。我将路线信息存储在一个表中,将坐标存储在另一个表中。

如果您对所有路线求和,现在我有大约 40 条路线,坐标为 50k。

我使用以下 LINQ 代码来获取数据

var query = (from b in db.routes select new { 
                    name = b.name, 
                    id = b.route_id,
                    coor = b.coordinates.Select(c => new 
                    { 
                           seq = c.sequence,
                           lat = c.position.Latitude, 
                           lon = c.position.Longitude 
                    }) });

这个查询需要 4.5 秒来执行,我觉得这很好。

我是索引新手,现在两个主键都是聚集索引,而主键是我使用以下 SQL 命令创建的普通(??)索引:

CREATE INDEX IX_route on [db].[coordinates] (route_id)

我的数据库是不是很慢或者对于这么大的数据量这是正常的吗?

【问题讨论】:

  • 如果连续快速运行两次查询,第二次是否仍然很慢?
  • 能否请您显示生成的 SQL 的结果?我猜,它没有优化,但它可以帮助重写 linq 查询
  • 使用 SQL Profiler 查看生成的 SQL,在 SSMS 中运行它并选择显示实际执行计划启用。 SSMS 将建议应该提高性能的索引。 weblogs.sqlteam.com/mladenp/archive/2008/12/29/…
  • 如果此查询是其通常用例的类型,那么coordinates 表上的route_id 应该是聚集索引而不是其主键。

标签: sql performance linq indexing


【解决方案1】:

如果你可以处理你的结果扁平化,这个查询可能会给你更好的性能:

            var query = from b in db.routes
                        from c in b.coordinates
                        select new
                        {
                            name = b.name,
                            id = b.route_id,
                            coor = new
                            {
                                seq = c.sequence,
                                lat = c.position.Latitude,
                                lon = c.position.Longitude
                            }
                        };

【讨论】:

    猜你喜欢
    • 2014-11-13
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    相关资源
    最近更新 更多