2016-02-25 103 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中的表格(根據需要)。