我的網站上有一個頂級列表頁面,它在特定列中獲取25行的最高值。如果基於一列(例如分數),我沒有問題提取頂級列表,但是當涉及更多列時,我遇到了一些性能問題。有效地獲取25行,最高的兩列總和(MySQL)
在有問題的情況下,我想選擇25行,按降序排列兩列總和。
SELECT username, rank1 + rank2 AS rank FROM users ORDER BY rank DESC LIMIT 25
該查詢工作,但需要大約爲0.25秒完成,而相比之下,查詢在單柱中取約0.0003。以下是解釋查詢的結果:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra 1 | SIMPLE | accounts | ALL | NULL | NULL | NULL | NULL | 517874 | Using filesort
rank1和rank2都被編入索引,但顯然這些索引不用於此查詢。有沒有辦法通過編輯查詢或索引來提高性能?
我正在刪除sql-server標記,因爲語法是針對MySQL的。 –
你可以多說一下'rank1'和'rank2'列中值的分佈嗎? –
你有沒有試過在'(username,rank1,rank2)'上添加一個索引? –