2016-02-25 65 views
0

首先,对不起我的英文。MySQL和数据库查询:排序

我有一个C++桌面应用程序,它从数据库中获取行,并且对于每一行,应用程序都会创建一个代表该行特定表的对象。每个表都有其相应的类(我使用ODB)。

一旦我恢复了表的行,我将它们显示在一个表中,可以按列进行排序。每列都有一个“排序”图标,允许根据该列对表格条目进行排序。

我的问题是,什么是质量应用程序通常做什么?每次必须对表进行排序时进行其他查询?或手动排序对象,例如,使用一个std :: set?哪个更快?

我认为使用std :: set对条目进行排序的速度更快,因为我们避免与MySQL服务器进行通信,但同时如果我们重新排序多次同一个数据库表,MySQL优化器会做一些魔术,特别是涉及指数。我认为这甚至可能取决于这些排序操作的频率。

无论如何,我想知道两种方法的优缺点。

+0

我觉得这个问题更多地属于[programmers.stackexchange.com](http://programmers.stackexchange.com/)。 –

+0

@SimonKraemer在提及其他网站时,指出[交叉发布令人不悦](http://meta.stackexchange.com/tags/cross-posting/info) – gnat

+0

@gnat感谢您指出这一点。我忘了补充那部分。 –

回答

1

许多应用程序都让数据库执行大部分工作。

当创建表时,应用程序会通知数据库设置用于搜索(索引)的列。数据库通常会创建一个索引表。这使得搜索更快,因为表中数据的顺序不需要排序。

应用程序将向数据库发送查询语句,以按需要的顺序从数据库中选择数据。应用程序然后迭代数据。

在GUI网格中显示数据时,许多框架会为您执行排序。你告诉GUI要使用哪个列进行排序,然后使用GUI度假区然后显示数据。真正的应用程序尽可能使用现有的库和框架。

如果您的表有足够的内存,请读取数据并对表进行排序。否则,告诉数据库生成一个新视图并重新加载GUI中的表格(根据需要)。