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

Pra*_*age 5 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();
Run Code Online (Sandbox Code Playgroud)

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

SELECT
`id`,
`name`
FROM `test`.`type_names`
ORDER BY `name` ASC ;
Run Code Online (Sandbox Code Playgroud)

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

Vik*_*pta 9

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

  1. 在数据库中排序 - 如果正在排序的列被索引..那么这可能是最有意义的,因为在数据库服务器上排序的开销可以忽略不计.SQL服务器自己的数据缓存可以使这种超快速的操作..但每分钟100k查询..测量SQL是否提供明显更快的结果而没有排序.

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

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