在数据库内排序或在代码后面排序?哪个最好?

时间:2014-11-07 03:14:58

标签: c# mysql asp.net sorting datatable

我的aspx页面中有一个下拉列表。下拉列表的数据源是一个数据表。后端是MySQL,记录通过使用存储过程到达数据表。

我想按下降顺序在下拉菜单中显示记录。

我可以通过两种方式实现这一目标。

1)dt是数据表,我使用dataview来过滤记录。

dt = objTest_BLL.Get_Names();

dataView = dt.DefaultView; 
dataView.Sort = "name ASC";
dt = dataView.ToTable();

ddown.DataSource = dt;
ddown.DataTextField = dt.Columns[1].ToString();
ddown.DataValueField = dt.Columns[0].ToString();
ddown.DataBind();

2)或者在选择查询中我可以简单地说

SELECT
`id`,
`name`
FROM `test`.`type_names`
ORDER BY `name` ASC ;

如果我使用第二种方法,我可以简单地删除数据视图部分。假设此type_names表有50条记录。我的页面每分钟都有100,000名用户查看。考虑效率,内存处理的最佳方法是什么?获取未分类的记录到数据表并过滤后面的代码或在数据库中对它们进行排序?

2 个答案:

答案 0 :(得分:7)

注意 - 只有真正的性能测试可以告诉你真实的数字。理论选项如下(这就是为什么我在这个答案中大量使用单词猜测)。 您至少有3个(而不是2个)选项 -

  1. 在数据库中排序 - 如果要排序的列已编入索引..那么这可能最有意义,因为数据库服务器上的排序开销可能可以忽略不计。 SQL服务器自带的数据缓存可以使这种超级快速的操作...但是每分钟100k次查询。测量SQL是否在没有排序的情况下显着提高了结果。

  2. 在代码后面/中间层排序 - 可能你不会拥有自己的索引等价物......你要排序50条记录的列表,每分钟100k次......会慢一些比SQL,我猜。 只有在数据相对静态或变化非常缓慢的情况下才能应用大的好处,并且排序的值可以在内存中缓存几秒到几分钟或几小时..

  3. 不在列表中的选项 - 将未分类的数据一直发送到客户端,并使用javascript在客户端进行排序。此解决方案可以扩展最多...在浏览器中排序50条记录,不应对您的用户体验产生明显影响。

答案 1 :(得分:0)

SQL纯粹主义者毫无疑问会告诉你,让SQL进行排序而不是C#会更好。也就是说,除非您每秒处理大量记录集或进行多次查询,否则您不太可能注意到任何真正的差异。

对于我自己的项目,这些天我倾向于对C#进行排序,除非我在语句中运行某种聚合。原因是它很快,如果你在SQL服务器上运行任何类型的存储过程或函数,这意味着你不需要找到将顺序传递到存储过程中的方法。