如何根據不同的排序規則有效地對字符串列執行ORDER BY?也就是說,來自不同文化背景的用戶的數據存儲在同一個表和同一列中,但每個用戶自然希望根據其語言環境來查看它(當然,該語言環境已知,並且每個表中的每行都是固定的)。並且表可能很長,所以列需要和索引,並且不能在應用程序端進行後期處理以達到所需的歸類(這是數據庫任務,以完成繁重工作,對吧?)。同一個MariaDB列的多個歸類?
例如,utf8_general_ci
與utf8_swedish_ci
產生不同的結果。
雖然我認爲這個問題對於任何國際項目都是顯而易見的,但我找不到任何合適的解決方案。我自己,我才能成像只有下面的解決方案,這是不是很好,我懷疑沒有更好的可以做:
- 使用一個單獨的領域每個比
- 也許,一個視圖可以爲每個文化創建和索引因此(我還沒有和MariaDB的意見雖然工作,所以這是很理論的)
- 使用一個單獨的「代孕」現場只是爲了整理,也許VIRTUAL現在
,如果只有一個排序字符串列,但可能有幾個。什麼是解決這個問題的有意和正確的方法?
這是罰款,「小」表。因爲索引已經處於特定的排序規則中,因此對COLLATE子句的處理會阻止使用任何INDEX。 –
哦,是的,這是正確的。當在COLLATE子句中使用不同的排序規則時,'EXPLAIN'說「使用索引,使用filesort」。那麼,在這種情況下,應該找到一種方法來複制想要的歸類中的相關列,同時儘量減少填充時的工作量。虛擬列在這裏沒有幫助,因爲它們不能得到一個'INDEX',一個持久列可以,但是'EXPLAIN'說它總是在'SELECT'中使用filesorting。因此,您最終將手動填充所需歸類的其他列。呃,更糟糕。 – Anse
Filesort發生的原因很多;讓我們看看具體的查詢和「CREATE TABLE」來討論它。 –